友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

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 开发的基于文档的应用程序 。在这个框
返回目录 上一页 下一页 回到顶部 1 2
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!