之前在显示bitmap的时候遇到了一个问题:
IDB_BITMAP不可以用case IDB_BITMAP: 进行消息处理
但是又需要做对BITMAP的点击响应,用下面的代码就可以检测方形区域了:
int ClickArea(HWND hwnd, LPARAM lParam)
{
POINT pt;
wchar_t txt[80];
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
wsprintf(txt, L"x=%d;y=%d\n", LOWORD(lParam), HIWORD(lParam));
OutputDebugString(txt);
RECT rc = { 375,5,390,30 };//区域检测范围
if (PtInRect(&rc, pt))
{
//return IDB_BITMAP1;
}
return -1;
}
上述代码的RECT相信会用GDI的都知道怎么用了,
x1,y1到x2,y2的面积就是范围了qwq
接下来,在WM_LBUTTONDOWN里面处理对应消息
我的WinProc是这样的
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
所以就按照自己的HWND了LPARAM的声明来就可以了
case WM_LBUTTONDOWN:
{
if (ClickArea(hwnd, lParam) > 0)
{
//DeleteObject(hBitmap);
//DeleteObject(hFont);
PostQuitMessage(0);
break;
}
}
这样可以使用了!效果如下
:
这些代码不仅可以用于BITMAP范围检测.
对HDC的响应也是一个好主意.
同时,这些代码也可以自行封装,简化.
附加:
在LBUTTONDOWN消息里面是用来处理一个WndProc里面的消息的.
如果单纯是想响应类似MessageBox之类的消息,
可以在 if (PtInRect(&rc, pt))
里面使用.
目前已经在在VS2019测试成功.总体来说,代码难度不算很大.
这只不过是一篇随笔而已,如果有更好的办法,欢迎指正!