選單可能是windows程式提供的一致的使用者介面中最重要的部分,而想程式中新增選單是windows程式設計中相對容易的布馮。當使用者選擇選單單選時,windows向你的程式傳送了乙個含有才選單單選id的wm_command訊息
loword(wparam)
控制項id
hiword(wparam)
通知碼lparam
子視窗控制代碼
建立選單有三種方法;
1用wndclass定義
2使用loadmenu獲取hmenu,然後在createwindow倒數第三個引數寫上hmenu
hmenu=loadmenu(hinstance,text("mymenu"));
hwnd=createwindow(//倒數第三個引數hmenu)
3第三種方法和第二種方法一樣:
hmenu=loadmenu(hinstance,makeintresource(menuid));
hwnd=createwindow(//倒數第三個引數hmenu);
具體步驟跟建立自己的icon差不多;1新建windows32專案,編寫好自己的.cpp檔案
2在專案名稱那裡右鍵新增資源(.rc),然後resource.h標頭檔案也會自己建立
3在resource資料夾右鍵,新增資源(menu)
4然後在圖形介面裡面編輯選項和id,重新命名就行了
5執行下面看一段簡單的程式:
#include#include"resource.h"
lresult callback windowproc(
hwnd hwnd, // handle to window
uint umsg, // message identifier
wparam wparam, // first message parameter
lparam lparam // second message parameter
);int winapi winmain(
hinstance hinstance, // handle to current instance
hinstance hprevinstance, // handle to previous instance
lpstr lpcmdline, // command line
int ncmdshow // show state)
hmenu=loadmenu(hinstance,makeintresource(menudemo));
hwnd=createwindow(
text("this is title"), // window name
cw_usedefault, // horizontal position of window
cw_usedefault, // vertical position of window
cw_usedefault, // window width
cw_usedefault, // window height
null, // handle to parent or owner window
hmenu, // menu handle or child identifier
null // window-creation data
); //setmenu(hwnd,hmenu);
showwindow(hwnd,ncmdshow);
updatewindow(hwnd);
while(getmessage(&msg,null,0,0))
return msg.wparam;
}lresult callback windowproc(
hwnd hwnd, // handle to window
uint umsg, // message identifier
wparam wparam, // first message parameter
lparam lparam // second message parameter
) return 0;
case wm_destroy:
postquitmessage(0);
return 0;
} return defwindowproc(hwnd,umsg,wparam,lparam);
}
效果如下
還有一段:
/*-----------------------------------------
menudemo.c -- menu demonstration
(c) charles petzold, 1998
-----------------------------------------*/
#include #include "resource.h"
#define id_timer 1
lresult callback wndproc (hwnd, uint, wparam, lparam) ;
int winapi winmain (hinstance hinstance, hinstance hprevinstance,
pstr szcmdline, int icmdshow)
cw_usedefault, cw_usedefault,
cw_usedefault, cw_usedefault,
null, null, hinstance, null) ;
showwindow (hwnd, icmdshow) ;
updatewindow (hwnd) ;
while (getmessage (&msg, null, 0, 0))
return msg.wparam ;
}lresult callback wndproc (hwnd hwnd, uint message, wparam wparam, lparam lparam)
; static int iselection = idm_bkgnd_white ;
hmenu hmenu ;
switch (message)
return 0 ;
case idm_timer_stop:
killtimer (hwnd, id_timer) ;
enablemenuitem (hmenu, idm_timer_start, mf_enabled) ;
enablemenuitem (hmenu, idm_timer_stop, mf_grayed) ;
return 0 ;
messagebox (hwnd, text ("help not yet implemented!"),
return 0 ;
messagebox (hwnd, text ("menu demonstration program\n")
text ("(c) charles petzold, 1998"),
return 0 ;
}break ;
case wm_timer:
messagebeep (0) ;
return 0 ;
case wm_destroy:
postquitmessage (0) ;
return 0 ;
}return defwindowproc (hwnd, message, wparam, lparam) ;
}
效果: 載入和處理其他資源
我們專案中可以載入,我們需要在專案中使用,比較常見的使用的方式是兩種 這個時候,打包會報錯 要處理jpg png等格式的,我們也需要有對應的loader file loader file loader的作用就是幫助我們處理import require 方式引入的乙個檔案資源,並且會將它放到我們輸出的...
GUI剖析之資源篇之 選單
選單 1 載入選單資源 1.為主視窗載入選單 wndclass wcex wcex.lpszmenuname makeintresource idc my 2.建立自己的視窗時在入選單資源 選單資源 3.建立下拉列表 hinstance hinstance getmodulehandle null ...
windows遊戲程式設計 三 建立選單資源
windows遊戲程式設計大師技巧第二版也是很老的書了,內容有些變化。使用vs2019建立選單資源 資源名稱修改為mainmenu.rc,檢視選單id 方法一 雙擊進入 選單id為idr menu1 雙擊開啟resource.件 這裡的id file open,id file close就是選單欄按...