windows遊戲程式設計 三 建立選單資源

2021-10-06 10:44:56 字數 3030 閱讀 1075

windows遊戲程式設計大師技巧第二版也是很老的書了,內容有些變化。

使用vs2019建立選單資源:

資源名稱修改為mainmenu.rc,

檢視選單id:

方法一:

雙擊進入:

選單id為idr_menu1 

雙擊開啟resource.**件

這裡的id_file_open,id_file_close就是選單欄按鈕的id,後面**中還需要使用。

**記得#include "resource.h"

#define win32_lean_and_mean //預編譯指令 指示編譯器不要包含mfc的內容

#include #include #include "resource.h"

//我們建立的視窗和其他應用程式視窗都會產生事件和訊息,所有訊息都進入乙個佇列,並且我們的視窗訊息傳送到我們的視窗專用佇列中,

//然後,主事件迴圈檢索這些訊息,並且把他們我們的視窗windowproc中處理

/*hwnd:視窗控制代碼,當我們使用同乙個類建立多個視窗時才會用到,hwnd是表明訊息來自哪個視窗的唯一途徑

*/lresult callback windowproc(hwnd hwnd, uint msg, wparam wparam, lparam lparam)

break;

case wm_paint: break;

case wm_destroy: break;

default:

break;

} return defwindowproc(hwnd, msg, wparam, lparam);}/*

#define winapi __stdcall

#define callback __stdcall

__stdcall: 函式引數按照從右到左的順序入棧,被呼叫的函式在返回前清理傳送引數的棧,函式引數個數固定。

__cdecl: c/c++和mfc程式預設使用的呼叫約定,也可以在函式宣告時加上__cdecl關鍵字來手工指定。採用__cdecl約定時,函式引數按照從右到左的順序入棧,並且由呼叫函式者把引數彈出棧以清理堆疊。

*/int winapi winmain(hinstance hinstance, /*windows為應用程式生成的例項控制代碼。例項是乙個指標或乙個數。 本例中hinstance用來跟蹤應用程式*/

hinstance hprevinstance,/*用來跟蹤應用程式以前的例項,目前不再使用,微軟要去除它*/

lpstr lpcmdline,//空值終止字串

int ncmdshow) ;

winclass.cbsize = sizeof(winclass);

winclass.style = cs_dblclks | cs_owndc | cs_hredraw | cs_vredraw;

winclass.lpfnwndproc = windowproc;

winclass.cbcl***tra = 0;

winclass.cbwndextra = 0;

winclass.hinstance = hinstance;

winclass.hcursor = loadcursora(null, idc_arrow);

winclass.hbrbackground = (hbrush)getstockobject(black_brush);

winclass.lpszmenuname = null;

winclass.lpszclassname = "winclass1";//每個window類代表我們的應用程式所建立的不同的視窗型別,windows需要一些途徑跟蹤識別它們,lpszclassname就是用於此目的,

if (!registerclas***(&winclass)) ;

hwnd hwnd;

//返回新建視窗控制代碼,失敗了返回null

if (!(hwnd = createwindowex(null, "winclass1", "my first window",

0, 0,//視窗左上角位置

400, 400,

null,//假如存在父視窗,指向父視窗控制代碼

loadmenu(hinstance, makeintresource(idr_menu1)),//指向附屬該視窗選單的控制代碼

hinstance,//應用程式例項

null))

) showwindow(hwnd, ncmdshow);//如果沒有新增ws_visible識別符號,手動顯示

updatewindow(hwnd);//更新視窗內容,並且產生乙個wm_paint資訊

msg msg;

//while (getmessage(&msg, null, 0, 0))

while (true)

translatemessage(&msg);

dispatchmessage(&msg);//訊息傳送給window procedure

參考:

windows遊戲程式設計滑鼠

常用滑鼠訊息 wm mousemove 滑鼠移動位置 wm lbuttondown 滑鼠左鍵按下 wm lbuttonup 滑鼠左鍵彈起 wm lbuttondblclk 滑鼠左鍵雙擊 wm rbuttondown 滑鼠右鍵按下 wm rbuttonup 滑鼠右鍵彈起 wm rbuttondblcl...

記錄windows遊戲程式設計 1

程式名稱 gamecore 2020年5月10日 用 勾勒遊戲開發所需要的程式框架 include 巨集 include define window height 600 define window width 800 define window title l 致我們永不熄滅的遊戲開發夢想 程式核...

Windows 程式設計基礎(三)

實現messageboxprintf函式,該函式有許多引數並能像 printf 那樣編排它們的格式。include include include int cdecl messageboxprintf tchar szcaption,tchar szformat,va list parglist v...