八宝书库 > 文学其他电子书 > VC语言6.0程序设计从入门到精通 >

第41部分

VC语言6.0程序设计从入门到精通-第41部分

小说: VC语言6.0程序设计从入门到精通 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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  参与打印输出。这个任务主要通过视图类访问文档进行。  

   o  处理跟文档有关的命令消息。这些命令包括菜单项、工具栏按钮或快捷键生成的命令。 

    默认情况下,文档类使用序列化处理“文件”菜单的“保存”和“另存为”命令。还 

    可以为其他跟文档相关的自定义命令添加相应的处理函数。  

   为了完成上述的任务,文档类的基类 CDocument 提供了下列一些成员函数。  



   1.处理文档数据与文件相关的操作的函数  



   (1)GetTitle()和 SetTitle()  

   这两个函数作为一组,前者用于获取文档的标题,后者用于设置文档标题。原型为:  


…………………………………………………………Page 186……………………………………………………………

                                                                                            第 8 章    文件操作  



      const CString& GetTitle( ) const;  



     virtual void SetTitle(  



           LPCTSTR lpszTitle    



      );  



      (2 )GetPathName()和 SetPathName()  

      这两个函数用于处理文档保存的路径 。前者用于获得文档保存路径的字符串,后者设置 

该路径。原型为:  



      const CString& GetPathName( ) const;  



     virtual void SetPathName(  



           LPCTSTR lpszPathName;  



           BOOL bAddToMRU = TRUE    



      );  



      参数 bAddToMRU 用于确定是否将路径添加到最近打开的文档列表中。  



      2 .GetDocTemplate()  



      该函数用于获得文档模板对象的指针。原型为:  



      CDocTemplate* GetDocTemplate( ) const;  



      3 .处理文档类和视图类的关系的函数  



      (1)AddView()  

      该函数用于向与文档相关联的视图列表中添加指定的视图。原型为:  



     void AddView(  



           CView* pView    



      );  



      参数 pView 指向需要添加的视图对象。  



      (2 )RemoveView()  

      该函数用于从文档类的视图列表中删除指定视图。原型为:  



     void RemoveView(  



           CView* pView    



      );  



      参数 pView 指向需要删除的视图对象。  



      (3 )UpdateAllView()  

      该函数用于通知所有视图进行重绘。一般情况下,当文档数据被修改后,应当调用这个

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的