不知道少了什麼,總覺得沒有以前快樂,不後悔遇見誰,只後悔變成現在的模樣。。。
---- 網易雲熱評
一、視窗的頂層選單
1、建立選單HMENU CreateMenu(VOID); //建立成功返回選單控制代碼
2、增加選單項
BOOL AppendMenu(
HMENU hMenu, //選單控制代碼
UINT uFlags, //選單項風格
UINT_PTR uIDNewItem, //選單項ID或下拉選單的控制代碼
LPCTSTR lpNewItem //選單項的名稱
);
3、設定到視窗
BOOL SetMenu(
HWND hWnd, //視窗控制代碼
HMENU hMenu //選單控制代碼 );
4、三種常見風格
MF_SEPARATOR:選單項的分割線,一般給0
5、相關程式碼
case WM_CREATE:
建立頂層選單(hWnd);
break;
void 建立頂層選單(HWND hWnd) {
//1、建立頂層選單
HMENU hMenu= CreateMenu();//返回選單控制代碼
//2、增加選單項
AppendMenu(hMenu, MF_STRING, 1001, L"哎呦");
AppendMenu(hMenu, MF_STRING, 1001, L"不錯");
//3、設定(顯示)選單
SetMenu(hWnd, hMenu);
}
二、彈出式選單
1、下拉式選單
//1.1建立彈出選單
HMENU hFile = CreatePopupMenu();
//在彈出選單中新增選單項
AppendMenu(hFile, MF_STRING, 1003, L"哎");
AppendMenu(hFile, MF_SEPARATOR, 0,L"");//分割線
AppendMenu(hFile, MF_STRING, 1004, L"呦");
AppendMenu(hMenu, MF_POPUP,(UINT)hFile,L"哎呦");
2、選單命令處理
case WM_COMMAND:
選單命令處理(hWnd,wParam);
break;
void 選單命令處理(HWND hWnd,WPARAM wParam)
{
switch (LOWORD(wParam))
{
case 1003:
MessageBox(hWnd, L"哎哎哎哎我哎哎哎哎哎哎",L"呦",MB_OK);
break;
case 1004:
MessageBox(hWnd, L"呦呦呦呦呦呦呦呦呦呦呦",L"哎",MB_OK);
break;
default:
break;
}
}
三、選單項狀態
1、直接在前面加√
AppendMenu(hFile, MF_STRING|MF_CHECKED, 1003, L"哎");
2、選單另起一列
AppendMenu(hFile, MF_STRING|MF_MENUBARBREAK, 1004, L"呦");
3、預設灰色,不能選擇
AppendMenu(hFile1, MF_STRING|MF_GRAYED, 1005, L"不");
4、檢查選單欄
CheckMenuItem:是否被選中
EnableMenuItem:是否可用
case 1006:
if (勾選狀態==0)
{
//按選單id值判斷是否勾選
CheckMenuItem(選單控制代碼, 1006, MF_BYCOMMAND | MF_UNCHECKED);
}
else
{
//按選單索引取值
CheckMenuItem(選單控制代碼, 1, MF_BYPOSITION | MF_CHECKED);
}
勾選狀態 = !勾選狀態;
break;
5、WM_INITMENUPOPUP
在選單被啟用但是未顯示,視窗會收到這個訊息
WPARAM:即將顯示的選單控制代碼
LPARAM
HIWORD:是視窗選單標識 0/1
視窗選單:頂層選單和系統選單屬於視窗選單,彈出式選單不屬於視窗選單
case WM_INITMENUPOPUP:
選單啟用未顯示(hWnd,wParam,lParam);
break;
void 選單啟用未顯示(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
wchar_t s[256] = { 0 };
WriteConsole(輸出控制代碼, s, wcslen(s), NULL, NULL);
}