快捷搜索:  汽车  科技

windows消息模式(学习Windows消息机制)

windows消息模式(学习Windows消息机制)如果您觉得对您有用的话 可以点个赞或者加个关注 欢迎大家一起进行技术交流

前言

前一段时间做的笔记 整理一下 先看看图.

windows消息模式(学习Windows消息机制)(1)

Windows消息机制

Windows窗口创建过程
  1. 设计窗口
  2. 注册窗口
  3. 创建窗口
  4. 显示窗口和更新窗口
  5. 获取消息
  6. 处理消息(窗口过程)
具体代码

#include <Windows.h> //HWND hwnd //消息所属的窗口句柄 //UINT uMSG //具体消息名称 //WPARAM wParam //键盘附加消息 //LPARAM lParam //鼠标附加消息 LRESULT CALLBACK WindowProc(HWND hwnd UINT uMsg WPARAM wParam LPARAM lParam) { switch (uMsg) { case WM_CLOSE: //DestroyWindow是直接执行的 不放入消息队列中 而是在窗口直接执行的 然后发送WM_DESTROY DestroyWindow(hwnd); //发送另外一个消息 WM_DESTROY break; case WM_DESTROY: PostQuitMessage(0); //指定退出码 break; case WM_LBUTTONDOWN: //鼠标左键按下 { int x = LOWORD(lParam); int y = HIWORD(lParam); char buf[64]; wsprintf(buf TEXT("x=%d y=%d") x y); MessageBox(hwnd buf TEXT("hhhh") MB_OK); break; } case WM_KEYDOWN: MessageBox(hwnd TEXT("键盘事件") TEXT("hhhh") MB_OK); break; case WM_PAINT: { PAINTSTRUCT ps; //绘图结构体 HDC hdc = BeginPaint(hwnd &ps); TextOut(hdc 100 50 TEXT("Hello World") strlen("Hello World")); EndPaint(hwnd &ps); break; } default: break; } return DefWindowProc(hwnd uMsg wParam lParam); //返回默认的处理方式 } //WINAPI 宏 代表__stdcall 参数的传递顺序 从右到左的顺序入栈 在函数返回前清空堆栈 int WINAPI WinMain( HINSTANCE hInstance //应用程序的实例句柄 HINSTANCE hPrevInstance //上一个应用程序的句柄 在win32环境的情况下一般为NULL LPSTR lpCmdLine //应用程序的参数 和控制台的 char *argv[] int nShowCmd //显示命令 如最大化/最小化/正常 ) { //1. 设计窗口 //2. 注册窗口 //3. 创建窗口 //4. 显示窗口和更新窗口 //5. 获取消息 //6. 处理消息(窗口过程) //1.设计窗口类 WNDCLASS wc; wc.cbClsExtra = 0; //类的额外的内存 wc.cbWndExtra = 0; //窗口额外的内存 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景色 //LoadCursor 第一个参数为NULL代表使用系统光标 wc.hCursor = LoadCursor(NULL IDC_ICON); //设置光标 wc.hIcon = LoadIcon(NULL IDH_OK); //设置icon wc.hInstance = hInstance; //应用程序实例的句柄 wc.lpfnWndProc = WindowProc; //fn代表是回调函数 窗口过程 wc.lpszClassName = TEXT("我的窗口程序"); //窗口的标题 wc.lpszMenuName = NULL; //菜单名称 wc.style = 0; //显示风格 //2.注册窗口 RegisterClass(&wc); //3.创建窗口 //lpClassName 窗口的类名 //lpWindowName 标题名称 //dwStyle 窗口的风格 WS_OVERLAPPEDWINDOW //x 坐标CW_USEDEFAULT ///y 坐标 //nWidth 宽 //nHeight 高 //hWndParent 父窗口 没有的话用NULL //hMenu 没有菜单 NULL //hInstance 程序的实例句柄 //lpParam 附加值 HWND hwnd = CreateWindow(wc.lpszClassName TEXT("Windows消息机制") WS_OVERLAPPEDWINDOW CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT NULL NULL hInstance NULL); //4.显示和更新窗口 ShowWindow(hwnd SW_SHOWNA); UpdateWindow(hwnd); //5.获取消息 //HWND hwnd; 主窗口的句柄 //UINT message; 具体消息的名称 //WPARAM wParam; 附加消息 键盘消息 //LPARAM lParam; 附加消息 鼠标消息 左右键 //DWORD time; 消息产生的时间 //POINT pt; 附加消息 获取坐标 MSG msg; //消息的结构体 for (;;) { //GetMessage 参数列表 //LPMSG lpMsg 消息 //HWND hWnd 捕获窗口 NULL代表获取所有窗口 //UINT wMsgFilterMin 最小过滤消息一般为0 代表捕获所有的消息 //UINT wMsgFilterMax 最大过滤消息一般为0 代表捕获所有的消息 if (GetMessage(&msg NULL 0 0) == FALSE) { break; } //翻译消息 处理组合键 TranslateMessage(&msg); //处理消息 DispatchMessage(&msg); } return 0; }运行效果

windows消息模式(学习Windows消息机制)(2)

Windows消息机制运行效果图

个人能力有限 如果您发现有什么不对 请私信我

如果您觉得对您有用的话 可以点个赞或者加个关注 欢迎大家一起进行技术交流

猜您喜欢: