CMenu::FromHandle

VS2010 MFC 用默认设置生成的应用程序GetMenu返回空值 最近学习菜单,遇见一个问题 阅读详情

返回指向 CMenu 对象提供Windows句柄菜单。

static CMenu* PASCAL FromHandle(
   HMENU hMenu 
);

这样可以是临时或永久的 CMenu 的指针。

如果一 CMenu 对象尚未附加到Windows菜单对象,临时 CMenu 对象创建并附加。

该临时 CMenu 对象才有效,直到,则下次应用程序具有空闲时间在其事件循环,此时,所有临时对象被删除。

为 CMenu::CreateMenu参见示例。

头文件位置: afxwin.h

1. 如果HWND是主窗口,可以使用API: GetMenu(...) 得到属于主窗口的句柄,原型如下:

HMENU GetMenu(HWND hWnd);

在MFC中原型如下:

CMenu* GetMenu( ) const;


2. 如果HWND就是菜单的窗口,想直接转换成菜单句柄,则需要发消息了:

消息ID: MN_GETHMENU    0x01E5
头文件: #include <Winuser.h>
但是不知道为什么,我的VC9在vista下总是说没有定义MN_GETHMENU,所以只好手工定义一下了:
#ifndef MN_GETHMENU
#define MN_GETHMENU 0x01E5
#endif

然后通过 SendMessage(...) 的返回值取得对应HMENU。

示例:
// 若 hWnd 是菜单的窗口句柄
HMENU hMenu = (HMENU) SendMessage(hWnd, MN_GETHMENU, 0, 0);

 

3、

如果获得这样的一个句柄后得怎么使用,请高手在后面帮我编多几句,随便实现一个简单的功能就行了
HWND hwnd; 
hwnd=(HWND)::GetMenu(m_hWnd); 你没有目的,获取句柄当然不知道怎么用了! 
关于窗口操作的API都需要句柄做为参数,基本上。 
比如上面,你得到菜单的句柄后,就可以增加、删除、修改菜单。那如果用上面的来增加菜单得怎么加我只会获取不会使用这就看你想怎么用了 
比如你得到一个窗口的句柄 
::GetWindowText(hwnd,lpWinTitle,256-1);这样可得到窗口标题 :)谁给个简单的例子来看下我对这个句柄还是很迷惑比如这样子 
::PostMessage(hWnd, WM_CLOSE, NULL, NULL) 

你要发送WM_CLOSE消息关闭一个窗口,这时你就需要知道要关闭窗口的句柄了,因为PostMessage函数的第一个参数就是一个句柄,你先获得句柄,

然后调用上面的函数,就可以将窗口关闭了用句柄和用指针其实区别大.指针只是把句柄封装了一下方便调用,并且更加面向对像而已。如果用句柄调用的

一般是系统api,而指针调用的是类的方法.指api封装了一下.不知大家意下如何对于没有基础的怎么可能解释清楚?要学编程,应该从基础开始,札札实实

看书。 HWND hwnd;
hwnd=(HWND)::GetMenu(m_hWnd); 

可以将这个句柄和一个菜单对象关联,然后就可以通过这个菜单对象对菜单进行操作 
如 
CMenu::Attach 
BOOL Attach( HMENU hMenu ); 

CMenu m_menu1; 
m_menu1.Attach(hwnd); 
................... 
m_menu1.Detach();//将菜单对象和句柄资源分离,因为菜单对象为局部变量 

或者 
CMenu::FromHandle 
static CMenu* PASCAL FromHandle( HMENU hMenu ); 

CMenu *m_pMenu2=CMenu::FromHandle(hwnd);//将句柄和菜单指针关联 
下面可以通过菜单指针操作菜单 
句柄是窗口标识的ID号,有了这个ID号,以后要找他的干活就容易了获取句柄,再FromHandle(),转换为对应的指针,以后


MATLAB实战:四桥臂逆变器3D-SVPWM调制算法仿真全流程(附代码) 本文提供了一份完整的MATLAB/Simulink实战指南,详细解析了四桥臂逆变器的3D-SVPWM调制算法仿真全流程。文章从工程实践出发,手把手指导如何搭建模型,涵盖从abc静止坐标系变换、三维空间矢量区域判定、作用时间计算到PWM信号生成与调试等核心环节,并附有代码示例和常见问题解决方案,旨在帮助工程师快速掌握这一应对不平衡负载的高效调制技术。 阅读详情

相关推荐

MODTRAN5.2.1安装配置

MODTRAN5.2.1安装配置

Home 4265

FromHandle函数

一 FromHandle()   MFC 实际上是对内核对象HANDLE(如CDC的m_hDC,CWnd的m_hWnd)封装了这个句柄有关的所有操作,一个类生成一个新对象的时候这个句柄是无效的,要获得这个句柄,可以有两个方法,一个是Create来创建,另一个就是用Attach来与一个已有的句柄建立关联,实际上也就是给类的句柄成员变量赋值。 而有些时候这个句柄不是由我们创建,但是我们要对它的封装类进行操作,(mfc框架)必需创建对应的封装类包装它。 MFC 中对各种包含内核对象的封装类都有FromHan.

