其實win32最主要的特點就是消息循環,它包含了倆個基本的函數
(1) LRESULT CALLBACK WndProc( HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
這個函數叫窗口函數, 接收消息並做出相應處理,比如(WM_MOUSEMOVE、WM_DESTROY),CALLBACK是一種函數調用習慣,被定義爲__stdcall,說明此函數爲回調函數,由系統自動調用的,當窗口接收到消息並DispatchMessage之後,系統就自動調用窗口函數WndProc了。注意窗口函數中消息的分支結構中default分支必須是return DefWindowProc ( hWnd, message, wParam, lParam );因爲不論什麼消息都必須被處理,DefWindowProc是windows內部預設的消息處理函數。
(2) int WINAPI WinMain ( HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nCmdShow )
參數說明:hInst 爲當前實例句柄,Windows 環境下用於區別同一應用程序的不同實例;hPrevInst應用程序先前實例的句柄(如果有的話),否則爲 NULL,可以用來確定當前實例是否爲應用程序的第一個實例;lpCmdLine是以NULL結尾的命令行字符串長指針;nCmdShow指定窗口初始顯示方式的整型常量(1 = 通常;7 = 最小化) 。
框架結構與步驟
註冊窗口---->創建窗口----->顯示和更新窗口---->消息循環
WNDCLASSEX wcex;
wcex.cbSize = sizeof( WNDCLASSEX );
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC) WndProc
............................
RegisterClassEx(&wcex); //註冊窗口
HWND hwnd; //定義一個句柄,把生成的窗口句柄賦給hwnd
hwnd=CreateWindow("Weixin2003",
"This is my test ! ",
WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,
hInstance,NULL); // 根據初始化的窗口類,創建該窗口。並把句柄賦給hwnd。
如果想要全屏顯示的話,屏幕參數可以爲
0, 0, ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN),
//顯示和更新窗口
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
//消息循環
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg); //對消息反應就會自動調用窗口函數
}
//窗口函數
LRESULT CALLBACK WndProc( HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_DESTROY: //結束應用程序
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam); //調用內被預設的消息處理函數,是必須寫的
}
}
這樣,一個win32窗口框架程序就介紹完了~~