18、Windows API 图形用户界面(2)

简介: 一、基本概念 1、Windows系统是消息(Message)驱动的。当用户操作输入设备,产生硬件中断后,系统内核会得到这此硬件中断,硬件在系统中经过复杂的运算和处理最终变成消息。消息被系统发送给指定窗口。

一、基本概念<?xml:namespace prefix = o />

1Windows系统是消息(Message)驱动的。当用户操作输入设备,产生硬件中断后,系统内核会得到这此硬件中断,硬件在系统中经过复杂的运算和处理最终变成消息。消息被系统发送给指定窗口。

    所有的对用户界面的操作都会产生消息,包括鼠标单击、按钮、菜单选择、窗口创建、窗口移动等。

在创建窗口时,需指定窗口所属的窗口类,每一个窗口类都对应一个消息处理函数,因此每一个窗口都具有自己的消息处理函数。消息处理函数是一个回调(Call Back)函数,由系统调用。

应用程序向系统注册了窗口类,创建了窗口,系统在消息产生后,需要窗口消息处理函数来处理时,调用窗口所对应的消息处理函数。

并不是只有用户的输入才会产生消息。一些随机发生的事件也会产生消息,如系统关机、外设插入、计时器计时到达等。

2、常用控件类型

◇文本框(EditRich Edit等);

◇按钮(Button,包括Check BoxesGroup BoxesPush ButtonsRadio Buttons)

◇下拉菜单(ComboBox)

◇列表框(List Box);

◇分组列表( List View)

◇分页(Pager);

◇进度条(Process Bar)

◇属性页(Property Sheet)

◇工作条(ToolBar);

◇树(Tree View)

    控件实际是一种特殊的窗口。每一种控件有固定的样式、消息处理过程等,系统将这此属性做了固定的模式化的处理,并提前注册为窗口类。

这些控件在程序设计时不用再重新注册,也不用再去定义其消息处理函数、界面样式、窗口大小等,可以直接使用。

在程序使用控件前,最好先调用InitCommonControls以保证调用控件所需使用的动态链接库被加载。[1,P258]

3、资源是应用程序在运行中可能会使用到的一些数据。资源包括图标、位图、菜单等。在程序设计时,在资源脚本(rc)中配置资源,在程序构建时,资源编译器会将资源编译为资源文件(.res),然后由链接器将资源链接到可执行文件中。

4、对话框是一种临时窗口,一般用来显示信息、获取用户的输入等。但对话框又是一种特殊的窗口,可以通过资源来创建对话框,对话框及对话框上所显有的控件都可以在资源脚本中配置,而窗口不可以。对话框具有所属窗口,在对话框处理完成,关闭之前,拥有对话框的窗口不能进行操作。

二、窗口

1、常见的窗口消息

wps_clip_image-6912

wps_clip_image-7844

2DefWindowProc

    DefWindowProc是一个API函数。

    窗口会收到很多消息,但是这些消息消息处理函数不一定需要处理,有些消息可能直接让系统来处理。DefWindowProc的作用是处理窗口消息处理函数没有处理完、或者不需要处理的函数。

实际上很多程序员没有关注的消息都是由DefWindowProc来处理的。如果在消息处理函数中不把消息交给DefWindowProc处理,那么对窗口的动作几乎不会有响应,包括移动窗口、关闭窗口等,甚至有很多窗口样式不能显示。

一般情况下,除非程序员确定一个消息不再需要DefWindowProc来处理,那么最好将不需要的消息统一交由DefWindowProc函数来处理。

3、消息循环

GetMessage是从其所在的线程的消息队列中得到一条消息。在TranslateMessage函数对消息进行转换后,DispatchMessage将消息发送到消息处理函数,通常用于分配GetMessage函数获得的消息。

Windows系统为每一个线程创建消息队列,从消息队列中获取消息使用GetMessage函数;也可以调用API函数将消息添加到消息队列中。PostMessageSendMessage不同的是,PostMessage只是将消息放置在线程的消息队列之后便立即返回,而SendMessage是直接将消息交给窗口消息处理函数。PostQuitMessage函数将WM_QUIT消息放置在消息队列中,GetMessage函数在获得了WM_QUIT消息后,会返回0,退出消息循环。

注意的是,GetMessage只是获取了其所在的线程的消息池中的消息。在开发多线程的图形用户界面程序时,将所有的窗口创建设置在同一个线程中,子窗口的创建最好在主窗口的消息处理函数中,这样能保证消息都集中在同一个线程,如果在其他线程中需要操作界面,可以直接使用PostThreadMessageSendMessage等函数向窗口发送自定义的消息,然后再在窗口消息处理函数中处理这些自定义的窗口消息时进行窗口操作。

4、资源及其文件的编写[1,P269]

关于窗口的讲解,可以参见[1~3]等系列文章。

Windows[4]

Menus[5]

Dialog Boxes[6]

[1] 精通Windows API 函数、接口、编程实例

[2] http://blog.163.com/zhoumhan_0351/blog/static/3995422720103129131208/

[3] http://blog.163.com/zhoumhan_0351/blog/static/3995422720103401415721/

[4] http://msdn.microsoft.com/en-us/library/ms632595%28VS.85%29.aspx

[5] http://msdn.microsoft.com/en-us/library/ms647553%28VS.85%29.aspx

[6] http://msdn.microsoft.com/en-us/library/ms632588%28VS.85%29.aspx

目录
相关文章
|
网络协议 Linux 网络安全
Windows远程连接centos7图形化界面,安装xrdp
Windows远程连接centos7图形化界面,安装xrdp
622 0
|
11月前
|
NoSQL Redis 数据安全/隐私保护
Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
文章提供了Redis最流行的图形化界面工具Another Redis Desktop Manager的下载及使用教程,包括如何下载、解压、连接Redis服务器以及使用控制台和查看数据类型详细信息。
2411 6
Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
|
5月前
|
运维 监控 安全
宝塔Windows面板:轻松管理服务器的图形化神器
宝塔Windows面板是一款专为Windows服务器用户设计的图形化管理工具,旨在简化IIS配置、环境搭建与安全管理等复杂操作。它支持一键部署全栈运行环境(如IIS/Apache、PHP、MySQL等),提供可视化站点管理、安全防护与监控功能,并拥有丰富的插件生态。无论是个人站长、开发者还是中小企业,都能通过这款免费工具快速搭建网站、优化性能并强化安全性。尽管在高版本IIS兼容性和插件丰富度上略逊于Linux版,但其零门槛操作和全面功能仍使其成为理想的入门级服务器管理解决方案。
412 5
|
11月前
|
NoSQL Redis 数据库
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
文章提供了Redis图形化界面工具的下载及使用教程,包括如何连接本地Redis服务器、操作键值对、查看日志和使用命令行等功能。
1717 0
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
|
6月前
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
|
11月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
193 9
|
12月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
888 1
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
1028 0
|
移动开发 前端开发 API
HTML5 Canvas 提供丰富的绘图API,支持绘制图形、文本、渐变和图像,助力游戏开发
【5月更文挑战第13天】HTML5 Canvas 提供丰富的绘图API,支持绘制图形、文本、渐变和图像,助力游戏开发。关键功能包括绘制基本形状、文本渲染、图像处理及渐变图案。在游戏开发中,Canvas用于绘制游戏元素、实现动画效果、精确的物理碰撞检测,并具有跨平台兼容性,为创造多样化视觉体验和互动游戏提供强大工具。随着技术进步,Canvas在游戏领域的应用将持续增长。
197 4