第2课 GUI程序实例分析
1. GUI程序开发概述
(1)现代操作系统提供原生SDK支持GUI程序开发
(2)GUI程序开发是现代操作系统上的主流技术
(3)不同操作系统上的GUI开发原理相同
(4)不同操作系统上的GUI SDK不同
2. GUI程序开发原理
(1)GUI程序在运行时会创建一个消息队列
(2)系统内核将用户操作翻译成对应的程序消息
(3)程序在运行过程中需要实时处理队列中的消息
(4)当队列中没有消息时,程序将处于停滞状态

(5)不同操作系统支持相同的GUI开发原理

3. GUI程序开发的本质
(1)在代码中用程序创建窗口及窗口元素
(2)在消息处理函数中根据程序消息做出不同的响应
经典GUI程序开发模式

4. GUI程序开发实例
(1)多数操作系统以C函数的方式提供GUI SDK
(2)以Windows操作系统为例
|
函数名 |
功能 |
|
RegisterClass |
向系统注册GUI窗口样式 |
|
CreateWindow |
创建窗口或窗口元素 |
|
ShowWindow |
在屏幕上显示创建好的窗口 |
|
UpdateWindow |
刷新屏幕上的窗口 |
|
GetMessage |
获取程序消息队列中的消息 |
|
TranslateMessage |
翻译系统消息 |
|
DispatchMessage |
将消息发送到窗口处理函数 |
【编程实验】GUI程序开发初体验

#include <windows.h> #define STYLE_NAME L"MainForm"
#define BUTTON_ID 919 //主窗口定义
BOOL DefineMainWindow(HINSTANCE hInstance);
//主窗口创建
HWND CreateMainWindow(HINSTANCE hInstance, wchar_t* title);
//主窗口内部元素创建函数
HWND CreateButton(HWND parent, int id, wchar_t* text);
//主窗口显示函数
HWND DisplayMainWindow(HWND hWnd, int nCmdShow);
//主窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam); static HWND MainWindow = NULL; //主窗口句柄 BOOL WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG Msg = { }; //1.自定义主窗口样式
if (!DefineMainWindow(hInstance)){
return FALSE;
} //2.创建主窗口
MainWindow = CreateMainWindow(hInstance, STYLE_NAME); if (MainWindow)
{
//3.创建主窗口中的控件元素
CreateButton(MainWindow, BUTTON_ID, L"My Button"); //4.在屏幕上显示主窗口
DisplayMainWindow(MainWindow, nCmdShow);
}
else
{
return FALSE;
} //5.进入消息循环
while (GetMessage(&Msg,NULL,,))
{
//6.翻释并转换系统消息
TranslateMessage(&Msg);
//7.分发消息到对应的消息处理函数
DispatchMessage(&Msg);
} return Msg.wParam;
} BOOL DefineMainWindow(HINSTANCE hInstance)
{
static WNDCLASS WndClass = { };//系统结构类型,用于描述窗口样式 WndClass.style = ;
WndClass.cbClsExtra = ;
WndClass.cbWndExtra = ;
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW); //定义窗口背景色
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //定义鼠标样式
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //定义窗口左上角图标
WndClass.hInstance = hInstance; //定义窗口样式属于当前应用程序
WndClass.lpfnWndProc =(WNDPROC)WndProc; //窗口消息处理函数
WndClass.lpszClassName = STYLE_NAME; //窗口样式名
WndClass.lpszMenuName = NULL; //将定义好的窗口样式注册到系统上
return RegisterClass(&WndClass);
} HWND CreateMainWindow(HINSTANCE hInstance, wchar_t* title)
{
HWND hWnd = NULL; hWnd = CreateWindow(STYLE_NAME, //通过定义好的窗口样式创建主窗口
title, //主窗口标题
WS_OVERLAPPEDWINDOW,//创建后主窗口的显示风格
CW_USEDEFAULT, //主窗口左上角x坐标
CW_USEDEFAULT, //主窗口左上角y坐标
CW_USEDEFAULT, //主窗口宽度
CW_USEDEFAULT, //主窗口高度
NULL, //父窗口
NULL, //主窗口菜单
hInstance, //主窗口属于当前应用程序
NULL);
return hWnd;
} HWND DisplayMainWindow(HWND hWnd, int nCmdShow)
{
ShowWindow(hWnd, nCmdShow); //显示窗口
UpdateWindow(hWnd); //刷新窗口 return hWnd;
} HWND CreateButton(HWND parent, int id, wchar_t* text)
{
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(parent, GWL_HINSTANCE); HWND hWnd = NULL; hWnd = CreateWindow(L"button", //通过系统预定义的窗口样式创建元素
text, //窗口元素标题
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,//创建后窗口元素的显示风格
, //窗口元素在主窗口左上角x坐标
, //窗口元素在主窗口左上角y坐标
, //窗口元素宽度
, //窗口元素高度
parent, //父窗口
(HMENU)id, //窗口元素ID值
hInstance, //窗口元素属于当前应用程序
NULL);
return hWnd;
} LRESULT CALLBACK WndProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage();
break;
default:
//调用系统提供的默认消息处理函数
return DefWindowProc(hWnd, message, wParam, lParam);
} return ;
}
5. 小结
(1)现代操作系统提供原生SDK支持GUI程序开发
(2)不同操作系统上的GUI SDK不同
(3)不同操作系统上的GUI开发原理相同
(4)GUI程序开发包括:
①在代码中用程序创建窗口及窗口元素
②在消息处理函数中根据程序消息做出不同响应
第2课 GUI程序实例分析的更多相关文章
- 第1课 GUI程序原理分析
1. 命令行应用程序 (1)命令行应用程序的特点 ①是一种基于顺序执行结构的可执行程序 ②程序执行过程中不需要与用户产生交互 ③程序执行后给出最终的运行结果 (2)命令行应用程序的运行模式——程序运行 ...
- GUI程序原理分析
1,Qt 是一套跨平台的程序设计库,这套程序设计库主要用于 GUI 方面的程序设计开发,所以本系列博文主要是利用C++介绍 GUI 程序设计技术: 2,命令行应用程序: 1,命令行应用程序的特点(Co ...
- Asp.Net(C#)自动执行计划任务的程序实例分析
在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务.实现计划任务的方法也有很多,可以采用SQ ...
- GUI程序分析实例
GUI程序开发概述 GUI程序开发原理 GetMessage(&msg)将消息队列中的消息取出来,在循环中进行处理. GUI程序开发的本质
- 用C++实现的数独解题程序 SudokuSolver 2.3 及实例分析
SudokuSolver 2.3 程序实现 用C++实现的数独解题程序 SudokuSolver 2.2 及实例分析 里新发现了一处可以改进 grp 算法的地方,本次版本实现了对应的改进 grp 算法 ...
- 用C++实现的数独解题程序 SudokuSolver 2.2 及实例分析
SudokuSolver 2.2 程序实现 根据 用C++实现的数独解题程序 SudokuSolver 2.1 及实例分析 里分析,对 2.1 版做了一些改进和尝试. CQuizDealer 类声明部 ...
- 用C++实现的数独解题程序 SudokuSolver 2.1 及实例分析
SudokuSolver 2.1 程序实现 在 2.0 版的基础上,2.1 版在输出信息上做了一些改进,并增加了 runtil <steps> 命令,方便做实例分析. CQuizDeale ...
- 用C++实现的数独解题程序 SudokuSolver 2.4 及实例分析
SudokuSolver 2.4 程序实现 本次版本实现了 用C++实现的数独解题程序 SudokuSolver 2.3 及实例分析 里发现的第三个不完全收缩 grp 算法 thirdGreenWor ...
- 第11课 Git GUI程序的基本功能
11-1 Git GUI程序的基本操作
随机推荐
- 机器学习-ID3决策树算法(附matlab/octave代码)
ID3决策树算法是基于信息增益来构建的,信息增益可以由训练集的信息熵算得,这里举一个简单的例子 data=[心情好 天气好 出门 心情好 天气不好 出门 心情不好 天气好 出门 心情不好 天气不好 ...
- Validate Binary Search Tree,判断是否是二叉排序树
算法分析:两种方法,一种是中序遍历,然后得到一个序列,看序列是否是有序的.第二种,是用递归. 中序遍历: public class Solution { List<Integer> lis ...
- IIS 7.5 配置 php 5.4.22 链接 sql 2008(用PDO链接数据库)
最近在接触PHP这块,关于在wndows系统下的php配置,虽然网上已经很多文章,但有时候有些配置找起也麻烦,所以分享给大家. 一.php 5.4.22 下载地址 http://windows.php ...
- Uva 11178 Morley's Theorem 向量旋转+求直线交点
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=9 题意: Morlery定理是这样的:作三角形ABC每个 ...
- Java中的注解基础
一.元注解 元注解的作用就是负责注解其他注解. 1.@Target @Target用来指明注解所修饰的目标,包括packages.types(类.接口.枚举.Annotation类型).类型成员(方法 ...
- Android------个人项目(歆语气象通)
歆语气象通: 歆语气象伴随你的身边,便捷生活. 包含了以下功能: 1. 天气预报数据覆盖中国城市和地区:2. 提供一周天气预报及最低最高温度,时刻关注天气,轻松计划出行:3. 各种指数详细信息,如太阳 ...
- PowerDesigner16工具学习笔记-建立BPM
根据不同用途,BPM分为分析性(Analysis).执行型(Executable)和协作型(Collaborative) BPM的类型 业务流程语言 描述 分析型 Analysis 提供流程层次 ...
- hdu 6154 CaoHaha's staff
CaoHaha's staff Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Build Tree View Structure for SharePoint List Data
博客地址 http://blog.csdn.net/foxdave 此文参考自->原文链接 版权归原作者所有,我只是进行一下大致的翻译 应坛友要求,帮助验证一下功能. SharePoint列表数 ...
- L185 Ocean Shock
This is part of "Ocean Shock," a Reuters series exploring climate change's impact on sea c ...