我在ActiveX控件中有个窗口,响应右键消息弹出一个右键菜单。可是为什么弹出来的菜单变灰了,鼠标样式变成了移动窗口的样式,可是同样的代码放到MFC下面就是正常的啊,谁能告诉我怎么回事,谢谢了。下面时弹出菜单的代码。void CVCapCtrlCtrl::OnRClick(NMHDR* pNMHDR,LRESULT* pResult)
{
CMenu menu,*pSubMenu;
menu.LoadMenu(IDR_POPMENU);
pSubMenu=menu.GetSubMenu(0);
CPoint oPoint;
GetCursorPos(&oPoint);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this);
}在线等。
{
CMenu menu,*pSubMenu;
menu.LoadMenu(IDR_POPMENU);
pSubMenu=menu.GetSubMenu(0);
CPoint oPoint;
GetCursorPos(&oPoint);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this);
}在线等。
解决方案 »
- TabCtrl的tab标签显示Tooltip
- 新手提问,请老鸟看看哪错了。谢谢
- 请教关于图像对比
- 新的错误
- 我写的模仿MSN 6.2界面的网络聊天程序,有兴趣的一定要加入我们的开发阿!
- 简单问题,小弟要定时从客户端(N个)传送文件到服务器(文件有几十K左右,大概几分钟传送一次)用什么样的方法比较好?
- 一个有关mac地址的问题?
- 高分征求邮件协议POP3、IMAP、SMTP数据流格式(详细)
- 我发布软件的贴子被转到“水园”去了,下面是链接地址http://www.csdn.net/expert/topicview1.asp,哎!!!
- VC数据库程序:为什么会发生数据截断?
- 请教高人关于激活已经打开的网页的问题
- CListCtrl重绘列表项问题
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,AfxGetMainWnd());
鼠标样式就正常了,但它还是灰的。郁闷,没人过来指导指导么?
应该不是这个问题吧,我在MFC里也没加响应函数的。不过我也试试。
问题在pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,AfxGetMainWnd()); 这个函数上:
从这个函数在MSDN上的解释看不出东西来,我找到了下面的这个函数:
BOOL TrackPopupMenu( HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, HWND prcRect);
我想这两个函数应该功能是一样的,只是参数和作用域上不同罢了。
MSDN对这个函数的HWND hWnd参数是这样解释的:
hWnd
[in] Handle to the window that owns the shortcut menu. This window receives all messages from the menu. The window does not receive a WM_COMMAND message from the menu until the function returns. If you specify TPM_NONOTIFY in the uFlags parameter, the function does not send messages to the window identified by hWnd. However, you must still pass a window handle in hWnd. It can be any window handle from your application.
从这段描述可以看出来,这个窗口句柄将处理你菜单的所有消息,而且这个窗口可以是你工程里面的其他任何窗口。
但是,如果你把菜单消息发送的窗口和你处理菜单消息的窗口弄的不一样了,就会出现菜单灰色的问题。
比如说: 你把所有的菜单处理事件放在InWnd类里面去处理,然后你给TrackPopupMenu传CVCapCtrlCtrl类指针就会出问题。
因为菜单消息的处理TrackPopupMenu交给了CVCapCtrlCtrl窗口去完成,结果你的处理函数没有在CVCapCtrlCtrl窗口里面,那你的菜单就是灰的。如果你将菜单消息的处理函数都放在了InWnd里面,那你应该写成:pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,InWnd );
你放在CVCapCtrlCtrl类里面来处理菜单消息,那你就应该写成:pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this );
如果写成pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,AfxGetMainWnd()); 处理函数应该写在什么地方我也不太清楚,是不是应该写在CVCapCtrlApp类里面啊? 反正不能是InWnd或CVCapCtrlCtrl类里面。这个问题其实在MFC其他应用程序里面也会出现,如果在CMainFrame里面处理菜单消息,你传View类指针,那菜单就是灰色的。