OnMouseMove事件为什么容易死掉?

qsxiaoyao 2008-04-15 01:32:14
LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam)
{
int x = GET_X_LPARAM(lParam);
int y = GET_Y_LPARAM(lParam);

HDC hdc, srcDC;
hdc = GetDC(hWnd);
HBITMAP srcBMP, _srcBMP, RgnBMP, _RgnBMP;
srcBMP = (HBITMAP)LoadImage(hInst, "UI\\cat.BMP", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

RgnBMP = (HBITMAP)LoadImage(hInst, "UI\\ctrlRgn.BMP", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

srcDC = CreateCompatibleDC(hdc);
_srcBMP = (HBITMAP) SelectObject(srcDC, (HGDIOBJ) srcBMP);

if (x > RGN[0].left && x < RGN[0].left+RGN[0].right && y > RGN[0].top && y < RGN[0].top+RGN[0].bottom) {
BitBlt(hdc, RGN[0].left, RGN[0].top, RGN[0].right, RGN[0].bottom, srcDC, 0, 0, SRCCOPY);
} else if (x > 20 && x < 120 && y > 100 && y < 140) {
BitBlt(hdc, RGN[1].left, RGN[1].top, RGN[1].right, RGN[1].bottom, srcDC, 0, 0, SRCCOPY);
} else if (x > 20 && x < 120 && y > 180 && y < 220) {
BitBlt(hdc, RGN[2].left, RGN[2].top, RGN[2].right, RGN[2].bottom, srcDC, 0, 0, SRCCOPY);
} else if (x > 20 && x < 120 && y > 260 && y < 300) {
BitBlt(hdc, RGN[3].left, RGN[3].top, RGN[3].right, RGN[3].bottom, srcDC, 0, 0, SRCCOPY);
} else {
RePaint();
}

ReleaseDC(hWnd, srcDC);
DeleteDC(srcDC);
ReleaseDC(hWnd, hdc);
DeleteDC(hdc);

// Sleep(10);

return 0;
}
是不是因为在事件中处理了分配DC加载图片的原因了?
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsxiaoyao 2008-04-15
  • 打赏
  • 举报
回复
谢谢各位,问题已经解决,的确是加载图片引起的
hityct1 2008-04-15
  • 打赏
  • 举报
回复
OnMouseMove事件非常频繁的,如果执行事件较长,会导致程序反应迟钝。
1)图片资源应该事先载入的,不要放在OnMouseMove。
2)做一下判断:只有在鼠标移入或移出某个矩形时,才变换图片,否则直接返回。
chenzhp 2008-04-15
  • 打赏
  • 举报
回复
照作者这样,每移动一点,都要加载图片,机器能受得了吗?
不想低调 2008-04-15
  • 打赏
  • 举报
回复
想法很特别
icosagon 2008-04-15
  • 打赏
  • 举报
回复
OnMoveMouse中加载图片,你也另类了点吧
wsXiqiang 2008-04-15
  • 打赏
  • 举报
回复
//ReleaseDC(hWnd, srcDC);
DeleteDC(srcDC);
ReleaseDC(hWnd, hdc);
//DeleteDC(hdc);
wsXiqiang 2008-04-15
  • 打赏
  • 举报
回复
注意对应关系:
CreateCompatibleDC <=> DeleteDC
GetDC <=> ReleaseDC

还有,在这个事件中读取图片,效率...

clhposs 2008-04-15
  • 打赏
  • 举报
回复
问windows!

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