vc弹出菜单PopMenu
a.实现函数:
void ShowMenu(UINT* pnFlags, UINT_PTR* pnIDNewItem, TCHAR** lppNewItem, UINT nItemCount, CWnd* pParent) { int i; LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 CMenu menu; menu.CreatePopupMenu();//声明一个弹出式菜单 //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已 //隐藏),将程序结束。 // //menu.AppendMenu(MF_STRING,WM_DESTROY, _T("导出 ")); for (i=0; i<nItemCount; ++i) { menu.AppendMenu((pnFlags[i]), pnIDNewItem[i], lppNewItem[i]); } //确定弹出式菜单的位置 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,pParent); //资源回收 HMENU hmenu=menu.Detach(); menu.DestroyMenu(); delete lpoint; }
b.调用实例:
1.xxx.h
#define UC_BROWSEDLG_EXPORT_FLOWDATA (1001) #define UC_BROWSEDLG_EXPORT_FLOWDATA2 (1002) class xxx { afx_msg void OnUcExportFlowdata(); afx_msg void OnUcExportFlowdata2(); }
2.xxx.cpp
BEGIN_MESSAGE_MAP(BrowseDlg, CDialog) ON_WM_CLOSE() ON_WM_SIZE() ON_COMMAND(UC_BROWSEDLG_EXPORT_FLOWDATA, &BrowseDlg::OnUcExportFlowdata) ON_COMMAND(UC_BROWSEDLG_EXPORT_FLOWDATA2, &BrowseDlg::OnUcExportFlowdata2) END_MESSAGE_MAP()
void BrowseDlg::OnUcExportFlowdata() { MessageBox(_T("uc1"), _T("uc"), 0); } void BrowseDlg::OnUcExportFlowdata2() { MessageBox(_T("uc2"), _T("uc"), 0); }
3.调用
UINT pnFlags[2]; UINT_PTR pnIDNewItem[2]; TCHAR* lppNewItem[2]; pnFlags[0] = MF_STRING; pnIDNewItem[0] = UC_BROWSEDLG_EXPORT_FLOWDATA; lppNewItem[0] = _T("导出"); pnFlags[1] = MF_STRING; pnIDNewItem[1] = UC_BROWSEDLG_EXPORT_FLOWDATA2; lppNewItem[1] = _T("导入"); ShowMenu(pnFlags, pnIDNewItem, lppNewItem, 2, this);