1 #include <windows.h> 2 3 //处理窗口过程 4 LRESULT CALLBACK WindowProc( 5 HWND hwnd, //消息所属的窗口句柄 6 UINT uMsg, //具体的消息名称 WM_XXX消息名 (WindowMessage) 7 WPARAM wParam, //键盘附加消息 8 LPARAM lParam //鼠标附加消息 9 ) 10 { 11 switch (uMsg){ 12 case WM_CLOSE: 13 //所有xxxWindow为结尾的方法,都不会进入到消息队列中 而是直接执行 14 DestroyWindow(hwnd); //DestroyWindow发送另一个消息 WM_DESTROY 15 break; 16 17 case WM_DESTROY: 18 PostQuitMessage(0); 19 break; 20 21 case WM_LBUTTONDOWN: //鼠标左键按下 22 { 23 int xPos = LOWORD(lParam); 24 int yPos = HIWORD(lParam); 25 char buf[1024]; 26 wsprintf(buf, TEXT("x = %d, y = %d"), xPos, yPos); 27 MessageBox(hwnd, buf, TEXT("标题"), MB_OK); 28 break; 29 } 30 31 case WM_KEYDOWN: //键盘 32 MessageBox(hwnd, TEXT("键盘按下"), TEXT("标题"), MB_OK); 33 break; 34 35 case WM_PAINT: //绘图 36 { 37 PAINTSTRUCT ps; //绘图结构体 38 HDC hdc = BeginPaint(hwnd, &ps); 39 40 TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO")); 41 42 EndPaint(hwnd, &ps); 43 break; 44 } 45 46 } 47 48 //返回值用默认处理方式 49 return DefWindowProc(hwnd, uMsg, wParam, lParam); 50 } 51 52 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PreInstance, LPSTR lpCmdLine, int nShowCmd){ 53 //设计窗口 54 //注册窗口 55 //创建窗口 56 //显示和更新 57 //通过循环取消息 58 //处理消息(窗口过程) 59 60 61 //设计窗口 62 WNDCLASS wc; 63 wc.cbClsExtra = 0; //类的额外的内存 64 wc.cbWndExtra = 0; // 窗口额外的内存 65 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景 66 wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标, 如果第一个参数为NULL,代表使用系统提供的光标 67 wc.hIcon = LoadIcon(NULL, IDI_ERROR);//图标 如果第一个参数为NULL,代表使用系统提供的图标 68 wc.hInstance = hInstance;//应用程序的实例句柄 传入WinMain中的形参即可 69 wc.lpfnWndProc = WindowProc;//回调函数 窗口过程 70 wc.lpszClassName = TEXT("WIN");//指定窗口的类名称 71 wc.lpszMenuName = NULL; //菜单名称 72 wc.style = 0; //显示的风格 0代表默认风格 73 74 75 76 //注册窗口类 77 RegisterClass(&wc); 78 79 80 81 //创建窗口 82 /* 83 lpClassName, 类名 84 lpWindowName, 标题名 85 dwStyle, 一般用WS_OVERLAPPDWINDOW风格 86 x, 显示的坐标 87 y, 88 nWidth, 宽高 89 nHeight, CW_USEDEFAULT默认值 90 hWndParent, 父窗口 null 91 hMenu, 菜单 null 92 hInstance, 实例句柄 hInstance 93 lpParam 附加值 鼠标的附加值 NULL 94 */ 95 HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); 96 97 98 99 //显示和更新 100 ShowWindow(hwnd, SW_SHOWNORMAL); 101 UpdateWindow(hwnd); 102 103 104 105 //循环取消息 106 /* 107 HWND hwnd; 主窗口句柄 108 UINT message; 具体的消息名称 109 WPARAM wParam; 附加消息 键盘消息 110 LPARAM lParam; 附加消息 鼠标消息(左右键) 111 DWORD time; 消息产生的时间 112 POINT pt; 附加消息 鼠标消息(x y) 113 */ 114 MSG msg; 115 while (1){ 116 /* 117 _Out_ LPMSG lpMsg, 消息 118 _In_opt_ HWND hWnd, 捕获窗口 填NULL代表捕获所有的窗口 119 _In_ UINT wMsgFilterMin, 最小和最大的过滤消息 一般填0 120 _In_ UINT wMsgFilterMax); 填0代表捕获所有的消息 121 */ 122 if (GetMessage(&msg, NULL, 0, 0) == FALSE){ 123 break; 124 } 125 126 //翻译消息 127 TranslateMessage(&msg); 128 //不为False 分发 129 DispatchMessage(&msg); 130 } 131 132 133 134 //处理窗口过程 135 136 137 138 return 0; 139 }