社区
游戏开发
帖子详情
◆→请问:DxShow在全屏播放方式下,如何正确弹出上下文菜单?
jimconrad
2001-10-23 01:57:22
我的程序在全屏播放模式下,鼠标不见了,点击右键时显示鼠标并弹出了上下文菜单。但是上下文菜单的左上角的坐标不在鼠标处,而且有点距离。请问如何在全屏播放时显示鼠标,并在鼠标位置弹出上下文菜单?谢谢!
...全文
108
11
打赏
收藏
◆→请问:DxShow在全屏播放方式下,如何正确弹出上下文菜单?
我的程序在全屏播放模式下,鼠标不见了,点击右键时显示鼠标并弹出了上下文菜单。但是上下文菜单的左上角的坐标不在鼠标处,而且有点距离。请问如何在全屏播放时显示鼠标,并在鼠标位置弹出上下文菜单?谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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()来将所有事件
包括鼠标事件传递给父窗口。就可以了。
DXSHOW
中的filter例子源码:ball
dxshow
中的filter例子源码,用C++编写,可以自己修改,是学习
dxshow
的filter的标准源码。
DxShow
Parsers filter
DxShow
Parser filter tutorial
dxshow
推源滤波器的例子.zip
dxshow
推源滤波器的例子.zip
dxshow
调用摄像头
C++ directshow 调用摄像头操作源码
使用DirectShow采集桌面、语音并实时进行H264和AAC编码,然后将其封装成MP4,希望对大家有用
使用DirectShow采集桌面、语音并实时进行H264和AAC编码,然后将其封装成MP4,希望对大家有用
游戏开发
8,305
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章