从窗口句柄得到菜单句柄(从HWND得到HMENU)
2014-07-16 09:55
423 查看
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(),转换为对应的指针,以后
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(),转换为对应的指针,以后
相关文章推荐
- 从窗口句柄得到菜单句柄(从HWND得到HMENU)
- 【LibUIDK界面库系列文章】得到菜单的菜单窗口句柄
- VC++中有关句柄和指针及其转换 1.MFC窗口的句柄和指针的转换 (1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。 (2)
- Unity3D 得到 主窗口句柄
- VC 获取控制台窗口的句柄(hWnd)
- 如何从光标位置”得到窗口句柄? (转)
- Sessions, Window Stations and Desktops(GetDesktopWindow函数得到的桌面句柄, 是Csrss.exe创建的一个窗口)
- 得到窗口的句柄(有标题栏和无标题栏)
- wpf得到窗口或控件的句柄
- mfc 根据窗口句柄(HWND)杀死进程
- 根据IE窗口句柄hWnd获得IWebBrowser接口
- 创建进程后得到该进程的主窗口句柄
- 如何获取控制台窗口句柄 (HWND)
- 也谈根据IE窗口句柄hWnd获得IWebBrowser接口
- CWnd 对象怎么和 HWND 窗口句柄相互转化
- 取当前窗口的句柄是直接用m_hWnd,还是用GetSafeHwnd?
- MFC 句柄Hwnd 与 窗口Wnd的联系
- 得到控制台窗口的句柄
- 怎么得到一个分割后的窗口指针或句柄???
- 如何获取控制台窗口句柄 (HWND)