为何我的弹出菜单和主菜单执行的效果不一样?
刚接触VC。现在做一个界面,如资源浏览器样式。
在主菜单中所有的菜单命令都放在MainFrame类中了,其中有一个命令为:CMyDlg *pDlg = new CMyDlg; pDlg->DoModal();调出对话框设置一些参数,一切都正常。
我在左视图CTreeView中加入如下消息映射,用来右键弹出主菜单的一部分:
void CKeyView::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu Menu;
Menu.LoadMenu(IDR_MAINFRAME);
CMenu *pM = Menu.GetSubMenu(1);
pM->TrackPopupMenu(TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
Menu.DestroyMenu();
CTreeView::OnRButtonDown(nFlags, point);
}
单击调出对话框时,也能显示,但不响应鼠标和键盘输入。可是点击其它正在运行的程序之后,再点击我的程序就正常,或者在pDlg->DoModal()语句前加入MessageBox("ABC",0,0);弹出一个消息框后也正常了。
请问这是为何?
问题点数:20、回复次数:5Top
1 楼truewill(无处不在)回复于 2006-03-11 22:11:54 得分 10
试一下不要用动态生成 CMyDlg *pDlg = new CMyDlg;
改为在mainframe加个变量CMyDlg m_dlg;
另外,你好像没有说清楚你的问题,到底什么东西部相应鼠标,在哪里做pDlg->DoModal()的Top
2 楼zxphxh(天雨)回复于 2006-03-11 22:27:01 得分 0
就是在主菜单:“工具->设置”菜单中调出有模式对话框,在对话框上点击鼠标左键,任何控件都不响应。但我刚发现,有些CEdit控件能进行键盘输入。
又发现一个新问题:此时不管鼠标位置在不在CTreeView视图中,只要按下鼠标右键,都能弹出菜单。Top
3 楼Mackz(在相互)回复于 2006-03-11 22:46:16 得分 10
焦点问题。
在OnContextMenu 中触发弹出菜单Top
4 楼zxphxh(天雨)回复于 2006-03-11 22:57:59 得分 0
我发现问题的所在,把下面这句代码屏蔽掉就完全正常了
// CTreeView::OnRButtonDown(nFlags, point);
对VC了解太少,不知这句有没有用?
请问:Mackz(在相互)
我也在OnContextMenu试了一下:
void CKeyView::OnContextMenu(CWnd* /* pWnd*/, CPoint point)
{
CMenu Menu;
Menu.LoadMenu(IDR_MAINFRAME);
CMenu *pM = Menu.GetSubMenu(1);
pM->TrackPopupMenu(TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
}
但是我按下鼠标右键只有不动,且移动鼠标,再松开,才弹出菜单,这是为何?
Top
5 楼Mackz(在相互)回复于 2006-03-13 12:45:05 得分 0
可能是因为你同时响应了右键按下的消息。Top




