



时间:2011-08-04 关注公众号 来源:网络
安装了Visual Studio 2008并试用了一下VC++,尽管好多东西还不懂,但已经对VC++没有那么抗拒了,相反感觉特别亲切。
Flash的右键菜单为自定义菜单 src="https://img3.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 类,添加虚函数
步骤二:在 "New Virutal Functions"列表里选择 PreTranslateMessage ,然后 Add Handle 添加到右边重载函数列表里。
步骤三:写代码:
(步骤四:处理全局变量)
由于用到 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 头文件中 添加全局变量:
2,在 .cpp 文件中初始化。
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);
}
文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站)
电话:13918309914
QQ:1967830372
邮箱:rjfawu@163.com