3.MFC中如何编辑右键的功能
在MFC中,很多的时候为了方便操作,需要利用鼠标的右键实现很多的功能。
这里总结自己在实现时的做法。
首先,找到要添加功能的区域,选择属性,找到Control Events中的NM_RCLICK,然后选择新增,本例中是新增的OnNMRClickListEnnote,然后双击,进入到对应的函数中。
然后,对函数进行如下的处理,如下图
void CEnqiureNoteDlg::OnNMRClickListEnnote(NMHDR *pNMHDR, LRESULT *pResult) { //LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE>(pNMHDR); // TODO: Add your control notification handler code here CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING,ID_MENUITEM_NEW, _T("新增")); menu.AppendMenu(MF_STRING,ID_MENUITEM_EDIT, _T("编辑")); menu.AppendMenu(MF_STRING,ID_MENUITEM_DELETE,_T("删除")); CPoint p; ::GetCursorPos(&p); menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, p.x, p.y, this); menu.DestroyMenu(); *pResult = 0; }
然后,注意需要在消息映射中添加声明,如下所示:
BEGIN_MESSAGE_MAP(CEnqiureNoteDlg, CDialog) ON_COMMAND(ID_MENUITEM_DELETE,&CEnqiureNoteDlg::OnDelete) ON_COMMAND(ID_MENUITEM_EDIT,&CEnqiureNoteDlg::OnEdit) ON_COMMAND(ID_MENUITEM_NEW,&CEnqiureNoteDlg::OnNew) ON_NOTIFY(NM_RCLICK, IDC_LIST_EnNote, &CEnqiureNoteDlg::OnNMRClickListEnnote) END_MESSAGE_MAP()
接着,在头文件中添加声明(如果没有就添加,有的话就不必了,因为有些是自动生成的),如下所示:
1、在protected域中,如下声明:
afx_msg void OnNew();
afx_msg void OnEdit();
afx_msg void OnDelete();
2、在public域中,如下声明:
afx_msg void OnNMRClickListEnnote(NMHDR *pNMHDR, LRESULT *pResult);
最后,实现各个具体的功能(这里以新增为例子),如下所示:
void CEnqiureNoteDlg::OnNew()
{
//MessageBox(_T("添加新增处理函数"));
m_NewDlg.DoModal();
}