MFC 菜单栏杂记
1.关于为毛要使用detach()函数
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
menu.Detach(); //如果不加这句,等着崩溃吧
detach就是把windows资源和C++对象分离开来,如果你不detach,由于menu对象是局部对象,退出函数后menu就自我销毁了。他的 析构函数会强迫销毁那个菜单系统资源,相当于调用诸如DeleteMenu(hMenu)之类的函数(注意区分C++对象和系统菜单对象),detach之后,c++对象还是会析构,但是系统资源则不会被销毁!
2.获取菜单ID
BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
ON_COMMAND(ID_32772,OnOpen)
END_MESSAGE_MAP() void CMainWindow::OnOpen(){
UINT nID=(UINT)LOWORD(GetCurrentMessage()->wParam);
CString s;
s.Format(_T("%d"),nID);
::AfxMessageBox(s);
}
3.一组连续命令ID
BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
ON_COMMAND_RANGE(AAA,BBB,OnOpen) //ID范围从AAA到BBB
END_MESSAGE_MAP() void CMainWindow::OnOpen(UINT nID){
CString s;
s.Format(_T("%d"),nID);
::AfxMessageBox(s);
}
4.右键弹出式菜单
void CMdiView::OnRButtonDown(UINT nFlags, CPoint point)
{
CView::OnRButtonDown(nFlags, point); CMenu* menu_bar = AfxGetMainWnd()->GetMenu();
CMenu* file_menu = menu_bar->GetSubMenu();
ASSERT(file_menu); ClientToScreen(&point);
file_menu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x,
point.y, this);
}
5.OnContextMenu和OnRButtonDown区别
当鼠标压下,鼠标弹起两个消息依次发生,才会发生OnContextMenu消息.
你在OnRButtonDown里用一个Message输出文字,则后面的鼠标弹起消息被MessageBox接受了.故OnContextMenu没有被调用. ------------------------------------------------------------------------------------------------- OnRButtonDown就是鼠标右键消息.
但 "ContextMenu "不一定是鼠标右键触发的. 比如按windows键盘上的属性键,或按shift+F10都是ContextMenu.
所以, 不要使用OnRButtonDown取代OnContextMenu void CMainWindow::OnContextMenu(CWnd* pWnd, CPoint point)
{
CPoint pt=point;
CMenu menu;
CMenu* PopupMenu=NULL;
ScreenToClient(&pt);
//加载菜单
menu.LoadMenu(IDR_MAINFRAME);
PopupMenu=menu.GetSubMenu(1);
PopupMenu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,point.x,point.y,this);
}
MFC 菜单栏杂记的更多相关文章
- MFC中菜单栏使用
1.新建项目: 选择MFC应用程序,应用程序类型选择“基于对话框”: 本文中项目名为:MenuTest 2.新建菜单栏资源: 找到资源视图,右键MenuTest.re选择“添加资源”——选择Menu, ...
- Visual studio C++ MFC之点击按钮(菜单栏)生成新窗口
背景 当前做的APP有菜单栏,菜单栏有一项需要对下位机相关参数进行设置,则必须弹出一个窗口来实现设置操作.本篇即对点击菜单栏生成新的窗口,在新的窗口内完成相应计划后结束新窗口并返回原窗口的方法进行简述 ...
- 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)
原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...
- MFC 学习 之 菜单栏的添加
运行环境:vc++ 6.0 win81.通过资源 添加一组 菜单栏 如下: 2.在OnInitDialog()中添加如下代码: // Add "About..." men ...
- MFC中在基于对话框的窗体中使用CFileDialog导致菜单栏变灰的解决方案
CSDN的博客编辑器实在是难用……转战博客园 直接把CSDN发的搬过来了 ————————————————————————————我是分割线———————————————————————————— 第 ...
- MFC的本质
一.引言 上一专题中,纯手动地完成了一个Windows应用程序,然而,在实际开发中,我们大多数都是使用已有的类库来开发Windows应用程序.MFC(Microsoft Foundation Clas ...
- MFC 工具栏隐藏与显示
最近在学MFC,看的是孙鑫的VC++视频,感觉还不错.在看到第九节课的时候,讲到工具栏的时候,做了个小功能:工具栏的隐藏和显示,但是有个bug就是一个悬浮的工具栏隐藏后再显示,就会变成停靠状态.这里我 ...
- MFC下OpenGL入门(可以用)
MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...
- VS2008基于对话框的MFC上位机串口通信(C++实现)简单例程
首先,在 vs2008 环境下创建 MFC 运用程序 设置项目名称为 ComTest(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...
随机推荐
- HyperV创建NAT网络
创建NAT内部网络,使用PowerShell完成. https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/user-gu ...
- react bootstrap-loader
1.install npm install bootstrap-loader jquery resolve-url-loader 2.webpack.config.js entry: ['bootst ...
- Android的布局方式
1.LinearLayout(线性布局) android:orientation="vertical" //布局 android:layout_width="wrap_c ...
- pip国内镜像(清华大学镜像)
网上搜到的pip国内镜像大部分是豆瓣的 http://pypi.douban.com/simple/ 但是根本不全,很多包没有 所以推荐清华大学的 https://pypi.tuna.tsinghua ...
- Java Thread类的yield()和join()的区别和用法
yield: 解释它之前,先简述下,多线程的执行流程:多个线程并发请求执行时,由cpu决定优先执行哪一个,即使通过thread.setPriority(),设置了 线程的优先级,也不一定就是每次都先执 ...
- 程序员们,AI来了,机会来了,危机也来了
程序员们,AI来了,机会来了,危机也来了 1.人工智能真的来了 纵观古今,很少有计算机技术能有较长的发展寿命,大部分昙花一现,比如:昔日的DOS.windows3.2.foxpro.delphi.80 ...
- Javascript+CSS实现影像卷帘效果
用过Arcgis的筒子们对于Arcmap里面的一个卷帘效果肯定记忆很深刻,想把它搬到自己的WebGIS系统中去,抱着同样的想法,我也对这种比较炫的卷帘效果做了一下研究,吼吼,出来了,给大家汇报一下成果 ...
- [C#] Newtonsoft.Json 版本冲突
在web.config或者app.config里面加上一段: <runtime> <assemblyBinding xmlns="urn:schemas-microsoft ...
- JavaScript test//href
目录 JavaScript test//href JavaScript test//href href 其实这个问题并不属于这里的.但是呢,由于一天晚上因为这个问题扰我"一夜不能眠" ...
- 设置一个严格的SESSION过期时间
认识一:当我们需要更改session生存时间的时候通行的做法是更改php.ini文件中 1: ; Name of the session (used as cookie name). 2: sessi ...