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

posted @ 2011-10-11 16:24  zhxm  Views(1065)  Comments(0Edit  收藏  举报