C++/纯Win32检测一个区域是否被点击

2 篇文章 0 订阅

之前在显示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测试成功.总体来说,代码难度不算很大.
这只不过是一篇随笔而已,如果有更好的办法,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值