文档章节

Windows 编程[4] - 学习窗体生成的过程四

涂孟超
 涂孟超
发布于 2014/09/26 15:38
字数 417
阅读 5
收藏 0
点赞 0
评论 0
现在需要复习一下系统与窗口的消息机制:

一个程序会有一个或多个线程, 系统有一个线程队列(就是个链表)管理所有这些线程, 并为每个线程建立一个消息队列.

当消息产生时(譬如点击了窗口), 系统会把该消息放到窗口所在的消息队列, 等待窗口处理.

窗口应该时刻待命, 准备从所在的线程队列中取出消息并处理!

从消息队列中取出消息, 一般用 GetMessage 函数; 要随时取出消息, 需要用个循环, 譬如:
while(GetMessage(Msg, 0, 0, 0)) do
begin
  ...
end;

 
 
 
 
 

 

 

  
取出消息怎么处理? 用 DispatchMessage 函数将消息交给(前面提到的)窗口回调函数, 一般是这样:
while(GetMessage(Msg, 0, 0, 0)) do
begin
  TranslateMessage(Msg); {有些键盘消息需要用 TranslateMessage 函数并发出系统需要的更具体的键盘消息}
  DispatchMessage(Msg);
end;

 
 
 
 
 

 

 

  
如果 GetMessage 函数不返回 0 ; 这个消息循环就是死循环, 什么时候 GetMessage 可以返回 0 呢?

只有当 GetMessage 收到 WM_QUIT 消息时才返回 0.

我们可在需要的时候, 在回调函数中通过 PostQuitMessage 函数向线程的消息队列中发送一条 WM_QUIT 消息, 以关闭线程.

PostQuitMessage 函数的参数是给应用程序的退出码, PostQuitMessage(0) 中的 0 就是我们指定的退出码, 它将作为 WM_QUIT 消息的 wParam 参数. 譬如:
function WndProc(wnd: HWND; msg: UINT; wParam: Integer; lParam: Integer): Integer; stdcall;
begin
  Result := 0;
  if msg = WM_DESTROY then
    PostQuitMessage(0)
  else
    Result := DefWindowProc(wnd, msg, wParam, lParam);
end;

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
C# WinForm开发系列 - GDI+

UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也不能算是好程序。UI编程体现在两个方...

长征2号 ⋅ 2017/11/14 ⋅ 0

c#调用COM组件

使用工具:Windows Forms ActiveX Control Importer (Aximp.exe)Aximp可以将ActiveX 控件的 COM 类型库中的类型定义转换为 Windows 窗体控件。 Windows窗体只能加载Windows窗体控件--继承自C...

amath0312 ⋅ 2013/05/18 ⋅ 0

MoreWindows博客目录(微软最有价值专家,原创技术文章152篇)

为了方便大家查找和学习,现将本人博客中所有博客文章列出目录。 一. 白话经典算法 目前有17篇,分为七大排序和经典面试题讲解两大类 1. 《白话经典算法系列之一 冒泡排序的三种实现》 2. 《...

morewindows ⋅ 2013/12/24 ⋅ 0

使用C++绘制不规则的窗体

使用C++绘制不规则的窗体   一、序言   在绝大多数的Windows应用程序中,其窗体都是使用的正规正矩的矩形窗体,例如我们常用的,“记事本”,“扫雷”,等等。矩形窗体,具有编程实现简单...

IMGTN ⋅ 2012/06/17 ⋅ 0

小博老师解析Java核心技术 ——JSwing窗体布局

[引言] 我们在学习Java编程的时候,如果需要开发客户端窗体类型的程序,可以使用JDK中的awt和swing库。本文开始小博老师就继续为大家演示如何实现Java窗体布局,达到美化界面的效果。 [步骤阅...

博为峰教研组 ⋅ 2016/12/15 ⋅ 0

lichao/angular-ocDialog

angular-ocDialog 基于Angular的窗体应用框架 项目状态 综合情况 综合案例,实际正在开发的项目 Demo: http://probedemo.or-change.cn/probe 托管地址: https://git.oschina.net/increase/Le...

lichao ⋅ 2015/10/13 ⋅ 0

使用 .NET 框架轻松开发完美的 Web 窗体控件

作者:David S. Platt 出自:微软 本文假定您熟悉 Visual Basic .NET、C# 和 HTML 下载本文的代码: WebC.exe (274KB) 摘要 预建的自定义控件可以简化和加快应用程序的设计,并使您能够维护 ...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月28日-2月3日)

Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月28日-2月3日) 本周Windows 8开发学习资源更新 本周Silverlight学习资源更新 本周Windows Phone开发学习资源更新 本周WPF学习资源推荐 本周...

冷秋寒 ⋅ 2013/02/06 ⋅ 0

周公51CTO博客有价值文章整理

说明:为方便朋友们查看本博客的文章,特地整理了本博客中周公认为值得一看的文章,不过有些文章因为年代久远且技术更新快的原因,里面所讲述的方法或者理论不再适合,请大家斟酌。 asp.net ...

周金桥 ⋅ 2011/06/23 ⋅ 0

循序渐进开发WinForm项目(3)--Winform界面层的项目设计

随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习...

walb呀 ⋅ 2017/12/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Docker Swarm的前世今生

概述 在我的《Docker Swarm集群初探》一文中,我们实际体验了Docker Swarm容器集群技术的魅力,与《Kubernetes实践录》一文中提到的Kubernetes集群技术相比,Docker Swarm没有Kubernetes显得...

CodeSheep ⋅ 今天 ⋅ 0

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 今天 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部