CMenu::FromHandle

返回指向 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(),转换为对应的指针,以后


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值