主窗体中有一个MENU,简单的举个问题的例子,主窗体MENU中的有个菜单 “管理”,点击管理,下拉“添加服务器”,“修改服务器”,“删除服务器”。我有个子窗体是树列表,在右击树列表的时候 ,弹出管理中的三个ITEM。 CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
CPoint pPoint;
GetCursorPos(&pPoint); menu.GetSubMenu(0).TrackPopupMenu(TPM_LEFTALIGN,pPoint.x,pPoint.y,m_hWnd);这样可以右击弹出主菜单中管理的内容,但是如何获得选中内容的ID呢?问题1:如何获取右击菜单选中项ID。
我的思路是 将获取选中的ID,通过::PostMessage(GetDesktopWindow(),ID,0,0);将子窗体的操作消息到主窗体,请问这样可取吗?问题2:思路是否有问题。问题解决必定效率结贴!
menu.LoadMenu(IDR_MAINFRAME);
CPoint pPoint;
GetCursorPos(&pPoint); menu.GetSubMenu(0).TrackPopupMenu(TPM_LEFTALIGN,pPoint.x,pPoint.y,m_hWnd);这样可以右击弹出主菜单中管理的内容,但是如何获得选中内容的ID呢?问题1:如何获取右击菜单选中项ID。
我的思路是 将获取选中的ID,通过::PostMessage(GetDesktopWindow(),ID,0,0);将子窗体的操作消息到主窗体,请问这样可取吗?问题2:思路是否有问题。问题解决必定效率结贴!
protected:
//{{AFX_MSG(CGameView)
//...
afx_msg void OnBaseInfoShow();
//}}AFX_MSG
.cppIMPLEMENT_DYNCREATE(CGameView, CView) BEGIN_MESSAGE_MAP(CGameView, CView)
//{{AFX_MSG_MAP(CGameView)
//...
ON_COMMAND(IDC_CMD_BASICINFO,OnBaseInfoShow)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void fun()
{
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
CPoint pPoint;
GetCursorPos(&pPoint);
menu.AppendMenu(MF_STRING, IDC_CMD_BASICINFO, _T("基本信息"));
menu.GetSubMenu(0).TrackPopupMenu(TPM_LEFTALIGN,pPoint.x,pPoint.y,m_hWnd);
}
谢谢LS的热心回答,可能我表达的并不明确,我的问题是:主窗体和子窗体,并没有继承的关系,主窗体上做了如你所说的关联了,比如添加服务器有个ADD的函数,与命令消息做了关联,我在ADD()函数里做相应操作就可以,这是主窗体的做法。但是在子窗体里,并没有ADD()函数,有的只是同一个菜单项的ID,因此,我考虑向主窗体发消息的办法。希望有经验的高手给些提示
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();pFrame->Fun();