#include "stdafx.h" #include <windows.h> //回调函数 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg,WPARAM wParam,LPARAM lParam); //入口函数 int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { MSG msg; WNDCLASSEX MyWndClass = {0}; MyWndClass.cbSize = sizeof(WNDCLASSEX); MyWndClass.style = CS_HREDRAW | CS_VREDRAW;; MyWndClass.lpfnWndProc = WindowProc; //回调函数指针 待定 //MyWndClass.cbClsExtra; //MyWndClass.cbWndExtra; MyWndClass.hInstance = hInstance; //MyWndClass.hIcon; MyWndClass.hCursor= LoadCursor(NULL, IDC_APPSTARTING); MyWndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_PEN); //MyWndClass.lpszMenuName; MyWndClass.lpszClassName = "FirstWin32"; //窗口类名是必须的 //MyWndClass.hIconSm; //注册窗口类 if (RegisterClassEx(&MyWndClass) == 0) { MessageBox(NULL,"RegisterClassEx Error","Error",MB_YESNO); return 0; } //创建窗口 HWND HFirstwnd = NULL; /* HWND CreateWindow( LPCTSTR lpClassName, (必须)ASCIIZ形式的窗口类名称的地址 LPCTSTR lpWindowName, ASCIIZ形式的窗口名称的地址 如存在将显示在窗口程序的标题栏 DWORD dwStyle, 窗口风格,最普通的为WS_OVERLAPPEDWINDOW,没一个风格都是按位的掩码 这样就可以将多种风格按|(or)将他们形成一种风格WS_OVERLAPPEDWINDOW 便是多种风格的"|(or)" int x, 指定窗口左上角的以像素为单位的屏幕坐标位置。缺省地可指定为 CW_USEDEFAULT,这样 Windows 会自动为窗口指定最合适的位置 int y, 同上 int nWidth, 以像素为单位的窗口大小。缺省地可指定为 CW_USEDEFAULT,这样 Windows 会自动为窗口指定最合适的大小。 int nHeight, 同上 HWND hWndParent, 父窗口的句柄(如果有) HMENU hMenu, 菜单句柄 HANDLE hInstance, 产生该窗口的实例句柄 PVOID lpParam (可选)指向欲传给窗口的结构体数据类型参数的指针。如在MDI中在产生窗口时传递 CLIENTCREATESTRUCT 结构的参数。 一般情况下,该值总为零,这表示没有参数传递给窗口。可以通过GetWindowLong 函数检索该值。 ); */ if (!(HFirstwnd = CreateWindow(MyWndClass.lpszClassName,NULL,WS_OVERLAPPEDWINDOW,100,100,500,500,NULL,NULL,NULL,NULL))) { MessageBox(NULL,"CreateWindow Error","Error",MB_YESNO); return 0; } if (!UpdateWindow(HFirstwnd)) { MessageBox(NULL,"UpdateWindow Error","Error",MB_YESNO); return 0; } if (ShowWindow(HFirstwnd,SW_SHOWNORMAL)) { MessageBox(NULL,"UpdateWindow Success","Sccess",MB_YESNO); return 0; } //消息循环 long nReturn = 0; while (nReturn = GetMessage(&msg,HFirstwnd,0,0)) { if (nReturn == -1) { MessageBox(NULL,"GetMessage Error!","Error",MB_YESNO); return 0; } //传递消息 TranslateMessage(&msg); //分配消息 DispatchMessage(&msg); } return 0; } //过程函数(回调)--可以任意命名 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_PAINT: HDC hdc; PAINTSTRUCT OUT ps ; hdc = BeginPaint(hwnd,OUT &ps); // MessageBox(NULL,"Paint Begin" ,"DisPlay",MB_OK); EndPaint( hwnd, &ps); // MessageBox(NULL,"Paint End" ,"DisPlay",MB_OK); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_KEYDOWN: MessageBox(NULL,"按一下" ,"WM_KEYDOWN",MB_OK); break; case WM_LBUTTONDOWN: MessageBox(NULL,"单击一下" ,"WM_LBUTTONDOWN",MB_OK); break; case WM_DESTROY: DestroyWindow(hwnd);//注销窗口 PostQuitMessage(0);//退出消息循环 break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; } 总结: 创建窗口类--创建窗口--消息循环接受消息--消息处理函数(回调)来处理消息