1. 程序执行机制
  2. 过程驱动-程序的执行过程是按照预订好的顺序执行。
  3. 事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件。
  4. Win32窗口程序就是采用事件驱动方式执行,也就是消息机制。
  1. 当系统通知窗口工作时,就采用消息的方式派发给窗口。
  2. 消息组成:
  3. 窗口句柄
  4. 消息ID
  5. 消息的两个参数
  6. 消息产生的时间
  7. 消息产生时的鼠标位置
  1. //消息结构体
  2. typedef struct tagMSG {
  3. HWND hwnd;
  4. UINT message;
  5. WPARAM wParam;
  6. LPARAM lParam;
  7. DWORD time;
  8. POINT pt;
  9. } MSG, *PMSG, *LPMSG;
  1. 每个窗口都必须具有窗口处理函数
  2. LRESULT WindowProc(
  3. HWND hwnd,//窗口句柄
  4. UINT uMsg,//消息ID
  5. WPARAM wParam,//消息参数
  6. LPARAM lParam//消息参数
  7. );
  8. 当系统通知窗口时,会调用窗口处理函数同时将消息ID和消息参数传递给窗口处理函数。
  9. 在窗口处理函数中,不处理的消息,使用缺省窗口处理函数,例如DefWindowProc
  1. //获取消息
  2. BOOL WINAPI GetMessage(
  3. LPMSG lpMsg,//存放获取到的消息buffer
  4. HWND hWnd,//窗口句柄(如果设置为NULL,表示抓取本进程内所有窗口的消息)
  5. UINT wMsgFilterMin,//获取消息的最小ID
  6. UINT wMsgFilterMax//获取消息的最大ID
  7. );
  8. lpMsg-当获取到消息后,将消息的参数存放到MSG结构中。
  9. hWnd-获取到hWnd所指定窗口的消息
  10. wMsgFilterMinwMsgFilterMax-只能获取到由他们指定的消息范围内的消息,如果都为0,表示没有范围。
  1. TranslateMessage--翻译消息。将按键消息翻译成字符消息
  2. BOOL TranslateMessage(
  3. _In_ const MSG *lpMsg//要翻译的消息地址
  4. );
  5. 检查消息是否是按键消息,如果不是按键消息,不做任何处理,继续执行。
  1. DispatchMessage--派发消息。将消息派发到该消息所属窗口的窗口处理函数上。
  2. LRESULT WINAPI DispatchMessage(
  3. _In_ const MSG *lpmsg//要派发的消息
  4. );
  1. WM_DESTROY-窗口被销毁是的消息,无消息参数。常用于在窗口被销毁之前,做相应的善后处理,例如释放资源、内存等。
  2. WM_SYSCOMMAND-系统命令消息,当点击窗口的最大化、最小化、关闭等命令时,收到这个消息。常用于窗口关闭时,提示用户处理。
  3. 消息参数:wParam-具体点击位置,例如关闭SC_CLOSE等。
  4. 消息参数:lParam-鼠标位置
  5. LOWORD 低字节-水平位置
  6. HIWORD 高字节-垂直位置
    WM_SYSCOMMAND消息在WM_DESTROY消息之前执行
  1. WN_CREATE-在窗口创建成功还未显示之前,收到这个消息。常用于初始化窗口的参数、资源等,包括创建子窗口等。
  2. WPARAM-不使用
  3. LPARAM-是CREATESTRUCT结构的指针,保存了CreateWindowEx12个参数。
  4. WM_SIZE-在窗口的大小发生变化后,会收到WM_SIZE。常用于窗口大小变化后,调整窗口内各个部分的布局。
  5. WPARAM-窗口大小变化的原因
  6. LPARAM-变化窗口客户区的大小
  7. LOWORD-变化后的宽度
  8. 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. oc 中的.m和.mm文件区别

    oc 中的.m 这是objective c语言 oc 中的.mm  这是objective c++语言

  2. go 学习笔记(2) --变量、常量、iota、数组

    参考网址:https://gobyexample.com 变量 Go中使用全新的关键字var来声明变量.var我们并不陌生,在Javascript 和C#中均有出现.不同的是Go和C#中变量属于强类型 ...

  3. linux查看与开启sshd服务

    1.首先通过物理终端进入到linux上,手工检查ssh发现没运行/etc/init.d/sshd statussshd is stopped 手工启动服务,发现报告权限错误./etc/init.d/s ...

  4. web项目,美工和前台配合,页面路径访问问题

    一.美工写页面使用相对路径,但后台使用项目的应用绝对路径,访问时会出现404或页面乱码的问题 目前的解决方法:在页面中添加base标签,指定当前页面默认的路径 base标签:为页面上的所有链接规定默认 ...

  5. 使用dockerfile 构建springboot 的docker镜像

    1 新建一个 springboot 项目,并将其打包成 jar 文件.生成demo1.jar 文件 请参考 使用springBoot搭建REATFul风格的web demo 2 编写 dockerfi ...

  6. Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack

    一.发现问题 先看两种方法插入数据 public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db ...

  7. Nginx(二):虚拟主机配置

    什么是虚拟主机? 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功 ...

  8. 按“块”的方式写dom以及代码注释

    前言 首先这个文档中主要记述了自己在编写html代码时如何构建良好的dom结构的一些所思所想,在这一部分主要说明按“块”构建dom结构的思路.同时在这篇文档中也记述了自己对代码注释的理解,在这一部分主 ...

  9. zend studio 安装后一体化配置

    1.安装语言包http://www.eclipse.org/babel/downloads.php 11.0的时候仍然是junohttp://download.eclipse.org/technolo ...

  10. 安卓开发之Toolbar

    根据官网的教程,发现实现与预期不一致,查看相关资料自己整理了一下(官网开发文档:https://developer.android.com/training/appbar/setting-up.htm ...