如何判断鼠标在窗口的那个控件上点击了右键?

本文介绍了一个项目中实现12个按钮分别响应右键点击需求的方法。通过解读MSG结构体,特别是hwnd句柄,转换为CWnd*并获取控件ID,从而实现对不同按钮的精确响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个功能是我在做项目的时候的一个需求,这里有12个按钮,每一个按钮都要单独响应一下右键点击的消息。其实就是判断到底在那个按钮上点击了右键然后做不同的处理。废话不说了直接上代码吧

PreTranslateMessage(MSG* pMsg)首先要响应这个消息(pMsg这个指针保存许多有用的信息比如hwnd 就是被点击的窗口句柄也就是按钮的句柄,message当然就是右键点击的消息了WM_RBUTTONDOWN,wparam具体没有用过,LPARAM 是高位是x,低位是Y这个坐标是在当前控件的矩形范围内的x和y的信息而且不需要坐标系的转换。time不知道是干嘛的,pt也是一个x和y 的信息但是却不知道干嘛的)。

typedef struct tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam;
    LPARAM      lParam;
    DWORD       time;
    POINT       pt;
#ifdef _MAC
    DWORD       lPrivate;
#endif
} MSG
CWnd *pWnd = FromHandle(pMsg->hwnd);
int ID = pWnd->GetDlgCtrlID();

最有用的当然就是hwnd 这个句柄了我们可以使用Fromhandle转换为cwnd*然后在使用getdlgCTRLID来确定当前控件的ID有了这些当然就能为所欲为拉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值