MFC之菜单
1菜单与菜单项的操作
//获取菜单指针----CWnd::GetMenu()
//GetSubMenu()获取子菜单
/CheckMenuItem()加入/取消标记
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MFS_CHECKED);
//创建缺省菜单SetDefaultItem()一个子菜单仅仅能有一个
//GetMenu()->GetSubMenu(0)->SetDefaultItem(1,1);
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN);
//图形菜单的创建SetMenuItemBitmaps()
m_Bitmap.LoadBitmapW(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_Bitmap,&m_Bitmap);
//使某项不能使用EnableMenuItem()
//NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);
//将整个菜单取消SetMenu()能够载入自己的菜单,若将Cmenu为局部变量则在setmenu后调用detach()
//SetMenu(NULL);
2MFC菜单项的更新
(1)为菜单某一项加入ON_UPDATE_COMMAND_UI消息并加入处理程式(在CMainframe类中)
(2)在处理程式中决定某一菜单项是否可用是否标记等(若涉及到工具栏中的菜单项则为保持与菜单项中的同步最好採用ID标记而不是位置)
(3)实例:void CMainFrame::OnUpdateEditCut(CCmdUI *pCmdUI)
{
// TODO: 在此加入命令更新用户界面处理程序代码
pCmdUI->Enable();
}
3右击弹出菜单的使用
加入方法例如以下:
1、在资源视图中加入所需的右键菜单
2、选择对应的类,单文档时选中View类在属性中加入WM_CONTEXTMENU消息
3、在OnContextMenu加入例如以下代码
void CMenuView::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/Point)
{
// TODO: 在此处加入消息处理程序代码
if(Point.x==-1&&Point.y==-1)
{
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
Point=rect.TopLeft();
Point.Offset(5,5);
}
CMenu menu;
menu.LoadMenuW(IDR_MENU1);
CMenu* pPopup=menu.GetSubMenu(0);
ASSERT(pPopup!=NULL);
CWnd* PwndPopupOwner=this;
while (PwndPopupOwner->GetStyle()&WS_CHILD)
{
PwndPopupOwner=PwndPopupOwner->GetParent();
}
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,Point.x,Point.y,PwndPopupOwner);
}
4动态加入菜单
在CMainframe::OnCreate()函数中
(1)CMenu::AppendMenu()将一个菜单项加入到现有菜单项末尾
(2)创建popup菜单CMmenu::CreatePopMenu();
(3)插入PopUpMenu菜单CMenu::InsertMenu()
(4)删除菜单CMenu::DeleteMenu()
(5)代码演示样例:
(6)对加入的菜单进行命令响应
手动加入消息响应函数和消息映射
(7)其它操作
void CMenuView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此加入消息处理程序代码和/或调用默认值
static int indexm=313;
CClientDC dc(this);//获取客户区画布
if(0x0d==nChar)
{
if(0==index++)
{
m_Menu.CreatePopupMenu();
GetParent()->GetMenu()->AppendMenuW(MF_POPUP,(UINT)m_Menu.m_hMenu,_T("phonenote"));
//重绘菜单条CWnd::DrawMenuBar()
GetParent()->DrawMenuBar();//重绘菜单
}
m_Menu.AppendMenuW(MF_STRING,indexm++,m_PStr.Left(m_PStr.Find(' ')));
m_PStr.Empty();
Invalidate();//重绘画布
}
else
{
m_PStr+=(char)nChar;
dc.TextOutW(0,0,m_PStr);
}
CView::OnChar(nChar, nRepCnt, nFlags);
}
MFC之菜单的更多相关文章
- MFC中菜单变灰的问题
MFC中菜单变灰 方法1:有UpdateCmdUI句柄时 定义一个BOOL变量m_b来标志菜单项是否有效, 该菜单项响应UPDATE_COMMAND_UI消息,在消息处理函数中pCmdUI->E ...
- 如何给MFC的菜单项添加快捷键
我们一起分享,如何给MFC的菜单项添加快捷键.[程序在VC6.0编译环境下编译通过.(VS2010的编译环境大同小异)] 1.程序演示环境 1.1新建一个[对话框(Dialog)]的程序.然后,New ...
- VS MFC 添加菜单
新建出来的基于对话框的MFC工程是没有菜单的,如何在对话框中添加菜单?又如何给菜单的菜单项添加事件应用响应?下面小编来具体描述一下,希望能帮助到一些人. 工具/原料 电脑一台 VS2010 方法/ ...
- MFC中菜单的命令响应顺序
响应只可以由Doc,View,MainFrame以及APP四个类完成. 响应顺序是: 点击某菜单项,框架类最先接到菜单命令消息. 框架类把接收到得这个消息交给它的子窗口,即视图类. 视图类根据命令消息 ...
- mfc标题栏 菜单 退出 关机 重启
隐藏标题栏 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStru ...
- MFC添加菜单资源与菜单执行函数的两种命令形式
添加资源->新建一个菜单资源->选择相应的对话框 菜单的执行函数命令形式: COMMAD 是指点击菜单后的执行命令 UPDATE_COMMAND_UI 是指点击菜单后菜单状态的函数
- 关于MFC主菜单和右键弹出菜单
一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...
- MFC添加菜单事件
双击draw.rc,就能看到.
- 图文详解MFC程序设置菜单快捷键
原来觉得添加个快捷键就只要几分钟,上网搜索文章都写得很模糊, 只有这边文章不错. http://www.cplusplus.me/1263.html http://blog.sina.com.cn/s ...
随机推荐
- py-faster-rcnn代码阅读1-train_net.py & train.py
# train_net.py#!/usr/bin/env python # -------------------------------------------------------- # Fas ...
- weblogica
- 云计算--hdfs dfs 命令
在hadoop安装目录下:/hadoop2/hadoop-2.7.3 1.创建目录 bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/<us ...
- 如何计算 App 的启动时间
应用启动场景 事实上 Android 中一个 App 的启动时间可以准确计算的.但是要分场景.也就是说要分开游戏和应用. 大家都知道,在Android中,游戏开发和应用开发是两码事.所以我们需要分开来 ...
- 003_vim使用tip
vim 使用tip 编写python程序 自动插入头信息: #!/usr/bin/env python # coding=utf-8 输入.或按TAB键会触发代码补全功能 :w保存代码之后会自动检查代 ...
- 解决urbuntu桌面本客户端输入ll command not found
用桌面版的urbuntu系统,打开客户端输入ll,报错如下 于是度娘,解决方案:可以作如下修改:打开 ~/.bashrc 找到 #alias ll=’ls -l’,去掉前面的#就可以了.(关闭原来的终 ...
- Java中类与类的关系
在java中类和类的关系大致分三种:泛化.关联.依赖. 1. 泛化(Generalization) "XX是一个XX"关系(is a),通常使用的关键词为 extends.impl ...
- NTP服务放大攻击的解决办法
什么是NTP服务? 网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议.NTP服务器通过NTP服务向网络上的计算机或其他设备提供标准的授时服务,以保 ...
- FileOutputSteam入门
FileOutputSteam 字节输入流 从控制台将字节保存到本地硬盘 package com.isoftstone.io; import java.io.FileOutputStream; imp ...
- Kosaraju算法学习
Kosaraju 算法学习 序 这星期捣鼓了一个新的算法--Kosaraju算法 今天分享给大家 简介 Kosaraju算法,其实与tarjan算法差不多.但是码量较小,容易记忆.其时间复杂度与tar ...