孙鑫Lesson6 menu

桌面右键弹出二级菜单 桌面右键弹出你添加的二级菜单。COM技术,ATL。 这几天一直在做壁纸。翻了一些资料,终于做出来了。 几个函数: SHGetSpecialFolderPath用于获取特殊文件夹路径 SHGetPathFromIDList从id list获取路径   1.新建ATL工程,选支持MFC(因为要使用CString)和合并存根两个选项(因为不需要远程COM)。   2.右键工程,选添加 阅读详情
消息分三类:
1)标准消息(WM_开头的,除WM_COMMAND,CWND派生的类都可以接收到标准消息);
2)命令消息(来自菜单、工具栏、加速键的消息,都以WM_COMMAND呈现,在MFC中以ID号来标识不同的的命令消息。在SDK中通过消息的wParam参数识别,从CCmdTarget派生的类可以接收到此类消息)

3)通告消息(由控件产生的消息,例如按钮的单击,列表框的选择等均产生此类消息,为的是向父窗口(通常是对话框)通知事件的发生。这类消息也是WM_COMMAND形式呈现。从CCmdTarget派生的类可以接收到此类消息)


代码段:

在mainfrm 中对已有的主框架菜单做一些处理:

GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);   //获取主菜单,并在主菜单的第一个子菜单的第一项修改选中状态
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED); //同上,只是一个是ID,一个是数字位置,功能相同
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);  //设置默认菜单,也是可以从ID与数字位置两项中选择,然后第二个参数默认是false,此时只能用ID
GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN);
GetMenu()->GetSubMenu(0)->SetDefaultItem(5,TRUE);

//确认一下菜单项的长度与宽度,好确认菜单项前的图标大小
CString str;
str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),
GetSystemMetrics(SM_CYMENUCHECK));
MessageBox(str);

//加载图片,并把图片加载到某一菜单项前
m_bitmap.LoadBitmapA(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);

//使菜单不可用置灰
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED |MF_GRAYED);


//使菜单先置空,然后再加载一个已有菜单,并把它附加到菜单对象中,最后分离菜单
SetMenu(NULL);
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);

menu.Detach();


在mainfrm.cpp的oncreate中添加如下代码:

//创建下拉菜单,并把此菜单添加到主菜单中,添加一般是在主菜单的最后添加;插入要指定位置

CMenu menu;
menu.CreatePopupMenu();
GetMenu()->AppendMenuW(MF_POPUP,(UINT)menu.m_hMenu,(LPCTSTR)_T("winsun"));
GetMenu()->InsertMenuW(2,MF_BYPOSITION | MF_POPUP,(UINT)menu.m_hMenu,(LPCTSTR)"winsun");


//添加下拉菜单各项菜单名称
menu.AppendMenuW(MF_STRING,IDM_HELLO,(LPCTSTR)_T("hello"));
menu.AppendMenuW(MF_STRING,112,(LPCTSTR)_T("RLJ"));
menu.AppendMenuW(MF_STRING,113,(LPCTSTR)_T("exit"));

//也可以在已有菜单的下位菜单中添加、插入或者删除菜单项
GetMenu()->GetSubMenu(0)->AppendMenuW(MF_STRING,114,(LPCTSTR)"welcome");
GetMenu()->GetSubMenu(0)->InsertMenuItemW(ID_FILE_OPEN,22222,FALSE);
GetMenu()->DeleteMenu(1,MF_BYPOSITION);
GetMenu()->GetSubMenu(0)->DeleteMenu(1,MF_BYPOSITION);
menu.Detach();    //因为定义的Cmenu句柄变量出了作用域,它所关联的hmenu资源会被销毁,所以需要分离



在视图中创建动态的菜单,手动输入菜单的名称与ID,并在点击时显示

void CMENU2View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
if(0x0d==nChar)
{
if(1==++m_nIndex)
{
m_menu.CreatePopupMenu();
GetParent()->GetMenu()->AppendMenuW(MF_POPUP,(UINT)m_menu.m_hMenu,LPCTSTR(_T("PHONEBOOK")));
GetParent()->DrawMenuBar();
}
m_menu.AppendMenuW(MF_STRING,IDM_PHONE1+m_nIndex-1,m_StrLine.Left(m_StrLine.Find(' ')));
m_strArray.Add(m_StrLine);
m_StrLine.Empty();
Invalidate();
}
else
{
m_StrLine+=TCHAR(nChar);
dc.TextOutW(0,0,m_StrLine);
}
CView::OnChar(nChar, nRepCnt, nFlags);
}



//在视图中点击各菜单项时反应与显示输出
void CMENU2View::OnPhone1()
{
// TODO: 在此添加命令处理程序代码
    CClientDC dc(this);
dc.TextOutW(0,0,m_strArray.GetAt(0));

}


void CMENU2View::OnPhone2()
{
// TODO: 在此添加命令处理程序代码
CClientDC dc(this);
dc.TextOutW(0,0,m_strArray.GetAt(1));

}


