Win32應用程式基本框架詳解
阿新 • • 發佈:2019-02-12
#include <windows.h> //視窗過程的回撥函式,函式名WndProc可自由定義 LRESULT CALLBACK WndProc(HWND hWnd, //當前接收訊息的視窗控制代碼 UINT uMsg, //被傳送過來的訊息ID WPARAM wParam, //訊息引數:附加在訊息上的資料,與MSG結構體是一樣 LPARAM lParam) //訊息引數:附加在訊息上的資料 { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } } //應用程式入口函式WinMain() //在 Visual Studio 2005 下則為int APIENTRY WinMain... //在 Visual Studio 2012 下則為int CALLBACK WinMain... int WINAPI WinMain( HINSTANCE hInstance, //當前例項控制代碼 HINSTANCE hPrevInstance, //先前例項控制代碼 LPSTR lpCmdLine, //指向應用程式命令列的字串指標 int nShowCmd) //視窗顯示方式(隱藏、最大化、最小化等) { MSG Msg; HWND hWnd; WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOWFRAME + 1); wcex.lpszMenuName = NULL; wcex.lpszClassName = "ClsName"; wcex.hIconSm = NULL; if (!RegisterClassEx(& wcex)) { return -1; } hWnd = CreateWindowEx( WS_EX_APPWINDOW, "ClsName", "WndName", WS_OVERLAPPEDWINDOW, 200, 200, 500, 500, NULL, NULL, hInstance, NULL); if (!hWnd) { return -1; } ShowWindow(hWnd, SW_SHOW); while (GetMessage(& Msg, NULL, 0, 0)) { TranslateMessage(& Msg); DispatchMessage(& Msg); } return Msg.wParam; } /* WinMain()函式 int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 1、引數: 第一個引數,hInstance:應用程式當前例項的控制代碼。 第二個引數,hPrevlnstance:應用程式的先前例項的控制代碼。對於同一個程式開啟兩次,出現兩個視窗第一次開啟的視窗就是先前例項的視窗。 對於一個32位程式,該引數總為NULL。如果需要檢測另外一個例項是否已經存在,則使用CreateMutex函式建立一個獨一無二的名字。 即使互斥名已經存在,CreateMutex函式也是成功的,但是GetLastError函式將返回 ERROR_ALREADY_EXISTS,這就表明應用程式有另外 一個例項存在,因為它首先建立了互斥名。 第三個引數,lpCmdLine:指向應用程式命令列的字串的指標,不包括執行檔名。獲得整個命令列,參看GetCommandLine。lpCmdLine是 一個以空終止的字串,指定傳遞給應用程式的命令列引數。例如:在D盤下有一個sunxin.txt檔案,當我們用滑鼠雙擊這個檔案時將啟 動記事本程式(notepad.exe),此時系統會將D:\sunxin.txt作為命令列引數傳遞給記事本程式的WinMain函式,記事本程式在得到這個 檔案的全路徑名後,就在視窗中顯示該檔案的內容。 第四個引數,nCmdShow:指明視窗如何顯示。該引數可以是下列值之一: SW_HIDE:隱藏視窗並且啟用另外一個視窗。 SW_MINIMIZE:最小化指定的視窗,並且啟用在系統表中的頂層視窗。 SW_RESTORE:啟用並顯示視窗。如果視窗已經最小化或最大化,系統將以恢復到原來的尺寸和位置顯示視窗(與SW_SHOWNORMAL相同)。 SW_SHOW:啟用一個視窗並以原來的尺寸和位置顯示視窗。 SW_SHOWMAXIMIZED:啟用視窗並且將其最大化。 SW_SHOWMINIMIZED:啟用視窗並將其最小化(以圖示顯示)。 SW_SHOWMINNOACTIVE:將一個視窗顯示為圖示。啟用視窗維持活動狀態。 SW_SHOWNA:以視窗的當前狀態顯示視窗。啟用視窗保持活動狀態。 SW_SHOWNOACTIVATE:以視窗的最近一次的尺寸和位置顯示視窗。啟用視窗維持啟用狀態。 SW_SHOWNORMAL:啟用並顯示視窗。如果視窗最大化或最小化,系統將其恢復到原來的尺寸和位置(與SW_RESTORE相同)。 2、返回值 如果函式成功,當它接收到一個WM_QUIT訊息時就中止,函式應該返回在該訊息的wParam引數的退出值。如果函式在進入訊息迴圈前退出,應該返回零。 */