#include <iostream> #include <Windows.h> HINSTANCE g_hInstace = 0; LRESULT CALLBACK WindowProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { switch(nMsg) { case WM_QUIT: PostQuitMessage(0); break; } return DefWindowProc(hWnd,nMsg,wParam,lParam); } BOOL RegisterWnd(LPCWSTR lpszClassName,WNDPROC WndProc) { WNDCLASSEX wcx={0}; wcx.cbSize=sizeof(WNDCLASSEX); wcx.cbClsExtra=0;//int cbClsExtra 給類而外預留的空間默認設為0 當你需要的時候自然會明白它的用處。 wcx.cbWndExtra=0;//int cbWndExtra 同上 wcx.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wcx.hCursor=NULL;//HCURSOR hCursor 該窗口光標形式的句柄 wcx.hIcon=NULL;//HICON hIcon 該窗口的圖標的句柄 wcx.hIconSm=NULL;//HICON hIconSm這個圖標顯示的是窗口在任務欄處顯示的圖標。 wcx.hInstance=g_hInstace;//HINSTANCE hInstance 該窗口的句柄 //WNDPROC lpfnWndProc 這個應該是該結構中最重要的一個成員,類型WNDPROC的實質是一個指向函數的長整類型的指針。 //也就是說我們定義一個窗口,當鼠標在該窗口上操作,或鍵盤按鍵時,該窗口收到了這個消息。此時他的lpfnWndProc指向一個回調函數, //(回調函數見下方講解)該窗口將參數送到回調函數,由回調函數執行動作,之后則可以對動作作出相應。 wcx.lpfnWndProc=WndProc; wcx.lpszClassName=lpszClassName;//LPCTSTR lpszClassName該類的名字。即給該類起一個名字。 wcx.lpszMenuName=NULL; wcx.style=CS_HREDRAW | CS_VREDRAW;//定義窗口的風格,style 雖然是一個無符號整數,但是他的取值,是系統定義好的一組宏變量 ATOM nAtom=RegisterClassEx(&wcx);//該函數注冊在隨后調用CreateWindow函數和CreateWindowEx函數中使用的窗口類。 if(0 == nAtom) return FALSE; return TRUE; } HWND CreateWnd(LPCWSTR lpszClassName,LPCWSTR lpszWindowsName) { HWND hWnd=CreateWindowEx(WS_EX_CLIENTEDGE, lpszClassName, lpszWindowsName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstace, NULL); return hWnd; } void DisplayWnd(HWND hWnd) { ShowWindow(hWnd,SW_NORMAL); UpdateWindow(hWnd); } void Message() { MSG nMsg={0}; while(GetMessage(&nMsg,NULL,0,0)) { TranslateMessage(&nMsg); DispatchMessage(&nMsg); } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. if(!RegisterWnd(TEXT("WinMain"),WindowProc)) { MessageBox(NULL,TEXT("創建窗口失敗"),TEXT("Warning"),MB_YESNOCANCEL); return 0; } HWND hWnd = CreateWnd(TEXT("WinMain"),TEXT("主窗口")); DisplayWnd(hWnd); Message(); return 0; } int main() { //HINSTANCE hInstance=HINSTANCE(100); //WinMain(hInstance,hInstance,NULL,1); WinMain(g_hInstace,g_hInstace,NULL,1); //WinMain(NULL,NULL,NULL,0); return 0; };