void CMENU2View::OnPhone3()
{
// TODO: 在此添加命令处理程序代码
CClientDC dc(this);
dc.TextOutW(0,0,m_strArray.GetAt(2));

}




void CMENU2View::OnPhone4()
{
// TODO: 在此添加命令处理程序代码
CClientDC dc(this);
dc.TextOutW(0,0,m_strArray.GetAt(3));
}



孙鑫VC++深入详解:Lesson6 Part4 ---CMenu 类的应用:添加子菜单项AppendMenu,插入子菜单项InsertMenu,删除菜单DeleteMenu CMenu 类的应用 添加子菜单项AppendMenu,插入子菜单项InsertMenu,删除菜单DeleteMenu // //------ 追加菜单,在已菜单后面追加一个子菜单 用函数CMenu::AppendMenu  CMenu::AppendMenu  BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lps 阅读详情

相关推荐

OMI数据获取与可视化:从下载到大气污染分析

本文详细介绍了如何获取与处理OMI卫星数据,以进行大气污染分析。内容涵盖从NASA GES DISC官方源下载对流层NO2数据、使用MATLAB或Python进行月均数据处理与网格化,到利用m_map或cartopy工具进行专业可视化的完整流程。重点解析了数据下载技巧、NetCDF格式处理、地图投影与填色方法,并探讨了时间序列分析与动态可视化等深度应用,为环境研究者提供了一套从数据到洞察的实用指南。

weixin_29210759的博客 269

实例解析自定义IE右键上下文菜单

 实例解析自定义IE右键上下文菜单           简介         如果你经常访问某个论坛,会发现有很多问题都是重复提问的,而且之前也有过详细的解答;或许也会发觉,有时很难搜索到特定的某个帖子;又或者用论坛的搜索引擎搜索出来后难以甄别哪个才是你想要的主题,难道就没有个地方可以存放这些有用的帖子呢?为什么不把这些链接就放在论坛的回复窗口中呢?就像下图:   

谢启东的专栏 2470

LLM之RAG实战(五十四)| 复杂文档处理RAG框架:Ragflow

RAGFlow 是一种结合了检索增强(Retrieval-Augmented Generation,RAG)与流程控制(Flow)的人工智能技术架构。它通过检索外部知识库中的信息,结合自然语言生成技术,为用户提供更准确、更丰富的回答。同时,它还引入了流程控制机制,能够根据任务需求动态调整信息检索和生成的流程,从而更好地完成复杂的任务。RAGFlow 的核心优势在于将检索和生成相结合,打破了传统生成模型仅依赖内部参数进行文本生成的局限。

wshzd的博客 1066

MFC学习笔记(4)

菜单响应顺序 : view类 文档类 框架类 应用程序类消息分类标准消息      除WM_COMMAND之外,所有以WM_开头的消息。      从CWnd派生的类,都可以接收到这类消息。命令消息      来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。 从CCmdT

许落 941

OpenCV函数用法之calibrateCamera

参考链接:opencv中标定函数calibrateCamera_ychl87的专栏-优快云博客 世界坐标系的三维点投影到成像坐标系中的二维点的投影公式如下: 其中(X,Y,Z)为世界坐标系中的三维点; (u,v)为成像面坐标系中的二维点; A为相机的内参数矩阵:(cx,cy)为主光轴点,一般为图像的中心;fx和fy为焦距; [R|t]为相机的外参数矩阵:R为旋转矩阵,t为位移矩阵; 上述公式的简单推理过程如下 考虑到镜头畸变 其中,k1,k2,k3,k4,k5和k6为径向畸变,p1和.

tiger&sheep的博客 3万+

Windows下MMdetection3D保姆级安装指南(含CUDA和PyTorch版本避坑)

本文提供Windows平台下MMdetection3D的完整安装指南,重点解决CUDA与PyTorch版本匹配问题。从环境准备到关键组件安装,详细介绍了CUDA Toolkit选择策略、PyTorch精准安装步骤,以及MM系列组件的安装顺序和常见错误解决方案,帮助用户顺利完成3D目标检测环境的配置。

weixin_42628941的博客 490

动态添加菜单项、子菜单、右键菜单

动态添加菜单项、子菜单、右键菜单   如何动态添加菜单/菜单项、子菜单、右键菜单  有关菜单的操作主要用到CMenu类,当然也可用相应API函数,CMenu类只是MFC对API中操作菜单的函数的封装而已。 不过能用类就尽量用类,类的组织方式好呗,代码看着也舒服。 若是SDK编程,那就用API吧 。        CMenu menuMain,menu1; //首先 定义CMenu对象

wjeson的专栏 1056

【Claude】媒体文件处理错误:PDF 与 Image 过大的检测与预处理方法 bug报错已解决

图片压缩是必须的:原始图片的 base64 会占用大量 TokenPDF 提取文本优于传图片:文本版 PDF 比扫描版更省 Token分块处理大文件:不要一次性处理整个大文件控制分辨率:800x800 通常足够 Claude 分析。

