友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第37部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
// 设置定时器
m_timer = SetTimer(1; 500; 0);
return TRUE; // return TRUE unless you set the focus to a control
}
利用 API 函数 SetTimer 启动定时器,函数原型如下:
UINT SetTimer( UINT nIDEvent; UINT nElapse; void (CALLBACK EXPORT* lpfnTimer)(HWND; UINT;
UINT; DWORD) );
o nIDEvent :非 0 定时器标志;
o nElapse :时间间隔;
o lpfnTimer :处理函数。
当起动定时器后,每间隔 nElapse 时间间隔,系统就会给应用程序发送 WM_TIMER 消
息,通常应用程序在 OnTimer 中响应这个消息。当程序退出时,需要调用 KillTimer 删除定
时器,释放系统资源,它的函数原型如下:
BOOL KillTimer( int nIDEvent );
o nIDEvent :调用 SetTimer 的返回值。
(2 )响应 OnTimer 消息
在初始化过程中,设置的时间间隔为 500 毫秒。即每隔 500 毫秒,测试一次 CPU 的使用
率。响应 OnTimer 消息,代码如下:
·168 ·
…………………………………………………………Page 178……………………………………………………………
第 7 章 图形图像
void CCpuUsageDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int per;
// 得到当前 CPU 的使用率
per = m_Usage。GetCpuUsage();
// 计数
if(times 《 MAXTIMES)
times ++;
// 更新 CPU 使用记录数组
for(int i=0; iSelectObject(&newbrush);
pDC…》Rectangle(rect);
newbrush。DeleteObject();
pDC…》SelectObject(oldbrush);
// 绿色画笔; 绘制曲线
curpen。CreatePen(PS_SOLID; 2; RGB(0; 255; 0));
oldpen = pDC…》SelectObject(&curpen);
pDC…》MoveTo(rect。left; rect。bottom);
// 用线段近似曲线
for(int i=0; iLineTo(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 开发的基于文档的应用程序 。在这个框
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!