日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows菜单

發布時間:2025/3/15 windows 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows菜单 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1 Windows菜單????1

1.1 窗口菜單和彈出菜單????1

1.2 使用SetMenu????2

1.3 使用TrackPopupMenu????4

?

?

1 Windows菜單

1.1 窗口菜單和彈出菜單

Windows菜單分為兩類:窗口菜單和彈出菜單。窗口菜單主要用來放在某個窗口上。彈出菜單有兩個作用,一是鼠標右鍵單擊時顯示的菜單;二是作為子菜單添加到窗口菜單。

打開"記事本"程序,右鍵菜單就是一個彈出菜單:

1.1 彈出菜單

"記事本"程序的菜單欄部分就是一個窗口菜單,它又包含了"文件""編輯"……這些彈出菜單。

1.2 窗口菜單

窗口菜單由CreateMenu創建,使用SetMenu將其設置到某個窗口,使用DestroyMenu銷毀。

彈出菜單由CreatePopupMenu創建,使用AppendMenuInsertMenuItem將其添加到窗口菜單或上一級彈出菜單,也可以使用TrackPopupMenu顯示彈出菜單。彈出菜單的銷毀同樣是調用DestroyMenu函數。

1.2 使用SetMenu

下面以代碼的方式創建圖1.2所示的窗口菜單:

//創建窗口菜單

HMENU hMenuWnd = ::CreateMenu();

{//創建"文件"彈出菜單,并將其添加到窗口菜單

//創建"文件"菜單,這是一個彈出菜單

HMENU hMenuFile = ::CreatePopupMenu();

//"文件"菜單添加"新建"菜單項,0x8000是菜單項ID

::AppendMenu(hMenuFile,MF_STRING,0x8000,_T("新建"));

//"文件"菜單添加"打開"菜單項

::AppendMenu(hMenuFile,MF_STRING,0x8001,_T("打開"));

//"文件"菜單添加一條分隔線

::AppendMenu(hMenuFile,MF_SEPARATOR,0,NULL);

//繼續給"文件"菜單添加菜單項

... ... ... ...

//將整個"文件"菜單添加到窗口菜單

::AppendMenu(hMenuWnd,MF_POPUP,(UINT)hMenuFile,_T("文件"));

}

{//創建"編輯"彈出菜單,并將其添加到窗口菜單

//創建"編輯"菜單,這是一個彈出菜單

HMENU hMenuEdit = ::CreatePopupMenu();

//"編輯"菜單添加菜單項

... ... ... ...

//將整個"編輯"菜單添加到窗口菜單

::AppendMenu(hMenuWnd,MF_POPUP,(UINT)hMenuEdit,_T("編輯"));

}

{//創建"格式"彈出菜單,并將其添加到窗口菜單

... ... ... ...

}

{//創建"查看"彈出菜單,并將其添加到窗口菜單

... ... ... ...

}

{//創建"幫助"彈出菜單,并將其添加到窗口菜單

... ... ... ...

}

//將窗口菜單設置到窗口上

::SetMenu(hWnd,hMenuWnd);

代碼說明:

1SetMenu的第二個參數必須是窗口菜單句柄,即這個句柄必須由CreateMenu函數創建,而不能是CreatePopupMenu創建的彈出菜單句柄。

2::AppendMenu(hMenuWnd,MF_POPUP,(UINT)hMenuFile,_T("文件"));將彈出菜單hMenuFile添加到窗口菜單hMenuWnd。它只是把hMenuFile這個句柄添加到hMenuWnd所維護的數據結構里,即它添加的只是彈出菜單的一個引用,并不是把彈出菜單的所有菜單項添加到窗口菜單。因此,可以先將hMenuFile添加到hMenuWnd,再給hMenuFile添加菜單項,如下面的代碼所示:

{//創建"文件"彈出菜單,并將其添加到窗口菜單

//創建"文件"菜單,這是一個彈出菜單

HMENU hMenuFile = ::CreatePopupMenu();

//將整個"文件"菜單添加到窗口菜單

::AppendMenu(hMenuWnd,MF_POPUP,(UINT)hMenuFile,_T("文件"));

//"文件"菜單添加"新建"菜單項,0x8000是菜單項ID

::AppendMenu(hMenuFile,MF_STRING,0x8000,_T("新建"));

... ... ... ...

}

3DestroyMenu(hMenuWnd)將銷毀它的子菜單、孫菜單。也就是說執行DestroyMenu(hMenuWnd)之后,hMenuFilehMenuEdit……也被銷毀了。上面的代碼里,在::SetMenu(hWnd,hMenuWnd);之前增加如下測試代碼:

DestroyMenu(hMenuWnd);

hMenuWnd = ::CreateMenu();

::AppendMenu(hMenuWnd,MF_POPUP,(UINT)hMenuFile,_T("文件"));

DestroyMenu(hMenuWnd);將銷毀hMenuWndhMenuFile,所以AppendMenu將會增加無效的hMenuFilehMenuWnd。可以想象,"文件"菜單里是不會有菜單項的。

4、何時調用DestroyMenu(hMenuWnd)銷毀窗口菜單呢?應該是不再使用時銷毀,具體的就是在處理窗口的WM_DESTROY消息時銷毀,或者在SetMenu更換菜單后銷毀。

1.3 使用TrackPopupMenu

上一節的代碼里包含了彈出菜單的創建,并增加到窗口菜單。彈出菜單還有一個作用就是用來顯示圖1.1所示的右鍵彈出菜單,方法就是調用TrackPopupMenu函數。需要注意的是:TrackPopupMenu的第一個參數必須是一個彈出菜單的句柄,就是說它必須由CreatePopupMenu創建。

以上一節的代碼為例:

//可以顯示出彈出菜單

TrackPopupMenu(hMenuFile,...);

//無法顯示彈出菜單,因為hMenuWnd是一個窗口菜單,不是彈出菜單

TrackPopupMenu(hMenuWnd,...);

//GetSubMenu(hMenuWnd,0) 返回的其實就是hMenuFile

//因此下面的代碼可以正常顯示彈出菜單

TrackPopupMenu(GetSubMenu(hMenuWnd,0),...);

當使用LoadMenu從資源里載入菜單時,其返回的是一個窗口菜單句柄,直接傳遞給TrackPopupMenu是無法正常顯示的。必須使用GetSubMenu獲得窗口菜單里的彈出菜單句柄,才能正常調用TrackPopupMenu

執行TrackPopupMenu之后,可以立即調用DestroyMenu銷毀菜單。

轉載于:https://www.cnblogs.com/hanford/p/6163690.html

總結

以上是生活随笔為你收集整理的Windows菜单的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。