[WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]
首先注册了窗口类,然后创建了一个窗口,创建窗口时指定的窗口的属性和窗口消息的处理函数。函数消息的处理函数大多调用系统默认函数来处理。
1 #include<windows.h> 2 3 /*全局变量*/ 4 HINSTANCE hinst; 5 6 /*函数声明*/ 7 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int); 8 LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM); 9 10 /*显示一个窗口*/ 11 int WinMain(HINSTANCE hInstance, 12 HINSTANCE hPrevInstance, 13 LPSTR lpCmdLine, 14 int nCmdShow 15 ) 16 { 17 WNDCLASSEX wcx;//窗口类 18 HWND hwnd;//窗口句柄 19 MSG msg;//消息 20 BOOL fGotMessage;//是否获取消息 21 hinst=hInstance;//应用程序实例句柄,保存为全局变量 22 //填充窗口的数据结构 23 wcx.cbSize=sizeof(wcx);//结构体的大小 24 wcx.style=CS_HREDRAW | CS_VREDRAW;//样式:大小改变时重绘界面 25 wcx.lpfnWndProc=MainWndProc;//消息处理函数 26 wcx.cbClsExtra=0;//不使用类内存 27 wcx.cbWndExtra=0;//不使用窗口内存 28 wcx.hInstance=hInstance;//所属应用程序的实例句柄 29 wcx.hIcon=LoadIcon(NULL,IDI_APPLICATION);//图标:默认 30 wcx.hCursor=LoadCursor(NULL,IDC_ARROW);//光标:默认 31 wcx.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//背景:白色 32 wcx.lpszMenuName=NULL;//菜单:不使用 33 wcx.lpszClassName="MainWClass";//窗口类名 34 wcx.hIconSm=(HICON)LoadImage(hInstance, 35 MAKEINTRESOURCE(5), 36 IMAGE_ICON, 37 GetSystemMetrics(SM_CXSMICON), 38 GetSystemMetrics(SM_CYSMICON), 39 LR_DEFAULTCOLOR); 40 41 //注册窗口类 42 if(!RegisterClassEx(&wcx)) 43 { 44 MessageBox(NULL,TEXT("注册窗口失败"),NULL,MB_OK); 45 return 1; 46 } 47 48 //创建窗口 49 hwnd=CreateWindow( 50 "MainWClass",//window name 51 "CH 2-3",//window title 52 WS_OVERLAPPEDWINDOW,//窗口样式 53 CW_USEDEFAULT,//水平位置X:默认 54 CW_USEDEFAULT,//水平位置Y:默认 55 CW_USEDEFAULT,//width:默认 56 CW_USEDEFAULT,//high:默认 57 (HWND)NULL,//父窗口:无 58 (HMENU)NULL,//菜单:使用窗口类的菜单 59 hInstance,//应用程序实例句柄 60 (LPVOID)NULL);//窗口创建时数据:无 61 62 if(!hwnd) 63 { 64 MessageBox(NULL,TEXT("创建窗口失败"),NULL,MB_OK); 65 return 1; 66 } 67 //显示窗口 68 ShowWindow(hwnd,nCmdShow); 69 UpdateWindow(hwnd); 70 //消息循环 71 while((fGotMessage=GetMessage(&msg,(HWND)NULL,0,0))!=0 && fGotMessage!=-1) 72 { 73 TranslateMessage(&msg); 74 DispatchMessage(&msg); 75 } 76 return msg.wParam; 77 } 78 /*MainWndProc**************************** 79 *消息处理函数 80 *对所有消息采取默认处理函数 81 *****************************************/ 82 LRESULT CALLBACK MainWndProc(HWND hwnd, 83 UINT uMsg, 84 WPARAM wParam, 85 LPARAM lParam 86 ) 87 { 88 switch(uMsg) 89 { 90 case WM_DESTROY: 91 ExitThread(0); 92 return 0; 93 default: 94 return DefWindowProc(hwnd,uMsg,wParam,lParam); 95 } 96 }