职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 347|回复: 0

VC++下修改Flash的右键菜单为自定义菜单

[复制链接]
月上萧萧 发表于 2011-9-21 15:42 | 显示全部楼层 |阅读模式
  安装了Visual Studio 2008并试用了一下VC++,尽管好多东西还不懂,但已经对VC++没有那么抗拒了,相反感觉特别亲切。^_^ 9dc3cf588df43fd6800a1887.jpg
  以前用 Delphi 写过一个 Flash 播放器,现在想测试性地用VC++也来写一简单的 Flash 播放器,还真有那么一点点感觉。研究了一个下午,对MFC的几个常用类弄得有点明白,于是就开始写代码了。但很快遇到问题:如果屏蔽 Flash 的右键菜单,甚至修改为自己的弹出菜单??这个问题在 Delphi 里很容易解决,但在VC++里,着实让我头痛了不久。网上搜了很久都没有看懂别人在讲什么,后来还要自己弄出来了。感觉还不错。主要原理也就是重载 BOOL CFlashPlayerApp:reTranslateMessage(MSG* pMsg) 函数。 7aad4ae72f8c7c79b9382091.jpg
  步骤一:右键单击 CxxApp 类,添加虚函数 4651a712a99d9099c3fd789d.jpg

  步骤二:在 "New Virutal Functions"列表里选择 PreTranslateMessage ,然后 Add Handle 添加到右边重载函数列表里。 d1e312f43bce98b87609d79f.jpg

  步骤三:写代码: 9f1011b3704011f0d9335a98.jpg

  (步骤四:处理全局变量)
  由于用到 Flash 变量的句柄 h_SWFHandle 需要在 CFlashPlayerDlg的 OnInitDialog()过程中获得值,需要把定义成全局变量,以便在 PreTranslateMessage 消息处理过程能用到它的值。   把成员变量定义为全局变量的方法参考:
  对于全局变量存在和函数一样的问题,为了在其他CPP文件中能够访问这些变量,必须在主文件的H文件中加上extern声明,格式如下:
  extern varibletype var; (声明)
  在主文件的CPP文件中定义
  varibletype var; (定义)
  例子:
  AppWizard建立一个Test工程
  那么在Test.h中声明extern CString cs;
  在Test.app定义CString cs;
  如果要定义整个工程的全局变量,在任何一个CPP文件中进行定义,然后在需要引用这个变量的文件中进行声明。如全局变量很多可以选择使用定义全局变量的。h文件,在需要的地方直接include头文件即可,不需要写那么多extern了。
  ============ 在本机中的实例操作=========
  在 .h 头文件中 添加全局变量: 245e8bca80a2f4d1c8176866.jpg   在 .cpp 文件中初始化。 9252ae7e35ef366f0dd7da6c.jpg

  在 OnInitDialog() 中赋值。OK
  =================== 补充=========================
  感谢网友hongh2009的提示,可以用更直接更简单的办法实现这个功能,引用评论里的代码:
  直接在对话框类上添加虚函数处理消息就可以了,
  代码如下:
  1.   BOOL CY766u7Dlg::PreTranslateMessage(MSG* pMsg)
  2.   {
  3.   // TODO: Add your specialized code here and/or call the base class
  4.   if ((pMsg->message == WM_RBUTTONDOWN) && (pMsg->hwnd == GetDlgItem(IDC_SHOCKWAVEFLASH1)->GetSafeHwnd()))
  5.   {
  6.   CMenu menu;
  7.   menu.LoadMenu(IDR_MENU1);
  8.   CMenu *psubMenu = menu.GetSubMenu(0);
  9.   CPoint pt = pMsg->pt;
  10.   psubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON ,pt.x,pt.y, AfxGetApp()->GetMainWnd());
  11.   return TRUE;
  12.   }
  13.   return CDialog::PreTranslateMessage(pMsg);
  14.   }
复制代码
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-3 04:29 , Processed in 0.122473 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表