◆→请问:DxShow在全屏播放方式下,如何正确弹出上下文菜单?

jimconrad 2001-10-23 01:57:22
我的程序在全屏播放模式下,鼠标不见了,点击右键时显示鼠标并弹出了上下文菜单。但是上下文菜单的左上角的坐标不在鼠标处,而且有点距离。请问如何在全屏播放时显示鼠标,并在鼠标位置弹出上下文菜单?谢谢!
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxqcdit 2001-10-27
  • 打赏
  • 举报
回复
up
capboy 2001-10-26
  • 打赏
  • 举报
回复
对啊.如果自己写的话,你可以使用GetCursorPos得到鼠标位置,然后用TrackpopupMenu来弹出菜单了.他要的参数就是鼠标的位置了.
capboy 2001-10-26
  • 打赏
  • 举报
回复
就是啊.你自己做的话,可以用GetcursorPos得到鼠标位置.在TrackPopupmenu.就可以定位了.
jimconrad 2001-10-26
  • 打赏
  • 举报
回复
通过观察,我发现全屏时鼠标指针和菜单间距离的一个规律,于是写了下面代码,基本解决问题,不知道还有没有好办法。
void CMyView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
menu.LoadMenu(IDR_FLOATMENU);
if(IsFullScreen()) {
RECT rc;
this->GetWindowRect(&rc);
point.x -= rc.left;
point.y -= rc.top;
}

menu.GetSubMenu(0)
->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this);
}
ares_ding 2001-10-26
  • 打赏
  • 举报
回复
我是把所有的消息都传递给父窗口,父窗口的
OnContextMenu如下:
void CPlayerDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
// get VideoWindow Info
long VWTop=0;
long VWWidth=0;
long VWLeft=0;
long VWHeight=0;

HRESULT hr=pVW->GetWindowPosition(&VWLeft,&VWTop,&VWWidth,&VWHeight);


//if(!((point.x>=VWLeft&&point.x<=VWLeft+VWWidth)
// &&(point.y>=VWTop&&point.y<=VWTop+VWHeight)))
// {
printf("point.x=%d,point.y=%d",point.x,point.y);
CMenu menu;
if(menu.LoadMenu(IDR_RIGHTCLICK))
{
CMenu& pPopup=*menu.GetSubMenu(0);
if((MousePoint.x+VWLeft>=VWLeft&&MousePoint.x+VWLeft<=VWLeft+VWWidth)
&&(MousePoint.y+VWTop>=VWTop&&MousePoint.y+VWTop<=VWTop+VWHeight))
{
pPopup.TrackPopupMenu(TPM_RIGHTBUTTON,MousePoint.x+VWLeft,MousePoint.y+VWTop,AfxGetMainWnd());
}else
pPopup.TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,AfxGetMainWnd());


}

}
jimconrad 2001-10-26
  • 打赏
  • 举报
回复
而且用以下代码检测时,没有弹出“cursor display!”的消息框,显示鼠标的操作有误。
long hidecursor = OAFALSE;
if(S_OK == pVideoWindow->HideCursor(OAFALSE)
&& S_OK == pVideoWindow->IsCursorHidden(&hidecursor)
&& OAFALSE == hidecursor)
::AfxMessageBox("cursor display!");
jimconrad 2001-10-26
  • 打赏
  • 举报
回复
to ares_ding:
我测试结果:全屏时,WM_GRAPHNOTIFY消息中不包含鼠标右键点击消息,即点击右键没有WM_GRAPHNOTIFY消息发生。

to nitty:
我响应的是wm_contextmenu,但是问题是鼠标位置和上下文菜单距离太远,在屏幕左上角点右键,菜单却出现在屏幕右下角...

to capboy:
1。全屏时我的鼠标就不见了,如何显示出来?
2。
设置全屏的代码为:
pVideoWindow->put_FullScreenMode(OATRUE);

弹出上下文菜单的代码如下(CMyView对象作为视频输出窗口):
void CMyView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
menu.LoadMenu(IDR_FLOATMENU);
menu.GetSubMenu(0) ->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this);
}
症状如下:点击右键后,鼠标出现,菜单也出现,但鼠标菜单不在一处;点击菜单,菜单消失,鼠标也消失。
jimconrad 2001-10-25
  • 打赏
  • 举报
回复
我的菜单早就弹出来了,我的问题是:响应WM_CONTEXTMENU消息弹出的菜单和鼠标位置不一致,这该怎么解决?
Nitty 2001-10-24
  • 打赏
  • 举报
回复
我记得,UM,我好似用WM_CONTEXTMENU即可,SORRY,好久没作了。呵呵
capboy 2001-10-24
  • 打赏
  • 举报
回复
你还是自己右键消息处理吧.自己定义菜单,自己显示.具体的函数忘了,好象是POPMEMU什么的.我记得看过的.而且也成功测试过了,很久的事了,我连代码到不知道删除到哪去了.:)
ares_ding 2001-10-23
  • 打赏
  • 举报
回复
我是再播放窗口外套了一个父窗口,然后调用
IVideoWindow::put_MessageDrain()来将所有事件
包括鼠标事件传递给父窗口。就可以了。

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