顺其自然~专栏 1797

ENVI5.6 Seamless Mosaic多景影像镶嵌色差问题

多景影像无缝镶嵌色差问题拟解决方法

Matchaya的博客 7705

FromHandle 详解

FromHandle给出一个window对象句柄,返回一个相应对象的指针 如:CBrush::FromHandle static CBrush* PASCAL FromHandle( HBRUSH hBrush ); CFont::FromHandle static CFont* PASCAL FromHandle( HFONT hFont ); 转载于:https://www.cnbl...

weixin_34319111的博客 711

Boost电路双闭环控制MATLAB仿真

通过电流内环控制,我们可以改变目标平均电流基准值的大小来闭环改变占空比,再改变输出电压与电路电流,直到电路电流达到基准电流才达到稳态。但是我们的基准电流依旧是外部提供的,下边的电压外环控制就是电路自己计算基准电流。

Fourglsl的博客 5846

Apache Kylin 命令注入漏洞复现(CVE-2020-1956)

Apache Kylin 中的静态 API 存在安全漏洞,可以将os命令与用户输入字符串连接起来,攻击者可以在Kylin没有任何保护或验证的情况下执行任何os命令。

0xSec 1558

自定义菜单使用(CMenu)

1.在头文件定义(.h) #define IDM_MY_MENU_1 101 //菜单ID 2.在头文件申明CMenu变量 CMenu pmenu; 3.在头文件定义函数 // Generated message map functions //{{AFX_MSG(CxxxDlg) afx_msg void MyMenu();//定义函数 //}}AFX_MSG DECLARE_MESSAGE_MAP() 4.在源文件初始化菜单(.cp...

Hat_man_的博客 568

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

解析 MFC 中的 FromHandle

MFC 对 Windows API 进行了封装,在很多方面都会提供便利。用 FromHandle 返回零时对象的指针,就可以调用各种类的方法。临时对象会在 OnIdle 中销毁。这里对 FromHandle 的实现原理从源码上进行解析。// // 1 // CWnd* PASCAL CWnd::FromHandle(HWND hWnd) {

独木专栏 1万+

ncode控件使用总结

数据格式txt转s3t #HEADER #TITLES Absolute_Time,COG_Ax,COG_Ay,COG_Az,LF_SPINDLE_AZ #UNITS ,g,g,g,g, #DATATYPES Double,Float,Float,Float,Float #DATA 2. 导入s3t数据 3. 输入数据控件 直接拖入数据源或者添加控件数据 4.

技术联盟 2006

【YOLOv11多模态融合改进】(可见光+红外)涉及像素级融合、特征级融合(中期、中后期、后期)、决策级融合的完整配置步骤以及二次改进方案

在网络输入阶段将多模态数据直接合并,形成统一的特征表示。

Limiiiing的博客 1968

MFC第十五天 HWND与CWnd对象之间的转换、CWnd类简介(补充)、员工管理系统登录界面眼睛捕获(补充)

HWND 与CWND 对象之间的转换,以及CWnd类的简介,对Setcapture捕捉函数以及相关函数进行介绍

Jcrry的博客 1829

Python 神经计算实训 实训答案分享

【代码】Python 神经计算实训 实训答案分享。

2403_89314916的博客 351

mfc多文档解决GetMenu()->GetSubMenu(0)为null,报错问题

mfc多文档解决GetMenu()->GetSubMenu(0)为null,报错问题 将 CMenu* menu; menu = GetMenu()->GetSubMenu(0); CMenu* childMenu = menu->GetSubMenu(8);//装载自定义的菜单 改为 CMenu pMenu = CMenu::FromHandle(m_wndMenuBar.GetHMenu()); CMenu menu; menu = pMenu->GetSubMenu(0); C

阿杰的博客 1112

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MDI多文档框架下让主框架与子框架菜单栏一致的方法

CMDIChildWnd下有一个m_hMenuShared,应该就是子框架被激活时的菜单句柄,和这个框架关联的文档模板下也有一个m_hMenuShared,调试的时候发现,它们是相同的。我原来想在子框架的OnCreate里用GetMenu得到它的菜单指针,发现行不通,现在用CMenu::FromHandle把这个m_hMenuShared包装成指针就可以对子框架的菜单进行访问了。

jason_cs的专栏 703

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

映射窗口句柄对象

话题引入:在C语言时代,当人们使用纯粹的C开发windows应用程序时,只需要通过窗口句柄HWND【HWND是WND的内存句柄,而WND是Windows是一个内部私有数据结构,存储着窗口的相关信息:尺寸信息、标题信息等。一般来说开发人员无法访问这个数据结构,不过可以以HWND为参数调用windows的API函数如:GetWindowRect、GetWindowText等获得对其的访问】即可完成有...

