釋出
2012 年 5 月 29 日(上次更新:2012 年 5 月 29 日)

使用 HMENU

評分:4.0/5 (119 票)
*****
你們中的一些人可能正在開發一個程式,或者甚至只是有一個想法。 因此,我將教你如何透過新增一個下拉選單來製作一個看起來很專業的程式,甚至教你如何讓它在點選下拉選單的項時執行基本操作

首先,找到你將放置程式碼以建立選單的部分。

你將需要把它放在你的 switch (message) 程式碼部分的下方。

所以,你需要告訴它它在哪個 case 中。 在這種情況下,它將在 case WM_CREATE 中。 所以,這樣寫出來

case WM_CREATE
接下來,你將宣告所有包含在螢幕頂部的選單中的所有選單。 為此,我們將使用 CreateMenu 函式來建立選單。 你的程式碼應該如下所示

1
2
3
4
HMENU hMenubar = CreateMenu();
HMENU hFile = CreateMenu();
HMENU hEdit = CreateMenu();
HMENU hHelp = CreateMenu();


現在,hMenubar 將最終成為我們程式頂部的條帶,它將容納其他下拉選單。 宣告的其餘選單將是下拉選單的標題。

現在我們將使用 AppendMenu 來放置選單

1
2
3
AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hFile, "File");           
AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hEdit, "Edit");
AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hHelp, "Help"); 


你不必 AppendMenu hMenubar,但你必須說明下拉選單標題將位於其上。 你實際上可以隨意命名 hMenubar,但你需要說出你在整個程式碼中命名的相同名稱。 你也可以隨意命名你的下拉選單標題。 但同樣的道理也適用於那些標題,就像 hMenubar 一樣。

繼續
為下拉選單建立專案

1
2
3
4
5
6
7
8
AppendMenu(hFile, MF_STRING, ID_Save, "Save");
AppendMenu(hFile, MF_STRING, ID_Load, "Load");
AppendMenu(hFile, MF_STRING, ID_Exit, "Exit");
               
AppendMenu(hEdit, MF_STRING, ID_Undo, "Undo");
AppendMenu(hEdit, MF_STRING, ID_Redo, "Redo");
                
AppendMenu(hHelp, MF_STRING, ID_VWS, "Visit website"); 


現在,這只是說明選單中將包含的內容。
儲存將在 hFile 中,因為它在逗號的開頭說 hFile。

接下來,你可能會注意到 ID_Save、ID_Load 以及所有這些。 我們目前無法像這樣編譯它,你必須將所有 ID 更改為 NULL,如下所示:]MF_STRING, NULL, "Save");
但是如果你有 NULL,那麼你就無法在點選它時給它一個命令。

所以,回到你的程式碼,在

1
2
return messages.wParam;
} 


之後,執行此操作

1
2
3
4
5
6
#define ID_Save 1
#define ID_Load 2
#define ID_Exit 3
#define ID_Undo 4
#define ID_Redo 5
#define ID_VWS 6  


現在你只剩下最後一件事才能編譯它,但是如果你從下拉選單中選擇一個專案,它將不會執行任何操作。 (注意:你必須對你的 #define 進行編號,所以對於每個 #define,請執行 1、2、3。)

現在回到你做的最後一個 AppendMenu 下面,輸入這個

1
2
SetMenu(hwnd, hMenubar);
break;} 

現在你可以編譯它並看到你漂亮的下拉選單。 對它流口水,並在你完成流口水後回來。

好的,接下來我們程式設計命令,所以我們將宣告 case WM_COMMAND:{
在此之下,你將開始製作命令,

讓我們只做一些基本命令,以保持簡短,它已經變得太長了。

1
2
if(LOWORD(wParam) == ID_Exit) {
exit(0); } 


這是告訴它在單擊帶有 ID_Exit 的按鈕時退出。

1
2
if(LOWORD(wParam) == ID_VWS) {
ShellExecute(NULL, "Open", "http://www.yoursitehere.com/", NULL, NULL, SW_SHOWNORMAL);} 


現在,這是在說:如果你點選帶有 ID_VWS 的按鈕,則使用你的預設瀏覽器連結到它所說的連結。

你也可以在檔案上執行 ShellExecute,但它只會使用預設開啟方式開啟檔案(例如:.txt 將在記事本中開啟,或者你將其設定為開啟的任何內容)

你可以簡單地將網路連結更改為
 
"C:\\Users\\{username}\\Desktop\\{Filename}.txt" 

當你按下按鈕時,它將開啟該檔案

我已經附加了 main.cpp,因此你可以在程式碼中進行修改。

附件:[main.cpp]