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 ...
随机推荐
- Android广播BroadcastReceiver
Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...
- Concurrency Managed Workqueue(三)创建workqueue代码分析
一.前言 本文主要以__alloc_workqueue_key函数为主线,描述CMWQ中的创建一个workqueue实例的代码过程. 二.WQ_POWER_EFFICIENT的处理 __alloc_w ...
- oracle导入sql文件,并且记录日志
一.导入.sql文件 @data.sql 二.记录日志: 1.输入命令 sqlplus 数据库名/密码@数据库 按回车键 2.输入spool 指定路径:\a.log 按回车键 (此步骤 ...
- python标准库介绍——13 types 模块详解
== types 模块== ``types`` 模块包含了标准解释器定义的所有类型的类型对象, 如 [Example 1-86 #eg-1-86] 所示. 同一类型的所有对象共享一个类型对象. 你可以 ...
- php长链接
php 连接 mysql 是分为两步走的第一步:建立 php 到 mysql 服务器的 tcp/ip 通道 物理通道第二步:登录 mysql 服务器,建立到数据库的通道 逻辑通道 无论是长连接还是短连 ...
- 【转】SQL SERVER 获取存储过程返回值
1.OUPUT参数返回值 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_buyerid int , @o_id bigint OUTPUT ) AS BEG ...
- [hihoCoder] 骨牌覆盖问题·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对 ...
- 使用perldoc阅读perl文档
perl在安装的时候,就给我们送上一份大礼,组织精美,解释详细的perl百科全书已经安装在你的电脑里面了,遇到问题不要在去搜索那些博客了,还是练练英文,看看perldoc吧,呵呵. 1.用perldo ...
- 【Android】4.3 屏幕布局和旋转
分类:C#.Android.VS2015:创建日期:2016-02-06 为了控制屏幕的放置方向(纵向.横向),可以在Resource下同时定义两种不同的布局文件夹:layout和layout-lan ...
- Linux minilogd占用内存过高及开机启动项修改
minilogd: 今天发现一台服务起的内存正常占用应该在70左右,但是内存占用却到了90%以上,用top查看发现minilogd占用了30%左右的内存,是不符合预期的,查看开机启动项并无minilo ...