C++ mfc 库函数 cdc 更好的查阅资源,包括画图形,和一些基本的使用方法等,绘图一般在视图类的(屏幕/打印机)绘图消息响应函数OnDraw中进行 每次需要重绘窗口时(程序启动/窗口大小改变/全部或部分窗口重现/程序员调用RedrawWindow或UpdateWindow),应用程序框架都会调用该CWnd的消息响应成员函数(的覆盖)来绘制窗口客户区。 根据提供的文件信息,我们可以深入探讨C++ MFC(Microsoft Foundation Classes)中CDC库函数的应用以及相关的绘图基础知识。本文将围绕以下几点展开:MFC框架中的CDC类介绍、绘图上下文(Device Context, DC)的基本操作、常用结构体如POINT、SIZE、RECT及其对应的MFC封装类CPoint、CSize、CRect的使用方法,并结合具体的绘图场景进行说明。 ### CDC类简介 CDC是MFC中的一个关键类,用于表示设备上下文(Device Context, DC)。在MFC中,所有绘图操作都是通过CDC类的对象完成的。例如,在视图类的`OnDraw`函数中,我们通常会接收到一个指向CDC对象的指针`CDC *pDC`,这使得我们可以在这个设备上下文中执行绘图操作。 ### 绘图上下文基础 设备上下文是Windows系统中用于绘图的核心概念。每个窗口都有一个与之关联的设备上下文,这个设备上下文定义了如何在这个窗口上进行绘图。当需要重绘窗口时(比如程序启动时、窗口大小改变时、窗口重新显现时或者程序员调用`RedrawWindow`或`UpdateWindow`时),应用程序框架会调用视图类的`OnDraw`成员函数来绘制窗口客户区。 ### 常用结构体及MFC封装类 #### 1. POINT与CPoint - **POINT**:这是一个基本的Windows结构体,用于表示一个二维坐标点。它由两个`LONG`类型的成员组成:`x`和`y`。 ```c++ typedef struct tagPOINT { LONG x; LONG y; } POINT; ``` - **CPoint**:这是MFC对`POINT`结构体的一个封装,提供了一些额外的方法来方便操作坐标点。`CPoint`构造函数可以接受多种类型作为参数,包括整型、`POINT`结构体、`SIZE`结构体等。 ```c++ CPoint(); CPoint(int initX, int initY); CPoint(POINT initPt); CPoint(SIZE initSize); CPoint(LPARAM dwPoint); ``` `CPoint`支持基本的数学运算,如加减法等,并且可以与其他类型(如`CPoint`、`POINT`、`SIZE`)进行操作。 #### 2. SIZE与CSize - **SIZE**:这是一个用于表示尺寸大小的Windows结构体,包含两个`LONG`类型的成员:`cx`和`cy`。 ```c++ typedef struct tagSIZE { LONG cx; LONG cy; } SIZE; ``` - **CSize**:这是MFC对`SIZE`结构体的封装,提供了更多方便的操作方法。`CSize`同样支持多种构造方式,并且可以进行数学运算。 ```c++ CSize(); CSize(int initCX, int initCY); CSize(SIZE initSize); CSize(POINT initPt); CSize(DWORD dwSize); ``` #### 3. RECT与CRect - **RECT**:这是一个用于表示矩形区域的Windows结构体,由四个`LONG`类型的成员组成:`left`、`top`、`right`和`bottom`。 ```c++ typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT; ``` - **CRect**:这是MFC对`RECT`结构体的封装,提供了更多的操作方法。`CRect`不仅支持构造函数的多种参数类型,还支持数学运算和一些实用的矩形操作方法。 ```c++ CRect(); CRect(int l, int t, int r, int b); CRect(const RECT& srcRect); CRect(LPCRECT lpSrcRect); CRect(POINT point, SIZE size); CRect(POINT topLeft, POINT bottomRight); ``` 除了构造函数之外,`CRect`还提供了许多实用的方法,如: - `Width()`:返回矩形的宽度。 - `Height()`:返回矩形的高度。 - `Size()`:返回一个`CSize`对象表示矩形的尺寸。 - `TopLeft()`:返回矩形左上角的`CPoint`对象。 - `BottomRight()`:返回矩形右下角的`CPoint`对象。 - `CenterPoint()`:返回矩形中心点的`CPoint`对象。 ### 示例:检查点是否在矩形内 MFC提供了一个简单的方法来判断一个点是否在一个矩形内部。例如,我们可以使用`CRect::PtInRect`方法来实现这一功能: ```c++ CRect rect(10, 10, 371, 267); void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { // 检查鼠标点击点是否在指定矩形内 if (rect.PtInRect(point)) { // 如果在矩形内,则执行相应操作 } CView::OnLButtonUp(nFlags, point); } ``` ### 小结 通过上述介绍,我们可以看到CDC类及其相关结构体和类在MFC绘图中的重要性。了解这些基本概念对于掌握MFC绘图机制至关重要。在实际开发过程中,灵活运用这些工具可以帮助我们更高效地实现复杂的绘图需求。
- 若风092016-05-31挺实用的,介绍的比较详细,但是没有深入
- SSS阳2012-04-27初级学者,研究代码,感觉还行
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- dnSpy-net-win32-222.zip
- mongoose-free-6.9
- 德普微一级代理 DP100N06MGL PDFN3.3*3.3 TRMOS N-MOSFET 60V, 8mΩ, 45A
- 【java毕业设计】SpringBoot+Vue幼儿园管理系统 源码+sql脚本+论文 完整版
- 德普微一级代理 DP021N03FGLI DFN5*6 DPMOS N-MOSFET 30V 180A 1.8mΩ
- 巨潮资讯网5000只股票orgId-dict加密字典
- 基于java实现的快速排序代码
- 德普微一级代理 DP3145D SOT23-6 USB PD 协议单口控制器
- 【一文搞懂:什么是集成学习-原理+python代码】
- 国际象棋检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar