從窗口句柄得到菜單句柄(從HWND得到HMENU)

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(),轉換爲對應的指針,以後事情就好辦了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章