windows 消息机制

2023-11-15

windows 操作系统是由事件驱动的 也叫消息机制 一般来说分为四步
用户动作也就是事件 ->windows 将事件翻译成消息->将消息放入消息队列
->消息循环从消息队列中取出消息并发送给窗口处理程序
我们来看一下窗口最简单窗口的过程
创建一个窗口必须先注册这个窗口的窗口类RegisterClass(&wndclass);
每一个窗口程序都有一个类名和标题名是不变
这里引入一个新的概念叫窗口句柄 HWND
在Windows程序设计里窗口句柄的概念非常重要#include<Windows.h>
LRESULT CALLBACK WndProc( //回调函数声明 也即是窗口处理程序 这个是每一个
//程序都有一个的
HWND hWnd,
UINT uMsg,
WPARAM wParam,LPARAM lParam
);
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevlnstance, LPSTR szCmdLine, int iCmdShow)
{
WNDCLASS wndclass;//定义一个窗口类 这个结构里有十个成员 这十个成员里有三个成员至关重要
HWND hwnd;//窗口句柄
MSG msg; //消息结构
wndclass.cbWndExtra = 0;
wndclass.cbClsExtra = 0;
wndclass.hInstance = hinstance;
wndclass.lpszClassName = “taolaoda”;//窗口类名
wndclass.lpszMenuName = “陶流佳”;//窗口标题名字
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.lpfnWndProc = WndProc;//这个成员至关重要
//这段代码将这个窗口的窗口处理程序绑定为WndProc

wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
RegisterClass(&wndclass); //注册一个窗口类
hwnd = CreateWindow(“taolaoda”, “陶流佳”, WS_OVERLAPPEDWINDOW, 400, 400, 400, 400, NULL, NULL, hinstance, NULL);
// CreateWindow这个函数用于创建一个窗口记住第一个参数为窗口类名 必须和上面赋值的一样 ,第二个参数为窗口的标题 这个该不该到是无所谓其他参数可以自己了解下 该函数为返回值为窗口的句柄
*ShowWindow(hwnd, iCmdShow);//显示窗口
UpdateWindow(hwnd);//刷新拆个窗口 窗口创建之后并不会马上显示在这里两个函数执行完窗口才能显示出来

  • //这一段个每一个应用程序都有的一段 消息循环 GetMessage这个函数用于从消息队列获取消息 并保存在 //消息结构中 这样把我在后面把MSG消息结构给大家解释一下学者能更好的理解消息机
    **while (GetMessage(&msg, hwnd, 0, 0))//
    {
    TranslateMessage(&msg);//翻译消息
    DispatchMessage(&msg);将消息发送给WndProc
    }
    return 0;
    }
    //GetMeessage 这个函数是阻塞函数 消息队列有消息则获取 无则等待
    还有个函数叫PeekMessaeg 这个函数与GetMessaeg函数功能相识 这个函数是非阻塞的
    LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )//回调函数声明
    {
    switch (uMsg)
    {
    case WM_CREATE: //这个消息在窗口创建以后显示之前产生的消息
    break;
    case WM_DESTROY://当获取到这个消息程序结束
    PostQuitMessage(0);
    return 0;
    default:
    break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }

//当然在这个窗口回调函数中还有很多消息 就需要你们往学了 慢慢的完善
这个创建的窗口只是一个最基本的窗口 比如WM_PAINT 窗口重绘消息
在窗口大小发送改变时发送的消息 鼠标消息阿 键盘消息阿等等

typedef struct tagMSG {
HWND hwnd; //窗口句柄 该消息属于哪个窗口
UINT message; //消息id
WPARAM wParam; //wParam lParam 窗口附加消息
LPARAM lParam;
DWORD time; // 事件产生的时间
POINT pt; //消息的坐标(产生事件鼠标的坐标) POINT 也是一个//结构
}MSG;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows 消息机制 的相关文章

  • zlib win32编译

    1 run cmd 2 34 C Program Files x86 Microsoft Visual Studio 2019 Community VC Auxiliary Build vcvars32 bat 34 3 nmake f w
  • Visual Studio 新建一个Win32控制台项目

    1 点击 文件 新建 项目 2 选好Win32控制台项目点击确定 3 点击击下一步 4 勾选好项目程序设置后点击完成 5 点击 本地 Windows 调试器即可调试程序
  • win32汇编寄存器汇总

    32位CPU所含有的寄存器有 xff1a 4个数据寄存器 EAX EBX ECX和EDX 2个变址和指针寄存器 ESI和EDI 2个指针寄存器 ESP和EBP 6个段寄存器 ES CS SS DS FS和GS 1个指令指针寄存器 EIP 1
  • Win32学习笔记(16)消息类型

    1 消息的产生与处理流程 如上图 我们在创建窗口程序中详细介绍了这张图 比如 我们点击某个窗口的时候就会产生消息 操作系统会先判断这个消息是点在了哪个窗口 找到窗口后 会根据窗口对象中的一个成员找到窗口是属于哪个线程的 找到后就会把他封装好
  • Win32环境下两种用于C++的线程同步类

    线程同步是多线程程序设计的核心内容 它的目的是正确处理多线程并发时的各种问题 例如线程的等待 多个线程访问同一数据时的互斥 防死锁等 Win32提供多种内核对象和手段用于线程同步 如互斥量 信号量 事件 临界区等 所不同的是 互斥量 信号量
  • mciSendString的介绍

    转载至 http blog sina com cn s blog 149e9d2ec0102wzcn html 使用MCI API 源文件中需要包含头文件Mmsystem h 在Project gt Settings gt Link gt
  • 通过文件夹文件获取文件夹大小

    思路就是便利文件夹下的每个文件 碰到子文件夹递归进去继续找文件 所有的文件大小累加起来 int GetFolderSize LPCTSTR szPath TCHAR szFileFilter 512 TCHAR szFilePath 512
  • Win32 Application 、Win32 Console Application、MFC工程项目

    Win32 Application和Win32 Console Application 都是工作在32位Windows环境的程序 Win32 Application 是标准 windows程序 完全拥有windows的特性 也即我们常说的窗
  • 几何画笔

    在看书时看到了这个概念 画笔可以分为几何画笔和装饰画笔 目前从CSDN以及MSDN上大致看了一下几何画笔的用法 代码如下 HPEN hPen NULL DWORD dwStyle PS GEOMETRIC PS DASHDOT PS END
  • 窗口子类化和超类化

    目录 窗口子类化 窗口超类化 窗口子类化 窗口子类化的目的是在不修改现有代码的前提下 扩展现有窗口 控件的功能 它的思路很简单 就是将窗口过程地址修改为一个新函数地址 新的窗口过程函数处理自己感兴趣的消息 将不感兴趣的消息丢给原窗口过程处理
  • OSG+MyGUI结合下中文输入的若干问题

    好久又没写文章了 经过这两天的研究 终于搞定了OSG MYGUI的中文输入问题 现在进行一下所遇问题的汇总 方便自己以后查阅 问题1 小键盘数字的输入问题 这个是很久以前解决的 osg并不能给你真正的小键盘输入值 还是得自己处理 代码片段1
  • 桌面下雪小程序 WIN32

    想起以前还没有上大学的时候 过圣诞节 有同学发了一个桌面下雪的小程序 当看到效果的 哇 当时觉得好高端 就想什么时候我也能写出这么一个程序 学了计算机之后 发现这完全可以实现 于是就准备写一个 当卡壳的时候在网上找资料 结果发现在网上找到的
  • winMain函数

    WinMain函数 int WINAPI WinMain HINSTANCE hInstance HINSTANCE hPrevInstance LPSTR lpCmdLine int nShowCmd 函数名 WinMain 返回值 in
  • windows 各种消息

    win32 消息
  • 20_删除某个文件夹RemoveDirectory()

    删除某个文件夹RemoveDirectory 思想是RemoveDirectory 只能删除一个空的目录 如果目录中有子目录或者是子文件的话就会删除失败的 解决的方法是递归的思想 将子文件删除 之后就可以调用这个函数删除一个空的文件夹了 删
  • WIN32 代码测试(Control)

    include
  • WIN32 资源

    首先解释一下句柄 win32中的句柄在数值上表示一个32位的数 用来标识应用程序 进程中不同对象以及同类对象中的不同实例 而所谓实例就是指被实例化的对象 实例化的过程就是通过类创建对象的过程 实例化对象的目地是为对象开辟内存空间 所以句柄是
  • windows 消息机制

    windows 操作系统是由事件驱动的 也叫消息机制 一般来说分为四步 用户动作也就是事件 gt windows 将事件翻译成消息 gt 将消息放入消息队列 gt 消息循环从消息队列中取出消息并发送给窗口处理程序 我们来看一下窗口最简单窗口
  • ShellExecuteEx中与被调进程同步

    在实际的开发中会遇到这样的情况 A进程在运行时 需要调起B进程完成某些工作 例如取回关键文件 且必须等待该进程完成工作结束后才能往下继续 那么这时候 就可以采用ShellExecuteEx和WaitForSingleObject的结合对被调
  • OpenGL ES 2.0升级到3.0配置win32环境以及编译所遇bug

    安装win32平台的OpenGL ES 3 0模拟器 一 安装3 0模拟器 一般用32位的 https developer arm com products software development tools graphics devel

随机推荐

  • 可能是Windows下最简单的Java环境安装指南

    1 简介 JDK Java SE Development Kit Java开发工具 JRE Java Runtime Environment Java运行环境 如果要从事Java编程 则需要安装JDK 如果仅仅是运行一款Java程序则JRE
  • Keycloak配置模拟用户登录

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 keycloak配置 一 keycloak配置 keycloak启动 winodws通过配置项启动keycloak 进入keycloak安装目录keycloak
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(二十四)高级GLSL技巧

    Vries的教程是我看过的最好的可编程管线OpenGL教程 没有之一 其原地址如下 https learnopengl cn github io 04 20Advanced 20OpenGL 08 20Advanced 20GLSL 关于高
  • OLED\OLED.axf: Error: L6200E: Symbol __asm___6_oled_c_F16x16____REV16 multiply defined (by oled_1.o

    关于这个问题的解决我当时找了很久不知道该如何解决它总说重复最后发现应该是当时在别的文件夹引入的时候重复了 选择Remove Group然后重新编译 就ok了
  • 迁移学习(transfer learning)和微调(fine-tune)的几点认识

    迁移学习和微调的区别 什么是迁移学习 即一种学习对另一种学习的影响 它广泛地存在于知识 技能 态度和行为规范的学习中 任何一种学习都要受到学习者已有知识经验 技能 态度等的影响 只要有学习 就有迁移 迁移是学习的继续和巩固 又是提高和深化学
  • java实现多图片或多图片上传

    文章目录 一 单图上传 步骤 前台页面 后台实现文件上传的操作 二 多图上传 多图上传 还需要多一些步骤 适用功能 一 单图上传 步骤 前台页面 1 文件样式世界 div class layui input block img src al
  • Vue【四】vue自定义指令。

    Vue 四 vue自定义指令 文章目录 Vue 四 vue自定义指令 TOC 文章目录 前言 一 自定义指令 局部注册 二 自定义指令 全局注册 三 自定义指令 指令的值 总结 前言 除了核心功能默认内置的指令 v model 和 v sh
  • 查询SQL表占用空间(sp_spaceused 表名)

    create table tablespaceinfo 狦 nameinfo varchar 50 rowsinfo int reserved varchar 20 datainfo varchar 20 index size varcha
  • 保定2021高考学校成绩查询,2021年保定高考成绩排名及成绩公布时间什么时候出来...

    保定高考结束后 每年都有很多家长和考试不知道保定高考成绩排名如何查询 保定高考成绩什么时候公布以及查询方式 本文小编整理了保定高考成绩查询排名的相关知识 一 保定高考成绩公布时间及查询方式 根据往年保定高考成绩公布时间预测 2021年保定高
  • 小程序授权微信登录,获取微信用户名,头像,登录code

    getUserProfile e var that this wx getUserProfile desc 用于完善会员资料 success res gt if res 用户名 res userInfo nickName 头像res use
  • 【BERT类预训练模型整理】

    BERT类预训练模型整理 1 BERT的相关内容 1 1 BERT的预训练技术 1 1 1 掩码机制 1 1 2 NSP Next Sentence Prediction 1 2 BERT模型的局限性 2 RoBERTa的相关内容 2 1
  • 小程序(二十三)微信小程序左上角返回按钮触发事件

    微信并没有为我们提供左上角返回上一页触发的事件 但是有的时候这个操作我们还是需要监听一下 下图红框标注的返回上一页按钮 最后实现的效果 点击返回上一页的时候 我需要重新加载上一页的数据 返回上一页按钮只会触发上一页的onShow生命周期函数
  • 怎么将本地文件上传到远程git仓库

    怎么将本地文件上传到远程git仓库 1 先进入项目文件夹 通过命令 git init 把这个目录变成git可以管理的仓库 git init 2 把文件添加到版本库中 使用命令 git add 添加到暂存区里面去 不要忘记后面的小数点 意为添
  • 第二篇:UE4如何动态修改物体材质

    1 找到需要替换材质的物体 可以看到下方所有的材质 它是一个数组 前面是材质的下标 2 打开关卡蓝图 编写如下蓝图 第一步获取所有材质 创建动态材质接口 第二部设置材质 element Index代表要替换的材质下标 Material代表要
  • 米米商城项目

    米米商城 1 开发环境 2 项目功能 3 项目搭建步骤 4 配置文件 4 1 pom xml 4 2 jdbc properties 4 3 Mybaties配置文件 SqlMapConfig xml 4 4 Spring配置文件 4 4
  • 15.Mybatis 更新操作-update

    1 update 标签 update 标签是用于定义更新 语句的 1 1 常用属性 update 有几个常用的属性 但是通常只需要设置id 即可 id sql 片段在命名空间内的唯一标识 和mapper 中方法名保持一致 parameter
  • python使用keyboard库写的GUI键盘宏

    前言 之前和朋友玩游戏 需要一直按住两个按键 很麻烦 就像用python写个小脚本来方便自己 说干就干 用于学习 正文 用到的库 keyborad threading tkinter time 分析 由于需要监听键盘与运行可视化界面 所以要
  • 5.1 setfenv,但5.3可以使用lua_getglobal(l1, "_G");

    5 1使用法 lua State L luaL newstate luaL openlibs L dostring L function f1 my var 100 print var set end create func on stat
  • Springboot+Netty+Websocket实现消息推送实例

    Springboot Netty Websocket实现消息推送 文章目录 Springboot Netty Websocket实现消息推送 前言 一 引入netty依赖 二 使用步骤 1 引入基础配置类 2 netty服务启动监听器 3
  • windows 消息机制

    windows 操作系统是由事件驱动的 也叫消息机制 一般来说分为四步 用户动作也就是事件 gt windows 将事件翻译成消息 gt 将消息放入消息队列 gt 消息循环从消息队列中取出消息并发送给窗口处理程序 我们来看一下窗口最简单窗口