我要发帖 回复

中级会员

34

主题

461

积分

0

专家分

:

私信
发表时间 : 2009-2-22 21:47:09 | 浏览 : 1211    评论 : 1
实现vp窗口右键功能的原理有人已经提过了,使用vp的右键响应,在响应函数中发送一个mfc的右键消息,然后响应MFC的右键消息,进行相应的消息处理。
现在提供详细的步骤和关键代码。
1,使用vp的右键响应。vp中的鼠标消息通过注册myVrWinMsgHandler函数实现,MESSAGE_MOUSE_RIGHT_DOWN为右键消息。
2,在右键的响应里发送MFC的右键消息,::SendMessage(vrWin->getParent(),WM_RBUTTONDOWN,0,MAKELONG(param1,param2));其中vrwin,param1,param2为1步骤中函数的参数,param1为x坐标值,param2为y坐标值。
3,添加MFC的右键消息响应函数OnRButtonDown,在此函数体中加入pop菜单功能。代码如下
          CRect winRect;
          GetWindowRect(winRect);
          CMenu menu;
          menu.LoadMenu(IDR_CONTENTMENU);
          CMenu *pContextMenu = menu.GetSubMenu(0);
          pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|
                TPM_LEFTBUTTON|TPM_RIGHTBUTTON, point.x, (winRect.bottom-point.y),//要进行必要的坐标转换
                this);

          CVpView::OnLButtonDown(nFlags, point);
其中,由于vp和MFC对于窗口大小的坐标原点不一样,要进行必要的坐标转化,原理是获得窗口大小,用窗口的y坐标最大值减去vp窗口中得到的y值,就是MFC中菜单弹出位置的y值
完毕

最近VR访客

西安航远 评论于2009-2-23 11:21:24
赞赏一下

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2022-1-19 12:15 PM

返回顶部