博客 6359

mfc menu用法一

#define IDM_NEW 0x1002#define IDM_EXIT 0x1003#define IDM_HELP 0x1004#define IDM_ABOUT 0x1005hMenu = CreateMenu();hFileMenu = CreateMenu();hHelpMenu = CreateMenu();AppendMenu(hFileMenu, MF_STRING, IDM_...

weixin_34006468的博客 277

基于相场法模拟金属铜的晶粒的长大过程附matlab完整代码

晶粒生长是一种重要的材料形态演化过程,对于材料的性能和制备有着非常重要的影响。相场法是一种将材料结构和热力学性质联系起来的方法,它能够有效地模拟晶粒的长大过程并预测材料的结构和性能。本文所采用的相场模型是基于Cahn-Hilliard方程和Allen-Cahn方程的二次相场模型。其中,Cahn-Hilliard方程描述了晶界的自由能密度,而Allen-Cahn方程则描述了晶粒的彼此之间的界面能密度。本篇文章将介绍如何使用相场法模拟金属铜的晶粒的长大过程,并提供完整的MATLAB代码供读者参考。

m0_47037246的博客 1382

手把手教你学Simulink--基于车联网与智能交通系统的场景实例:基于车联网(V2X)的实时路况信息共享与处理

《基于Simulink的车联网(V2X)实时路况共享系统仿真》摘要:本文详细介绍使用Simulink构建V2X智能交通系统的完整方法。系统包含交通路网建模、V2X通信实现(支持DSRC/C-V2X标准)、多源路况信息融合、动态路径规划等核心模块。通过对比实验,验证V2X可使平均车速提升52%,行程时间缩短34%,显著提升交通效率。文章还探讨了AI预测调度、车辆编队等高级应用,为智慧交通系统开发提供实用参考。所需工具包括Simulink、SimEvents及无线通信工具箱等。

MHD0815的博客 737

VS2008, MFC 动态添加菜单项

1. 在CMainFrame类的OnCreate函数的最后的TODO::后面添加代码,如下:见代码注释: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

DZWH的博客 493

RT-DETR改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

本文记录的是基于MobileNet V4的RT-DETR目标检测轻量化改进方法研究。通过整合UIBMobile MQA以及优化的NAS策略能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中和五种模型,以满足不同的需求。

Limiiiing的博客 1922

运行时错误“BOOL CMenu::InsertMen…

GetMenu()->InsertMenu(2,MF_BYPOSITION|MF_POPUP,(UINT)menu.m_hMenu,"open"); 运行时错误“BOOL CMenu::InsertMenuW(UINT,UINT,UINT_PTR,LPCTSTR)”: 不能将参数 4 从“const char [5]”转换为“LPCTSTR”  解决方案: 写成  C/C++ c

rxm1989的专栏 386

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

insertmenul

      函数功能:该函数插入一个新菜单项到菜单里,并使菜单里其他项下移。    函数原型:BOOL InsertMenu(HMENU hMenu,UINt uPosition,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);    参数:    hMenu:将被修改的菜单的句柄。    uPosition:指定新菜单项将被插入其前面的菜单项,其含义

482

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

小结一下win32 menu的使用:

// 首先需要定义菜单的ID #define IDM_FILE_NEW 40001 #define IDM_FILE_OPEN 40002 #define IDM_EDIT_COPY 40003 #define IDM_EDIT_CUT 40004 HMENU hMenu; HMENU hMenuPop; // Menu Append hMenu

孤独的糖三角 4695

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

insertmenulteml

      函数功能:该函数在菜单的指定位置插入一个新菜单项。    函数原型:BOOL WINAPI InsertMenutem(HMENU hMenu,UINT ultem,BOOL fByPosition,LPMENUITEMINFO lpmii );    参数:    hMenu:新菜单项将被插入其中的菜单的句柄。    ultem:在其前面插入新菜单项的菜单项的标识符或位置。此参数的含

327

动态菜单

1.动态的添加/插入/删除菜单(弹出菜单,菜单项): 在CMainFrame::OnCreate中:      CMenu menu;//局部变量      menu.CreatePopupMenu(); //创建一个空的弹出菜单      //GetMenu得到菜单栏的指针,AppendMenu添加一个弹出菜单      //AppendMenu添加弹出菜单如何调用:

ying909175415的专栏 823

孙鑫01

1.消息和事件 用户在操作系统中任何一个操作都是事件。比如鼠标单击了一个按钮就是一个鼠标事件。消息是操作系统将事件传递给用户程序的数据格式,是一种数据通讯协议。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序。 MSG结构定义如下: typedef struct tagMSG { HWND hwnd; //句柄 UINT message;//消息 WPARA...

l93919861的博客 247

孙鑫 笔记

1菜单栏使用 笔记

xiongqian_的博客 390
上一篇: 孙鑫Lesson5 text
下一篇: 孙鑫Lesson7 Dialog
clstudy13
博客等级 码龄10年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值