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

来源:网络时间:2011-08-04 15:03:12
  安装了Visual Studio 2008并试用了一下VC++,尽管好多东西还不懂,但已经对VC++没有那么抗拒了,相反感觉特别亲切。

VC++下修改<aFlash的右键菜单为自定义菜单 src="http://img4.runjiapp.com/duoteimg/zixunImg/local/2011/06/29/13093287645522.jpg" border=0>

  以前用 Delphi 写过一个 Flash 播放器,现在想测试性地用VC++也来写一简单的 Flash 播放器,还真有那么一点点感觉。研究了一个下午,对MFC的几个常用类弄得有点明白,于是就开始写代码了。但很快遇到问题:如果屏蔽 Flash 的右键菜单,甚至修改为自己的弹出菜单??这个问题在 Delphi 里很容易解决,但在VC++里,着实让我头痛了不久。网上搜了很久都没有看懂别人在讲什么,后来还要自己弄出来了。感觉还不错。主要原理也就是重载 BOOL CFlashPlayerApp::PreTranslateMessage(MSG* pMsg) 函数。

  步骤一:右键单击 CxxApp 类,添加虚函数

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

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

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

  步骤三:写代码:

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

  (步骤四:处理全局变量)

  由于用到 Flash 变量的句柄 h_SWFHandle 需要在 CFlashPlayerDlg的 OnInitDialog()过程中获得值,需要把定义成全局变量,以便在 PreTranslateMessage 消息处理过程能用到它的值。

把成员变量定义为全局变量的方法参考:

  1.对于全局变量存在和函数一样的问题,为了在其他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 头文件中 添加全局变量:

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

  2,在 .cpp 文件中初始化。

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

  3. 在 OnInitDialog() 中赋值。OK

  =================== 补充=========================

  感谢网友hongh2009的提示,可以用更直接更简单的办法实现这个功能,引用评论里的代码:

  直接在对话框类上添加虚函数处理消息就可以了,

  代码如下:

  BOOL CY766u7Dlg::PreTranslateMessage(MSG* pMsg)

  {

  // TODO: Add your specialized code here and/or call the base class

  if ((pMsg->message == WM_RBUTTONDOWN) && (pMsg->hwnd == GetDlgItem(IDC_SHOCKWAVEFLASH1)->GetSafeHwnd()))

  {

  CMenu menu;

  menu.LoadMenu(IDR_MENU1);

  CMenu *psubMenu = menu.GetSubMenu(0);

  CPoint pt = pMsg->pt;

  psubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON ,pt.x,pt.y, AfxGetApp()->GetMainWnd());

  return TRUE;

  }

  return CDialog::PreTranslateMessage(pMsg);

  }

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站) 联系邮箱:rjfawu@163.com