程序执行机制
过程驱动-程序的执行过程是按照预订好的顺序执行。
事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件。
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窗口程序五的更多相关文章

  1. Windoows窗口程序一

    编写窗口程序的步骤: .定义WinMain入口函数 .定义窗口处理函数(处理消息)WindowProc .注册窗口类RegisterClass .创建窗口(在内存中创建窗口)CreateWindow ...

  2. Windoows窗口程序二

    WNDCLASS属性style取值: CS_GLOBALCLASS--应用程序全局窗口类 CS_BYTEALIGNCLIENT--窗口客户区的水平位置8倍数对齐 CS_BYTEALIGNWINDOW- ...

  3. Windoows窗口程序七

    WM_QUIT--用于结束消息循环处理 wParam - PostQuitMessage函数传递的参数 lParam - 不使用 当GetMessage收到这个消息后,会返回false,结束while ...

  4. Windoows窗口程序六

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...

  5. Windoows窗口程序四

    子窗口的创建 .创建时要设置父窗口句柄 .创建风格要增加WS_CHILD|WS_VISIBLE HWND CreateChild(LPSTR lpClassName,LPSTR lpWndName,H ...

  6. Windoows窗口程序三

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h& ...

  7. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  8. Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑

    在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...

  9. 使用Qt生成第一个窗口程序

    一.打开QtCreater,点击New Project 二.在Qt中,最常用的窗口程序为widgets控件程序,这里我们选择Qt Widgets Application 三.Qt生成的debug和re ...

随机推荐

  1. OAF_OAF控件系列2 - LOV的实现(案例)

    2014-06-02 Created By BaoXinjian

  2. DBA_实践指南系列9_Oracle Erp R12应用补丁AutoPatch/AutoControl/AutoConfig(案例)

    2013-12-09 Created By BaoXinjian

  3. mpu6050 DMP库的移植

    https://www.amobbs.com/thread-5528472-1-1.html 官方的运动库,必须通过这个才能启用MPU6050的DMP引擎(数据手册里完全不提这个东西,必须在官网注册登 ...

  4. linux shell 删除指定文件夹下面 名称不包含指定字符的文件

    find /app/jenkins/jenkins/jobs/scam/* ! -name config.xml | xargs rm -rf 删除/app/jenkins/jenkins/jobs/ ...

  5. 由于CentOS的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题

    由于CentOS6的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题.解 ...

  6. Spring自带配置方式链接数据库(没有src新建文件,没有c3p0)

    1.配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:/ ...

  7. 把git上的larave项目通过SourceTree安装上再通过composer安装依赖库

    1.项目地址克隆 https://gitee.com/fps2tao/laravel5.5-alitaobao.git 通过SourceTree工具下载到本地 2.在命令行方式打开项目地址安装依赖库( ...

  8. webservice快速入门-使用wsimport生成ws服务端(二)

    上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式: 1.导出WebService服务端服务接口到jar包,客户端引入 ...

  9. [na]代理arp导致的问题(路由卷)

    已过期... 一 理论概述 \ 二 实验 实验一:代理arp在nat中的作用(实验发现一下是错的) 实验二.代理arp导致的问题 pc访问服务器想让走路由器(写32bit静态路由),右边的R arp ...

  10. iphone CGContextSetLineWidth 画线的问题

    转自:http://blog.csdn.net/jxncwzb/article/details/6267154 CGContextRef context = UIGraphicsGetCurrentC ...