#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; };
原文:http://www.cnblogs.com/hongjiumu/p/3525500.html