#include <windows.h> //处理窗口过程 LRESULT CALLBACK WindowProc( HWND hwnd, //消息所属的窗口句柄 UINT uMsg, //具体的消息名称 WM_XXX消息名 (WindowMessage) WPARAM wParam, //键盘附加消息 LPARAM lParam //鼠标附加消息 ) { switch (uMsg){ case WM_CLOSE: //所有xxxWindow为结尾的方法,都不会进入到消息队列中 而是直接执行 DestroyWindow(hwnd); //DestroyWindow发送另一个消息 WM_DESTROY break; case WM_DESTROY: PostQuitMessage(0); break; case WM_LBUTTONDOWN: //鼠标左键按下 { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); char buf[1024]; wsprintf(buf, TEXT("x = %d, y = %d"), xPos, yPos); MessageBox(hwnd, buf, TEXT("标题"), MB_OK); break; } case WM_KEYDOWN: //键盘 MessageBox(hwnd, TEXT("键盘按下"), TEXT("标题"), MB_OK); break; case WM_PAINT: //绘图 { PAINTSTRUCT ps; //绘图结构体 HDC hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO")); EndPaint(hwnd, &ps); break; } } //返回值用默认处理方式 return DefWindowProc(hwnd, uMsg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PreInstance, LPSTR lpCmdLine, int nShowCmd){ //设计窗口 //注册窗口 //创建窗口 //显示和更新 //通过循环取消息 //处理消息(窗口过程) //设计窗口 WNDCLASS wc; wc.cbClsExtra = 0; //类的额外的内存 wc.cbWndExtra = 0; // 窗口额外的内存 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景 wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标, 如果第一个参数为NULL,代表使用系统提供的光标 wc.hIcon = LoadCursor(NULL, IDI_ERROR);//图标 如果第一个参数为NULL,代表使用系统提供的图标 wc.hInstance = hInstance;//应用程序的实例句柄 传入WinMain中的形参即可 wc.lpfnWndProc = WindowProc;//回调函数 窗口过程 wc.lpszClassName = TEXT("WIN");//指定窗口的类名称 wc.lpszMenuName = NULL; //菜单名称 wc.style = 0; //显示的风格 0代表默认风格 //注册窗口类 RegisterClass(&wc); //创建窗口 /* lpClassName, 类名 lpWindowName, 标题名 dwStyle, 一般用WS_OVERLAPPDWINDOW风格 x, 显示的坐标 y, nWidth, 宽高 nHeight, CW_USEDEFAULT默认值 hWndParent, 父窗口 null hMenu, 菜单 null hInstance, 实例句柄 hInstance lpParam 附加值 鼠标的附加值 NULL */ HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); //显示和更新 ShowWindow(hwnd, SW_SHOWNORMAL); UpdateWindow(hwnd); //循环取消息 /* HWND hwnd; 主窗口句柄 UINT message; 具体的消息名称 WPARAM wParam; 附加消息 键盘消息 LPARAM lParam; 附加消息 鼠标消息(左右键) DWORD time; 消息产生的时间 POINT pt; 附加消息 鼠标消息(x y) */ MSG msg; while (1){ /* _Out_ LPMSG lpMsg, 消息 _In_opt_ HWND hWnd, 捕获窗口 填NULL代表捕获所有的窗口 _In_ UINT wMsgFilterMin, 最小和最大的过滤消息 一般填0 _In_ UINT wMsgFilterMax); 填0代表捕获所有的消息 */ if (GetMessage(&msg, NULL, 0, 0) == FALSE){ break; } //翻译消息 TranslateMessage(&msg); //不为False 分发 DispatchMessage(&msg); } //处理窗口过程 return 0; }
原文:https://www.cnblogs.com/Kingpenguin/p/10919833.html