vc++给控件添加消息和函数

时间:2021-11-10 19:53:54

在这个地方主要说一下给按钮控件添加双击消息,因为我们给按按钮控件添加双击消息的时候,并且创建一个函数发现并没有触发这个消息,,比如:

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);
}