MFC 左、右键点击按钮的实现
答案:1 悬赏:60 手机版
解决时间 2021-04-01 15:52
- 提问者网友:蓝莓格格巫
- 2021-04-01 02:54
MFC 左、右键点击按钮的实现
最佳答案
- 五星知识达人网友:一叶十三刺
- 2021-04-01 04:07
按钮控件的左键单击消息是默认的,直接ClassWizard添加即可。
右键消息按钮控件默认是不支持的,需要自己处理。
两种办法:
派生一个自己的按钮类,并绑定指定控件。在自定义按钮类中处理WM_RBUTTONDOWN消息。
在对话框所在类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即可。
另外,如果不熟悉,就直接用第二种的代码吧,派生要处理的东西比较多。
右键消息按钮控件默认是不支持的,需要自己处理。
两种办法:
派生一个自己的按钮类,并绑定指定控件。在自定义按钮类中处理WM_RBUTTONDOWN消息。
在对话框所在类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即可。
另外,如果不熟悉,就直接用第二种的代码吧,派生要处理的东西比较多。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