在这个地方主要说一下给按钮控件添加双击消息,因为我们给按按钮控件添加双击消息的时候,并且创建一个函数发现并没有触发这个消息,,比如:
void CABDlg::OnDoubleclickedButtonA()
{
// TODO: Add your control notification handler code here
MessageBox("Hello World Hello World",MB_OK);
}
这个是给按钮A添加一个双击的消息,我希望当双击按钮A的时候,可以弹出一个MessageBox但是这样并没有作用。
我们还需要做一个工作,就是在按钮的属性-->样式->通知的前民打一个对勾,这样我们的双击消息就可以起到作用了。
我们也可以不打对勾,但是我们需要截获右键的双击消息,并且做出处理:
BOOL CDlgCls::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_RBUTTONDBLCLK)
{ if(pMsg->hwnd== ::GetDlgItem(m_hWnd,IDC_BUTTON1)) //可以调用PreTranslateMessage(MSG*)截获右键双击事件
AfxMessageBox("右键双击按钮\0");
}
return CDialog::PreTranslateMessage(pMsg);
}
我们接着来看一下怎样自定义一个消息,并且添加处理函数:
第一步是在界面所在类的头文件中声明宏消息:
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButtonA();
afx_msg void OnButtonB();
afx_msg void OnChangeEditchar();
afx_msg void OnDoubleclickedButtonA();
afx_msg void OnMouseClickEvent();
第二步是在Dlg.cpp文件中映射该消息,并且使其和IDC_BUTTON1链接
EGIN_MESSAGE_MAP(CABDlg, CDialog)
//{{AFX_MSG_MAP(CABDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_A, OnButtonA)
ON_BN_CLICKED(IDC_BUTTON_B, OnButtonB)
ON_EN_CHANGE(IDC_EDITCHAR, OnChangeEditchar)
ON_BN_DOUBLECLICKED(IDC_BUTTON_A, OnDoubleclickedButtonA)
ON_MESSAGE(IDC_BUTTON1,OnMouseClickEvent)
第三步是:在CPP文件中实现该消息:
void CABDlg::OnMouseClickEvent()
{
AfxMessageBox("自定义的消息产生按钮事件\0");
}
第四步是在某个需要的地方触发该消息:
BOOL CABDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_MOUSEMOVE)
{
if(pMsg->hwnd==::GetDlgItem(m_hWnd,IDC_BUTTON1)) //可以调用PreTranslateMessage(MSG*)截获右键双击事件
{
CABDlg::OnMouseClickEvent(); //此处鼠标一移动到按钮IDC_BUTTON1上就会触发到OnMouseClickEvent事件
}
}
return CDialog::PreTranslateMessage(pMsg);
}