事件和信息

事件,例如鼠标的单机 会保存很多数据 这个便是信息

Windows为了能够准确的描述这些信息,提供了一个结构体:MSG,该结构体里面记录的事件的详细信息.

typedef struct tagMSG {
HWND hwnd; //窗口句柄
UINT message; ///信息类别 下面信息类型
WPARAM wParam;
LPARAM lParam;
DWORD time; //信息创建时间

POINT pt; //创建时 鼠标的位置
} MSG, *PMSG;

信息与事件的对应关系

流程

鼠标按下--事件

创建信息-包含鼠标位置 还有类别(左单机 右单机)

将信息放入队列中 队列获取信息 对信息进行处理

将dis加工的信息传递给操作系统

系统调用窗口过程函数

第一个win32 代码编写

点击查看代码
// WindowsProject1.cpp : 定义应用程序的入口点。
// #include "framework.h"
#include "WindowsProject1.h"
#include <Windows.h>
HINSTANCE hAppInstance; #define MAX_LOADSTRING 100 // 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WindowProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg)
{
//窗口消息
case WM_CREATE:
{
DbgPrintf("WM_CREATE %d %d\n", wParam, lParam);
CREATESTRUCT* createst = (CREATESTRUCT*)lParam;
DbgPrintf("CREATESTRUCT %s\n", createst->lpszClass); return 0;
}
case WM_MOVE:
{
DbgPrintf("WM_MOVE %d %d\n", wParam, lParam);
POINTS points = MAKEPOINTS(lParam);
DbgPrintf("X Y %d %d\n", points.x, points.y); return 0;
}
case WM_SIZE:
{
DbgPrintf("WM_SIZE %d %d\n", wParam, lParam);
int newWidth = (int)(short)LOWORD(lParam);
int newHeight = (int)(short)HIWORD(lParam);
DbgPrintf("WM_SIZE %d %d\n", newWidth, newHeight); return 0;
}
case WM_DESTROY:
{
DbgPrintf("WM_DESTROY %d %d\n", wParam, lParam);
PostQuitMessage(0); return 0;
}
//键盘消息
case WM_KEYUP:
{
DbgPrintf("WM_KEYUP %d %d\n", wParam, lParam); return 0;
}
case WM_KEYDOWN:
{
DbgPrintf("WM_KEYDOWN %d %d\n", wParam, lParam); return 0;
}
//鼠标消息
case WM_LBUTTONDOWN:
{
DbgPrintf("WM_LBUTTONDOWN %d %d\n", wParam, lParam);
POINTS points = MAKEPOINTS(lParam);
DbgPrintf("WM_LBUTTONDOWN %d %d\n", points.x, points.y); return 0;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
} int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
hAppInstance = hInstance;
LPCWSTR className = (LPCWSTR)"My First Window"; WNDCLASS wndclass = { 0 }; wndclass.hbrBackground = (HBRUSH)COLOR_MENU;
wndclass.lpfnWndProc = WindowProc;
wndclass.lpszClassName = className;
wndclass.hInstance = hInstance; RegisterClass(&wndclass); // 创建窗口
HWND hwnd = CreateWindow(
className,
TEXT("我的第一个窗口"),
WS_OVERLAPPEDWINDOW,
10,
10,
600,
300,
NULL,
NULL,
hInstance,
NULL); if (hwnd == NULL)
return 0; // 显示窗口
ShowWindow(hwnd, SW_SHOW); // 更新窗口
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return 0;
}

最新文章

  1. Android JNI总结
  2. Mybatis拦截器 mysql load data local 内存流处理
  3. JDBC连接数据库(PreparedStatement)
  4. [POJ2404]Jogging Trails(中国旅行商问题)(一般图的匹配——状压DP)
  5. 使用CSS中margin和padding的基础和注意事项
  6. mysql连接超时
  7. Android 判断听云是否嵌入正确
  8. 让你提前认识软件开发(35):怎样改动SQL脚本以完毕需求?
  9. HighCharts 图表高度动态调整
  10. MySql 中文乱码解决办法
  11. 【TensorFlow随笔】关于一个矩阵与多个矩阵相乘的问题
  12. iOS课程表
  13. Windows Server 2016-MS服务器应用程序兼容性列表
  14. JavaScript基础系列
  15. Executor介绍
  16. RazorEngine.Templating MVC中View当模板
  17. SpringMVC请求体参数处理问题
  18. eclipse导入项目报错multiple annotations found at this line
  19. python SQLAlchemy复习
  20. java中object数据怎么转换成json数据

热门文章

  1. C# Aspose.Words.Document.PageCount 踩坑笔记(获取文档页数)
  2. MySQL库,表,数据的操作
  3. 二阶段目标检测网络-Faster RCNN 详解
  4. 基于.NetCore开发博客项目 StarBlog - (22) 开发博客文章相关接口
  5. 在生产中部署 ES2015+ 代码
  6. 你的 GitHub 年度报告「GitHub 热点速览 v.22.52」
  7. [python] 基于matplotlib实现圆环图的绘制
  8. python进阶之路11 闭包函数 装饰器
  9. C#动态创建对象过程
  10. 2023牛客寒假算法基础集训营1 ACDEFGHKLM