SurpassLi的专栏 40

ssm框架搭建

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

菜单类

CMenu 菜单类 成员函数 1. CreateMenu()和CreatePopupMenu(),这两个函数用来创建一个菜单实例,CreateMenu()创建的是普通的菜单实例,如果想创建弹出式菜单,就要用CreatePopupMenu()函数。 2. AppendMenu()向菜单中添加一个子项,这个函数有两个主要的参数。第一个UINT nFlags,这个参数表明了该...

diliangshu0841的博客 114

Windows对象、句柄与MFC对象

<br />Windows对象、句柄与MFC对象  (2009-04-28 22:11:34)转载标签:  windows对象   句柄   mfc对象   杂谈分类: MFC以及Windows编程  Windows对象是以句柄来标识的,对应的MFC类就是这些句柄的C++包装。内存中的Windows对象一定有唯一的句柄来标识,但不一定有对应的MFC类对象在内存中。当需要获取Windows对象的对应MFC类对象而内存中又没有此对象时,系统会创建一个临时MFC类对象返回给用户,并在之后某个空闲时

hi_dzj的专栏 1075

深入浅出MFC - Windows对象、句柄与MFC对象

http://blog.sina.com.cn/s/blog_493309600100cqhy.html   Windows对象是以句柄来标识的,对应的MFC类就是这些句柄的C++包装。内存中的Windows对象一定有唯一的句柄来标识,但不一定有对应的MFC类对象在内存中。当需要获取Windows对象的对应MFC类对象而内存中又没有此对象时,系统会创建一个临时MFC类对象返回给用

netanimals的专栏 947

MFC中获取各个窗口之间的句柄或者指针对象的方法

MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决. HWND hWnd=::FindWindow(NULL,_T("Sphere")); //得到对话框的句柄 C***Dialog* pWnd= (C***Dialog*)C***Dialog::FromHandle(hWnd); //由句柄得到对话框的对象指针...

locat的专栏 392

[MDI]MDI框架下 获得每个子框架下的任意View的Menu菜单

MDI的菜单有两个,一个是平时看到的,也就是子框架childframe的菜单menu, 另一个是把所有子框架关掉后的菜单,也可以叫做主框架菜单, 这两个菜单在资源里都可以找得到,当然这两个菜单是不一样的, 用平常的getmenu()的方法获得到的是主框架的菜单, 而子框架的菜单却不好获得, 搜索了很久,才找到解决办法: 我是写在CMainFrame::OnCre

无奈 1354

MFC 对象与Win32 SDK 句柄的映射关系

MFC相关技术说明:&lt;可参阅MSDN MFC TNO 3&gt;Mapping of Windows Handles to ObjectsMFC对象与Win32 SDK 句柄的映射关系说明: MFC使用C++对象封装Win32句柄(操作系统资源调度单元 HANDLE),所以在概念上一定要把MFC中的关于C++对象和WIN32句柄对象的概念区分开来,以下讨论就是MFC C++对象如何...

weixin_33910434的博客 94

MFC中获取各个窗口(对话框)之间的指针、对象、句柄

转自:https://blog.youkuaiyun.com/lihui126/article/details/43340695 MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决.    HWND hWnd=::FindWindow(NULL,_T("Sphere"));      //得到对话框的句柄    C***Dialog* pWnd= (C...

hanxiaoyong_的博客 1516

SkinMagic使用后按钮加自定义图标或菜单GetMneu返回NULL的解决方法

我们在使用SkinMagic类美化窗口之后,在程序的InitInstance函数中会加入了SetDialogSkin函数, 但我们在使用时却发现,我们添加的菜单或者按钮图标无法正常显示!   一.出现这样的问题,需要修改以下位置(基于对话框的编程): 1.删除InitInstance函数中加入的SetDialogSkin函数, 2.在需要显示图标和按钮的主对话框的OnIn

liujiayu2的专栏 638

VC6随身笔记

常用函数CWnd::GetDC   获取DCCWnd::ReleaseDC   释放DCCWnd::GetParent   获取父窗口CWnd::GetDesktopWindow   获取桌面指针CWnd::CreateSolidCaret   创建 | 插入符(默认隐藏)CWnd::CreateCaret   创建位图插入符CWnd::ShowCaret   显示插入符CWnd::SetTime

1250

MFC各种指针句柄获取方法

MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决. HWND hWnd=::FindWindow(NULL,_T("Sphere"));      //得到对话框的句柄 C***Dialog* pWnd= (C***Dialog*)C***Dialog::FromHandle(hWnd); //由句柄得到对话框的对象指针

java、c++、机器学习方向King 860
上一篇: CDC中的SelectObject
下一篇: VC++动态加入和删除菜单的方法
heary29
博客等级 码龄12年 37粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值