友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VC语言6.0程序设计从入门到精通-第50章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




中调用它的成员函数完成绘图操作。 

                                 

    使用完毕后应该及时删除构造的 CDC  对象。Windows  限制了可使用的设备上下文的数 

量,如果删除一个设备上下文对象失败,将会占用一小部分内存,直到程序退出。要确保设 

备上下文对象被删除,最容易的方法是在堆栈上构造对象。  

    也可通过      CWnd::GetDC() 成员函数来获得设备上下文指针,这种情况下必须调用 

ReleaseDC 函数来释放设备环境。  



7。3。2 GDI 对象  



    Windows 的 GDI 对象都是从基类 CGdiObject 派生而来。可以通过调用 GDI 派生类的构 

造函数来创建 GDI 对象。GDI 对象如下:  

    o  CBitmap ;  

    o  CBrush ;  

    o  CPen ;  

    o  CFont ;  

    o  CRgn ;  

    o  CPalette 。  



 ·166 ·  


…………………………………………………………Page 176……………………………………………………………

                                                                                          第 7 章     图形图像  



7。4  画笔和画刷  



      画笔(CPen )和画刷(CBrush )是最常用的两个  GDI  对象。本节通过两个实例,详细 

介绍这两个对象的使用方法。  

       

       



7。4。1  画笔  



实例 7…1 :画笔使用实例实例。源代码在光盘中“07实例 7…1CpuUsage ”目录下。  



      1.创建程序  



      下面通过动态显示  CPU                 的使用记录的例子介绍画笔的使用方法。利用                                    Visual  C++ 的 

AppWizard 创建一个基于对话框的应用程序 CpuUsage,为对话框添加一个静态文本框控件和 

一个 group box 控件。为对话框类 CCpuUsageDlg 添加成员变量,如表 7…1 所示。  



      表 7…1                             CCpuUsageDlg 的成员变量表    



           成员变量                          类型                                    作用  

 m_btnView                       CButton                 显示区域  

 m_strCpuUsage                   CString                 显示字符串  

 m_UsageHistory                  int''                   CPU 使用记录  

 m_timer                         int                     计时器  

 m_Usage                         CCpuUsage               测试 Cpu 使用率类  



      2 .编写代码  



      (1)初始化对话框  

      修改 CCpuUsageDlg 的成员函数 OnInitDialog,对变量做初始化。代码如下:  



     BOOL CCpuUsageDlg::OnInitDialog()  



      {  



           CDialog::OnInitDialog();  



           // Add 〃About。。。〃 menu item to system menu。  



       



           // IDM_ABOUTBOX must be in the system mand range。  



           ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  



           ASSERT(IDM_ABOUTBOX 《 0xF000);  



       



           CMenu* pSysMenu = GetSystemMenu(FALSE);  



           if (pSysMenu != NULL)  



           {  



                CString strAboutMenu;  



                                                                                                     ·167 ·  


…………………………………………………………Page 177……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



                   strAboutMenu。LoadString(IDS_ABOUTBOX);  



                   if (!strAboutMenu。IsEmpty())  



                   {  



                          pSysMenu…》AppendMenu(MF_SEPARATOR);  



                          pSysMenu…》AppendMenu(MF_STRING; IDM_ABOUTBOX; strAboutMenu);  



                   }  



             }  



        



             // Set the icon for this dialog。    The framework does this automatically  



             //    when the application’s main window is not a dialog  



              



             //  设置窗口总在最前  



             ::SetWindowPos(this…》GetSafeHwnd(); CWnd::wndTopMost; 0; 0; 0; 0; SWP_NOSIZE);  



              



             SetIcon(m_hIcon; TRUE);                     // Set big icon  



             SetIcon(m_hIcon; FALSE);              // Set small icon  



              



             //  初始化使用记录数组  



             memset(m_UsageHistory; 0; MAXTIMES*sizeof(int));  



        



             //  设置定时器  



             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);  



              
返回目录 上一页 下一页 回到顶部 0 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!