Windows窗体程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.1.5 Windows程序结构
• 在Miscrosoft Visual C++中的API程序设计方法 一般的编程方法是先用VC++的Win32 Application向 导建立一个Windows应用程序的框架,然后将它 修改成自己的程序,并根据需要添加一些头文件、 源程序文件及资源文件。
【例10-1】建立一个简单的Windows API 程序,在窗口中输出“Hello,Windows API”字符串。
10.1.2 消息
2、消息类型
(1)控制消息
由控件产生的消息,是控件和子窗口发给父窗口的消息 WM_COMMAND通知消息。
(2)命令消息
来自用户接口对象。由用户操作菜单、工具条和加速键 等用户界面对象产生的WM_COMMAND消息。
(2)标准Windows消息
除WM_COMMAND外,所有以WM_ 为前缀的消息称为 标准消息。
本段程序建立并显示一个窗口
hwnd = CreateWindow(szAppName, //用于建立窗口的类名 TEXT ("The Hello Program"), // 窗口标题 WS_OVERLAPPEDWINDOW,// 窗口类型 CW_USEDEFAULT, // 窗口左上角X坐标为默认值 CW_USEDEFAULT, // 窗口左上角Y坐标为默认值 CW_USEDEFAULT, // 窗口宽度为默认值 CW_USEDEFAULT, // 窗口高度为默认值 NULL, // 该窗口没有父窗口 NULL, // 该窗口没有菜单 hInstance, // 创建本窗口的程序句柄 NULL) ; // 系统保留参数 ShowWindow(hwnd,iCmdShow) ; UpdateWindow(hwnd) ;
的消息循环
LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ;
窗口处理函数,是 一个回调函数,每 个应用程序至少有 一个窗口处理函数, 窗口函数的参数由 Windows传递,这 些参数是由事件消 息产生的。
typedef struct HWND UINT WPARAM LPARAM DWORD POINT } MSG; tagMSG { hwnd; //接收消息的窗口 message; //消息标识 wParam; //附加信息 lParam; //附加信息 time; //入队时间 pt; //光标位置
Windows窗体程序设计
• Windows系统是一个基于视窗的消息驱动系统,即使功能 大异的Windows程序都有比较规范统一的程序界面,如窗 口、菜单、工具条、对话框等。 Windows程序的设计其实 比较规范,但若不了解Windows程序的基本结构,程序调 度的基本方法(即消息驱动的基本原理),以及每个程序都 会用到的基本数据结构,也很难编写出有用的Windows程 序来。 • 之所以在本章介绍API程序,就是基于上述考虑而设计的, 尽管API程序设计在实际编程过程中已越来越少用了,但它 却是理解Windows程序设计基本原理的最佳捷径,因为所 有Windows程序的结构和执行过程最终大同于API程序。 在此基础上学习Windows程序设计能够更清楚地理解程序 运行之道! • 本章的主题是VC++窗体及事件编程基础
双击鼠标中键 按下鼠标中键 释放鼠标中键 按下键盘上的键
WM_RBUTTONDOWN
按下鼠标右键
WM_KEYDOWN
释放键盘按键
10.1.3 消息循环
1、消息队列
– 用于存放消息的队列,消息系统由 Windows系统自动建立和维护。 – Windows消息队列的类型
• 系统消息队列:由Windows系统维护管理的消 息队列,每当有消息发生时,该消息将首先被存 入系统消息队列。 • 应用程序消息队列:Windows系统会为每个应 用程序建立一个独立的消息队列,用于存放该应 用程序的消息。
10.1.3 消息循环
2、消息循环
每个应用程序都有一个循环机构,该循环机构则 不断地重复查看程序自身的消息队列,如果队 列中有消息,就将其取出并执行相应的消息处 理代码,这个处理消息的循环机构称为消息ndows程序调度的基本原理
每个Windows程序启动后,就等待用户在其窗口中 进行操作。每个操作会引发一个事件,就会产生一 个与之对应的特定消息。该消息会被Windows系 统捕获。Windows系统对捕获的消息进行分析后, 会将消息传递给产生它的应用程序的消息队列,每 个应用程序的消息循环机构不断地重复查看它自已 的消息队列,如果队列中有消息,就将其取出并执 行相应的消息处理代码, 如果队列中没有消息就等 待,当队列中有消息时就又处理它,如此循环往复, 直至程序结束。
10.1.2 消息
3、常用标准消息
消息标识符 说明 消息标识符 说明
WM_LBUTTONDBLCLK WM_LBUTTONDOWN WM_LBUTTONUP WM_RBUTTONDBLCLK
双击鼠标左键 按下鼠标左键 释放鼠标左键 双击鼠标右键
WM_MBUTTONDBLCLK WM_MBUTTONDOWN WM_MBUTTONUP WM_KEYUP
2、Window程序的编译链接过程
Dialog Editor .DLG .c/cpp c编译器 *.obj .DEF .BMP .h Image Editor .ICO .RC .CUR Font Editor
.FON
资源编译器
.res
.lib C runtime Dll import
资源连接器
*.exe
好资料,我分享……
10.1 Windows程序设计基础
1. • • • • • Windows系统的特点 标准的用户界面 多任务 设备独立性 动态链接 强大的内存管理
10.1 Windows程序设计基础
2. 基本术语
– 窗口(Window)由句柄唯一标识 – 对话框(Dialog)人机交互 – 图标(Icon)代表某一项操作或程序的图符 – 位图(Bitmap)用位模式形成的图像 – 菜单(Menu)命令 – 工具栏(ToolBar)常用的菜单项 – 状态栏(StateBar)操作状态或操作提示
WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW ; 注册窗口类 wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; 定义 wndclass.cbWndExtra = 0 ; 窗口 wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; 的属 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; 性, wndclass.hbrBackground = (HBRUSH) GetStockObject 如大 (WHITE_BRUSH) ; 小、 wndclass.lpszMenuName = NULL ; 宽度, wndclass.lpszClassName = szAppName ; 前景 if (!RegisterClass (&wndclass)) 色等 { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; }
10.1.3 消息循环
4、事件驱动及消息循环的基本原理
10.1.3 消息循环
4、DOS和Windows程序执行方式对比
10.1.4 Windows程序的构成
1、Windows程序的组成 • 程序代码
– 程序代码是程序的主体,用于实现程序的功能
• 资源
– Windows程序具有标准规范的应用程序界面,每 个Windows程序常常包含了许多相同的组成元素, 如菜单、对话框、工具栏、应用程序图标、鼠标光 标、程序版本信息等,这些组成元素被Windows 从程序代码中独立出来,并以各种不同扩展名的文 件形式存在,如.ico(图标)、.bmp(位 图)、.cur(光标)等,Windows系统称之为资源 – 资源则可以在需要时才通过相关命令加载到程序中。
– – – – – 定义窗口类 注册窗口类 建立窗口类的窗口 显示窗口 运行消息循环
10.1.5 Windows程序结构
3、Windows程序的执行逻辑
– Windows系统首先为该程序建立必备的程序环境, 如定义并初始化一些全局变量,接下来就寻找并进 入WinMain函数。 – WinMain是Window程序的入口点,由它控制程序 的执行流程。WinMain函数依次完成以下工作:调 用API函数定义并注册窗口类,创建程序窗口,显 示窗口,建立消息循环,等待用户操作程序窗口。 – 用户在程序窗口中所作的每件事情都会产生一个消 息,该消息会被Windows传递到该程序的消息队 列中。WinMain中的消息循环会不断地从本程序的 消息队列中获取消息,并将其传递给该窗口的窗口 处理函数,由窗口处理函数对消息进行处理,实现 相应的程序功能。
10.1.1 窗口
– 窗口是Windows程序的基本单元,Windows程序 的运行过程就是窗口内部、窗口之间及窗口与用户 之间的信息交换过程。窗口通常包括菜单、工具条、 滚动条、状态栏、命令按钮、对话框等元素。
10.1.2 消息
1. 事件
– 事件是指人们应用计算机的过程中发生的操作,如 按下键盘上的某个按键、移动鼠标、单击鼠标左键、 移动窗口及选择程序菜单等操作都是事件。
HellApi.cpp
#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("HelloWin"); HWND hwnd; MSG msg;
switch (message){ case WM_CREATE: return 0; case WM_PAINT:
10.1.5 Windows程序结构
1、简单的Windows程序至少包含两个函数:
– WinMain ( ) : 必有且仅有一个。是程序执行的入口 点,类似于C程序中的main函数 – 窗口函数 : 每个窗口对应一个窗口函数,以响应该 程序窗口中发生的事件消息。
2、WinMain ( )函数需完成的功能
//显示窗口,hwnd代表上面建立的窗口
//更新窗口,绘制窗口客户区
while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; Windows程序 }
2、事件驱动
– 每发生一个事件,就会产生一个与之对应的特定消 息,该消息会被Windows系统捕获,然后将通过 此消息调用执行与之对应的程序代码,实现相应的 程序功能。 – 因为从事件发生到相应程序代码被调用执行都是通 过消息来实现的,因此事件驱动也常被称为消息驱 动
10.1.2 消息
1、消息
消息是用于描述某个事件发生的信息,Windows程序设 计的主要任务就是处理各种消息。每个消息都要携带 许多信息,包括消息标识、接收消息的窗口、消息发 生的时间以及消息的具体内容等。Windows用于表示 消息的数据结构如下: