按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
pDC…》LineTo(x; y);
}
// 恢复设备上下文
pDC…》SelectObject(oldpen);
curpen。DeleteObject();
}
(4 )动态绘制 CPU 使用记录
响应 CCpuUsageDlg 的 WM_PAINT 消息,用来动态绘制 CPU 使用记录,代码如下:
void CCpuUsageDlg::OnPaint()
·170 ·
…………………………………………………………Page 180……………………………………………………………
第 7 章 图形图像
{
if (IsIconic())
{
……
}
else
{
CPaintDC dc(this);
// 绘制 CPU 使用记录
DrawDiagram(&dc);
}
}
(5 )释放资源
最后,响应 CCpuUsageDlg 的 WM_DESTROY 消息,在程序退出时,删除定时器,释放
系统资源,代码如下:
void CCpuUsageDlg::OnDestroy()
{
CDialog::OnDestroy();
// 释放定时器资源
KillTimer(m_timer);
}
(6 )运行结果
程 序 运 行 后 , 界 面 如 图 7…2 至 7…5 所 示 。
·171 ·
…………………………………………………………Page 181……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
图 7…2 Cpu 使用记录 1
图 7…3 Cpu 使用记录 2
图 7…4 Cpu 使用记录 3
·172 ·
…………………………………………………………Page 182……………………………………………………………
第 7 章 图形图像
图 7…5 CPU 使用记录
7。4。2 画刷
实例 7…2 :画刷使用实例实例。源代码在光盘中“07实例 7…2Color ”目录下。
1.创建程序
本节利用 CDC 类的一个函数和画刷来取得指定点的颜色。首先用 Visual C++ 的
AppWizard 创建一个基于对话框的应用程序 Color ,为对话框添加两个图像框控件。为
CColorDlg 添加如表 7…2 所示的成员变量,。
表 7…2 CColorDlg 的成员变量表
成员变量 类型 作用
m_StaticClr CStatic 显示颜色区域
m_StaticPic CStatic 显示图像区域
为应用程序添加一个 bmp 资源 IDB_BITMAP1 ,设置图片控件的属性,如图 7…6 所示。
图 7…6 设置图片框属性
2 .添加响应代码
添加响应鼠标单击的代码,用来得到鼠标落点的颜色并且显示出来。代码如下:
·173 ·
…………………………………………………………Page 183……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
// 响应鼠标左键落在图片区域的操作
void CColorDlg::OnLButtonDown(UINT nFlags; CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect picRect; clrRect;
CBrush newBrush; *oldBrush;
COLORREF rgb;
CClientDC dc(this);
// 得到图片所在的区域矩形
m_StaticPic。GetWindowRect(picRect);
ScreenToClient(picRect);
// 得到颜色所在的区域矩形
m_StaticClr。GetWindowRect(clrRect);
ScreenToClient(clrRect);
// 如果鼠标落在图像区域
if(picRect。PtInRect(point))
{
// 得到该点的像素
rgb = dc。GetPixel(point);
// 生成新的画刷
newBrush。CreateSolidBrush(rgb);
// 设备选择新的画刷
oldBrush = dc。SelectObject(&newBrush);
// 用像素颜色的填充颜色矩形
dc。Rectangle(clrRect);
dc。SelectObject(oldBrush);
newBrush。DeleteObject();
// 刷新屏幕
Invalidate(FALSE);
}
CDialog::OnLButtonDown(nFlags; point);
}
·174 ·
…………………………………………………………Page 184……………………………………………………………
第 7 章 图形图像
3 .运行结果
程序运行后,用鼠标单击图片不同的区域,程序界面如图 7…7 所示。
(a ) (b )
图 7…8 4 鼠标点在不同区域的颜色
7。5 本章小结
本章讲述了使用 Visual C++进行图形绘制和图像处理的基本方法 。介绍了 Windows 基本
的绘图函数,主要的 GDI 对象,并且给出相应的实例 。给一个图像浏览器应用程序,介绍了
图像处理的基本知识和算法。通过对本章的阅读,读者应该了解图形绘制和图像处理的基本
原理和方法。此外,本章还给出了一些相关的小技巧。
·175 ·
…………………………………………………………Page 185……………………………………………………………
第 8 章 文件操作
第 8 章 文件操作
文件操作是操作系统提供的基本功能之一。本章将通过示例介绍在 MFC 中对文件进行
CFile 文件操作和文件对话框 3 部分内容。这 3 部分基本涵盖
操作的方法,主要包括串行化、
了 MFC 中对文件的主要操作。同时还详细地介绍各种文件操作函数的使用方法,为读者编
写功能复杂的文件处理程序提供参考。
8。1 串行化基础知识
在 Visual C++ 中使用 MFC 开发的基于文档的应用程序 。在这个框架中,数据的维护及其
显示分别由两个不同,但又彼此紧密相关的对象—文档和视图实现的。MFC 中各种自动化
代码的存在,文档视图结构在很多场合与传统的编程方式相比更有利于应用程序的编写。串
行化就是这样一个自动化过程,它使得对文档的磁盘读写操作变得简单易行。本节将详细介
绍串行化的基础知识,包括文档的基本结构、用 Serialize()函数实现串行化、与串行化相关的
类,以及在文档视图中添加串行化代码 4 个部分。
8。1。1 文档类
在文档视图结构中,文档的任务通常是对数据进行管理和维护。数据一般都被保存在文
档类的成员变量中 。而在 MFC 中,文档类通过一个称为串行化(Serialize )的过程将数据保
存到磁盘文件中或者将数据从磁盘文件中读取。文档类为数据的串行化提供了默认的支持,
并将其作为可重载函数,只需重载这些成员函数就可以为程序提供自定义的串行化支持。
文档类在文档视图结构中主要完成以下几个任务。
o 在内存中保存应用程序特定的数据,并对其进行管理,同时提供给视图类进行显示。
o 提供用于操作文档数据的接口。
o 参与写文件和读文件。通过串行化功能,文档类可以将数据从文件中读出或者写入。
o 参与打印输出。这个任务主要通