MFC 左、右键点击按钮的实现

添加一个BUTTON,我想实现左键处理事件A,右键处理事件B,请问怎么样实现这个功能?... 添加一个BUTTON,我想实现左键处理事件A,右键处理事件B,请问怎么样实现这个功能? 展开
 我来答
bhtzu
推荐于2016-07-03 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4203万
展开全部

按钮控件的左键单击消息是默认的,直接ClassWizard添加即可。

右键消息按钮控件默认是不支持的,需要自己处理。

两种办法:

  1. 派生一个自己的按钮类,并绑定指定控件。在自定义按钮类中处理WM_RBUTTONDOWN消息。

  2. 在对话框所在类CXXXDlg里面重载 PreTranslateMessage,并在其中这样处理消息:

BOOL CXXXDlg::PreTranslateMessage(MSG *pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message==WM_RBUTTONDOWN)       //可以改为任何消息
{
CRect r;
::GetWindowRect(GetDlgItem(IDC_00)->GetSafeHwnd(),&r);   //得到button所在的rect
POINT pt;
::GetCursorPos(&pt);             //得到鼠标动作的位置
if (PtInRect(&r,pt))        //判断鼠标动作是否在button范围之内     
{
AfxMessageBox(_T("右键单击"));
}
}
return CDialog::PreTranslateMessage(pMsg);
}
追问
请问按钮类如何派生?
追答
新建一个窗口类,将基类改为CButton即可。
另外,如果不熟悉,就直接用第二种的代码吧,派生要处理的东西比较多。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式