Windoows窗口程序五
- 程序执行机制
- 过程驱动-程序的执行过程是按照预订好的顺序执行。
- 事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件。
- Win32窗口程序就是采用事件驱动方式执行,也就是消息机制。
- 当系统通知窗口工作时,就采用消息的方式派发给窗口。
- 消息组成:
- 窗口句柄
- 消息ID
- 消息的两个参数
- 消息产生的时间
- 消息产生时的鼠标位置
- //消息结构体
- typedef struct tagMSG {
- HWND hwnd;
- UINT message;
- WPARAM wParam;
- LPARAM lParam;
- DWORD time;
- POINT pt;
- } MSG, *PMSG, *LPMSG;
- 每个窗口都必须具有窗口处理函数
- LRESULT WindowProc(
- HWND hwnd,//窗口句柄
- UINT uMsg,//消息ID
- WPARAM wParam,//消息参数
- LPARAM lParam//消息参数
- );
- 当系统通知窗口时,会调用窗口处理函数同时将消息ID和消息参数传递给窗口处理函数。
- 在窗口处理函数中,不处理的消息,使用缺省窗口处理函数,例如DefWindowProc。
- //获取消息
- BOOL WINAPI GetMessage(
- LPMSG lpMsg,//存放获取到的消息buffer
- HWND hWnd,//窗口句柄(如果设置为NULL,表示抓取本进程内所有窗口的消息)
- UINT wMsgFilterMin,//获取消息的最小ID
- UINT wMsgFilterMax//获取消息的最大ID
- );
- lpMsg-当获取到消息后,将消息的参数存放到MSG结构中。
- hWnd-获取到hWnd所指定窗口的消息
- wMsgFilterMin和wMsgFilterMax-只能获取到由他们指定的消息范围内的消息,如果都为0,表示没有范围。
- TranslateMessage--翻译消息。将按键消息翻译成字符消息
- BOOL TranslateMessage(
- _In_ const MSG *lpMsg//要翻译的消息地址
- );
- 检查消息是否是按键消息,如果不是按键消息,不做任何处理,继续执行。
- DispatchMessage--派发消息。将消息派发到该消息所属窗口的窗口处理函数上。
- LRESULT WINAPI DispatchMessage(
- _In_ const MSG *lpmsg//要派发的消息
- );
- WM_DESTROY-窗口被销毁是的消息,无消息参数。常用于在窗口被销毁之前,做相应的善后处理,例如释放资源、内存等。
- WM_SYSCOMMAND-系统命令消息,当点击窗口的最大化、最小化、关闭等命令时,收到这个消息。常用于窗口关闭时,提示用户处理。
- 消息参数:wParam-具体点击位置,例如关闭SC_CLOSE等。
- 消息参数:lParam-鼠标位置
- LOWORD 低字节-水平位置
- HIWORD 高字节-垂直位置
WM_SYSCOMMAND消息在WM_DESTROY消息之前执行
- WN_CREATE-在窗口创建成功还未显示之前,收到这个消息。常用于初始化窗口的参数、资源等,包括创建子窗口等。
- WPARAM-不使用
- LPARAM-是CREATESTRUCT结构的指针,保存了CreateWindowEx的12个参数。
- WM_SIZE-在窗口的大小发生变化后,会收到WM_SIZE。常用于窗口大小变化后,调整窗口内各个部分的布局。
- WPARAM-窗口大小变化的原因
- LPARAM-变化窗口客户区的大小
- LOWORD-变化后的宽度
- HIWORD-变化后的高度
Windoows窗口程序五的更多相关文章
- Windoows窗口程序一
编写窗口程序的步骤: .定义WinMain入口函数 .定义窗口处理函数(处理消息)WindowProc .注册窗口类RegisterClass .创建窗口(在内存中创建窗口)CreateWindow ...
- Windoows窗口程序二
WNDCLASS属性style取值: CS_GLOBALCLASS--应用程序全局窗口类 CS_BYTEALIGNCLIENT--窗口客户区的水平位置8倍数对齐 CS_BYTEALIGNWINDOW- ...
- Windoows窗口程序七
WM_QUIT--用于结束消息循环处理 wParam - PostQuitMessage函数传递的参数 lParam - 不使用 当GetMessage收到这个消息后,会返回false,结束while ...
- Windoows窗口程序六
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- Windoows窗口程序四
子窗口的创建 .创建时要设置父窗口句柄 .创建风格要增加WS_CHILD|WS_VISIBLE HWND CreateChild(LPSTR lpClassName,LPSTR lpWndName,H ...
- Windoows窗口程序三
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h& ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑
在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...
- 使用Qt生成第一个窗口程序
一.打开QtCreater,点击New Project 二.在Qt中,最常用的窗口程序为widgets控件程序,这里我们选择Qt Widgets Application 三.Qt生成的debug和re ...
随机推荐
- oc 中的.m和.mm文件区别
oc 中的.m 这是objective c语言 oc 中的.mm 这是objective c++语言
- go 学习笔记(2) --变量、常量、iota、数组
参考网址:https://gobyexample.com 变量 Go中使用全新的关键字var来声明变量.var我们并不陌生,在Javascript 和C#中均有出现.不同的是Go和C#中变量属于强类型 ...
- linux查看与开启sshd服务
1.首先通过物理终端进入到linux上,手工检查ssh发现没运行/etc/init.d/sshd statussshd is stopped 手工启动服务,发现报告权限错误./etc/init.d/s ...
- web项目,美工和前台配合,页面路径访问问题
一.美工写页面使用相对路径,但后台使用项目的应用绝对路径,访问时会出现404或页面乱码的问题 目前的解决方法:在页面中添加base标签,指定当前页面默认的路径 base标签:为页面上的所有链接规定默认 ...
- 使用dockerfile 构建springboot 的docker镜像
1 新建一个 springboot 项目,并将其打包成 jar 文件.生成demo1.jar 文件 请参考 使用springBoot搭建REATFul风格的web demo 2 编写 dockerfi ...
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
一.发现问题 先看两种方法插入数据 public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db ...
- Nginx(二):虚拟主机配置
什么是虚拟主机? 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功 ...
- 按“块”的方式写dom以及代码注释
前言 首先这个文档中主要记述了自己在编写html代码时如何构建良好的dom结构的一些所思所想,在这一部分主要说明按“块”构建dom结构的思路.同时在这篇文档中也记述了自己对代码注释的理解,在这一部分主 ...
- zend studio 安装后一体化配置
1.安装语言包http://www.eclipse.org/babel/downloads.php 11.0的时候仍然是junohttp://download.eclipse.org/technolo ...
- 安卓开发之Toolbar
根据官网的教程,发现实现与预期不一致,查看相关资料自己整理了一下(官网开发文档:https://developer.android.com/training/appbar/setting-up.htm ...