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(这个地方随意命名,根据个人习惯),点击确定后,点击下一步 出现如下界面 选择"基于对话框"模式 ...
随机推荐
- 【转】Hibernate 原汁原味的四种抓取策略
最近在研究 Hibernate 的性能优化的时候碰到了"抓取策略", 由于以前没有详细的研究过, 所以到处找资料, 但是无论从一些讲 Hibernate 书籍,还是他人 Blog ...
- Node.js/Python爬取网上漫画
某个周日晚上偶然发现了<火星异种>这部漫画,便在网上在线看了起来.在看的过程中图片加载很慢,而且有时候还不小心点到广告,大大延缓了我看的进度.后来想到能不能把先把漫画全部抓取到本地再去看. ...
- QListWidgetItem的图片大小问题
图片的大小是由listWidget的setIconSize设定的,而不是ListWidgetItem的SetIcon设定的
- ng 双向数据绑定
1.方向1:model->View模型数据绑定到视图 绑定的方式:①双花括号 ②常见的ng指令(ngRepeat ngIf ngShow....) 效果:数据一旦绑定到视图上,随着数据的修改,视 ...
- [分享]Google 全球 IP 地址库[Google Global Cache IPs]
Google 全球 IP 地址库 IP 地址来源:http://www.kookle.co.nr,共计4351个. Bulgaria 93.123.23.1 93.123.23.2 93.123.23 ...
- java 线程基础学习
今天趁空闲时间看了点线程方面的知识 首先看的是volatile关键字,按照我之前书上看到的一点知识,自己的理解是,volatile关键字会阻止编译优化,因为cpu每次读取数据是并不是从高速缓存中读取, ...
- 21天学通C++_Day2
继续学习,今天满课,相对学习内容较少,下面罗列内容: 0.常量 ▪字面常量: ▪使用关键字const声明的常量,const double Pi = 22.0/7; //后面有分号,跟定义变量一样 ▪使 ...
- BZOJ - 3224 Tyvj 1728 普通平衡树 (treap/树状数组)
题目链接 treap及树状数组模板题. treap版: #include<bits/stdc++.h> using namespace std; typedef long long ll; ...
- 实现一个scnprinf
#include <stdio.h> #include <stdarg.h> /* 该函数ret = min(size, 实际写入长度) - 1,即ret永远小于size * ...
- UVA12296 Pieces and Discs
题意 PDF 分析 可以看成直线切割多边形,直接维护. 对每个多边形考虑每条边和每个点即可. 时间复杂度?不过\(n,m \leq 20\)这种数据怎么都过了.据说是\(O(n^3)\)的,而且常数也 ...