《Visual C++面向对象与可视化程序设计》期末复习资料
Posted kaka0010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Visual C++面向对象与可视化程序设计》期末复习资料相关的知识,希望对你有一定的参考价值。
目录
SDK编程
3.1 Windows编程基础知识
3.1.3 句柄和Windows消息
句柄是整个Windows编程的基础,一个句柄是指Windows使用的一个唯一的PVOID型的数据,是一个4字节长的数值。
常
用
句
柄
及
其
说
明
常用句柄及其说明
常用句柄及其说明
句柄类型 | 说明 |
---|---|
HWND | 标识窗口句柄 |
HINSTANCE | 标识当前实例句柄 |
HCURSOR | 标识光标句柄 |
HFONT | 标识字体句柄 |
HPEN | 标识画笔句柄 |
HBRUSH | 标识画刷句柄 |
HDC | 标识设备环境句柄 |
HBITMAP | 标识位图句柄 |
HICON | 标识图标句柄 |
HMENU | 标识菜单句柄 |
HFILE | 标识文件句柄 |
3.2 Windows应用程序常用消息
- WM_LBUTTONDOWN
单击鼠标左键时产生的消息,其附加消息参数wParam标识鼠标键的单击状态。 - WM_KEYDOWN
这是按下一个非系统键时产生的消息。系统键是指实现系统操作的组合键,例如Alt与某个功能键的组合。 - WM_CHAR
这也是按下一个非系统键时产生的消息。 - WM_CREATE
此消息由CreateWindow函数发出的信息。 - WM_CLOSE
关闭窗口时产生此消息。 - WM_DESTORY
消除窗口时由DestroyWindow函数发出此消息。 - WM_QUIT
这是退出应用程序时由PostQuitMessage函数发出的消息。 - WM_PAINT
当发生用户区移动或显示事件、用户窗口改变大小的事件、用户窗口改变大小的事件、程序通过滚轮条滚动窗口时,均产生一条WM_PAINT消息。
3.3 Windows中的事件驱动程序设计
基于DOS的应用程序主要通过使用顺序的、过程驱动程序设计方法。
基于Windows的应用程序设计方法是事件驱动的,是围绕着消息的产生与处理而展开的。
3.4 Windows 应用程序的基本结构
3.4.1 Windows应用程序的组成
一个完整的Windows应用程序通常由五种类型的文件组成。
拓展名 | 文件类型 |
---|---|
c或cpp | C语言源程序文件 |
h | 头文件 |
def | 模块定义文件 |
rc | 资源描述文件 |
vcproj | 项目文件 |
3.4.2 源程序组成结构
Windows应用程序具有相对固定的基本结构,其中由入口函数WinMain和窗口函数WndProc构成的基本框架,并包含各种数据类型、数据结构与函数等。
1. WinMain函数
WinMain函数是所有Windows应用程序的入口,类似于C语言中的main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。消息循环是整个程序运行的核心。WinMain函数实现以下功能:
1) 注册窗口类,建立窗口及执行其他必要的初始化工作。
2) 进入消息循环,根据从应用程序消息队列接收的信息,调用相应的处理过程。
3) 当消息循环检索到WM_QUIT消息时终止程序运行。
2. 窗口函数
1)窗口函数定义了应用程序对接收到的不同消息的响应,其中包含了应用程序对各种可能接收到的消息处理过程,是消息处理分支控制语句的集合。
2)窗口函数是应用程序处理接收到的消息的函数。
3)窗口函数的主体是消息处理语句,由一系列case语句组成。
3. 数据类型
常
用
的
W
i
n
d
o
w
s
数
据
类
型
及
其
说
明
常用的Windows数据类型及其说明
常用的Windows数据类型及其说明
数据类型 | 说明 |
---|---|
LONG | 32位有符号整数 |
DWORD | 32位无符号整数 |
UINT | 32位无符号整数 |
BOOL | 布尔值 |
LPTSTR | 指向字符串的32位指针(Unicode) |
LPCTSTR | 指向字符串常量的32位指针(Unicode) |
LPSTR | 指向字符串的32位指针 |
LPCSTR | 指向字符串常量的32位指针 |
4. 数据类型
- POINT定义了窗口中点的X和Y坐标
- RECT定义了一个矩形区域,其中包含该矩形区域的左上角和右下角两个点的X、Y坐标
4.1 图形设备接口
4.1.2 图形刷新
1. 刷新请求
Windows系统通常通过发送WM_PAINT消息将刷新请求传递给应用程序。当用户区的内容需要刷新时,系统在应用程序的消息队列中加入该消息,以通知窗口函数执行刷新处理。
2. 系统对刷新请求的响应
windows系统对刷新请求的响应分为三种情况:
1)窗口移动后的刷新
2)被覆盖区域的刷新
3)对象穿越后的刷新
3. 刷新方法
1)在内存中保持一个显示输出的副本,当需要重绘窗口时,将副本拷贝到相应的窗口中。
2)记录曾经发生的事件,在窗口需要刷新时重新调用窗口执行这个事件。
3)重新绘制图形,一般对于简单图形常采用。
4.1.3 获取设备环境的方法
1. BeginPaint函数
应用场景:应用程序响应WM_PAINT消息进行图形刷新时
hdc=BeginPaint(hwnd, &ps)
最后需要EndPaint函数释放
BOOL EndPaint(HWND hwnd, PAINTSTRUCT &ps)
2. GetDC函数
应用场景:并非由WM_PAINT消息驱动
hdc=GetDC(hwnd)
最后需要ReleaseDC函数释放
int ReleaseDC(HWND hwnd, HDC hdc)
3. GetDCEx函数
返回指向特定窗口的用户区或整个窗口的句柄,它是GetDC的拓展。
∗ B e g i n P a i n t 与 G e t D C 的 区 别 *BeginPaint与GetDC的区别 ∗BeginPaint与GetDC的区别
项目\\函数 | BeginPaint函数 | GetDC函数 |
---|---|---|
使用环境 | 只用于图形刷新时获取设备 | 使用范围较广 |
操作区域 | 使用BeginPaint函数获取设备环境后,操作区域为无效区域 | 使用GetDC函数获取设备环境后,操作区域为特定窗口的客户区或整个窗口 |
释放设备环境所用函数 | 由EndPaint函数释放 | 由ReleaseDC函数释放 |
4.2 绘图工具与颜色
4.2.1 画笔
1. 创建画笔
HPEN hp; 定义画笔句柄
hp = (HPEN)GetStockObject(BLACK_PEN);调用系统自带的画笔,如果不选默认为黑色
hp = CreatePen(
int nPenStyle,样式
int nWidth,宽度
COLORREF rgbcolor颜色
);
画 笔 样 式 画笔样式 画笔样式
样式 | 说明 |
---|---|
PS_DASH | 虚线 |
PS_DASHDOT | 点划线 |
PS_DASHDOTDOT | 双点划线 |
PS_DOT | 点线 |
PS_INSIDEFRAME | 实线(边框线) |
PS_NULL | 无 |
PS_SOLID | 实线 |
2. 选用画笔
SelectObject(hdc, hp);
3. 删除画笔
DeleteObject(hp);
4.2.2 画刷
1. 创建画刷
HPEN hbrush; 定义画笔句柄
hbrush = (HPEN)GetStockObject(nBrushStyle);调用系统自带的画刷
hbrush = (HBRUSH)CreateSolidBrush(COLORREF rgbColor);自定义颜色画刷
2. 选用画刷
SelectObject(hdc, hbrush);
3. 删除画刷
DeleteObject(hbrush);
5.2 文本的输出过程
1. 获取字体信息
GetTextMetrics(hdc, &tm); tm为TEXTMETRIC结构
调用函数GetTextMetrics获取当前字体的TEXTMETRIC结构后,即可为其中的成员设置文本输出格式。
2. 格式化文本
格式化处理一般针对两种情况:一是在文本行中确定后续文本的坐标,而是在换行时确定下一行文本的坐标。
3. 文本输出
BOOL TextOut(
HDC hdc,
int x, int y, (x,y)为字符串起始位置
LPCTSTR lpString, lpString为显示的字符串
int nCount 字符串长度
);
6.3 鼠标在应用程序中的应用
用 户 区 鼠 标 消 息 用户区鼠标消息 用户区鼠标消息
消息 | 含义 |
---|---|
WM_LBUTTONDOWN | 用户区内单击鼠标左键 |
WM_RBUTTONDOWN | 用户区内单击鼠标右键 |
WM_LBUTTONUP | 用户区内释放鼠标左键 |
WM_RBUTTONUP | 用户区内释放鼠标右键 |
WM_LBUTTONDBLCLK | 用户区内双击鼠标左键 |
WM_RBUTTONDBLCLK | 用户区内双击鼠标右键 |
WM_MOUSEMOVE | 鼠标在用户区内移动 |
在鼠标消息中,参数IParam包含了鼠标光标的位置,IParam字的低位包含了鼠标光标位置的x坐标值,IParam字的高位包含了鼠标光标位置的y坐标值。
x=LOWARD(lParam)
y=HIWORD(lParam)
以上是关于《Visual C++面向对象与可视化程序设计》期末复习资料的主要内容,如果未能解决你的问题,请参考以下文章