设为首页 加入收藏

TOP

11.6.1 信息提示框的设计与实现(2)
2013-10-07 14:34:13 来源: 作者: 【 】 浏览:58
Tags:11.6.1 信息 提示 设计 实现

11.6.1  信息提示框的设计与实现(2)

HideCaret()函数将屏幕上的插入标记清除。实际上是隐藏插入标记,并不是删除其当前形状或使插入点无效。它的原型如下:

  1. B00L HideCaret(  
  2.     HWND hWnd  
  3. );  

函数有一个参数hWnd,标识有插入标记的窗口。如果该参数为NULL,那么HideCaret()函数搜索当前任务,以发现拥有插入标记的窗口。

第13行的OnEraseBkgnd()函数实现了绘制消息框背景图片的功能。实现如下:

  1. 01  BOOL CMyEdit::OnEraseBkgnd(CDC* pDC)   
  2. 02  {  
  3. 03      this->SetSel(0,0);                      //取消文字复选  
  4. 04      CBitmap bitmap;  
  5. 05      bitmap.LoadBitmap(IDB_BITMAP1);         //设置位图背景  
  6. 06      BITMAP bmp;  
  7. 07      bitmap.GetBitmap(&bmp);                 //获取位图信息  
  8. 08      CDC dcCompatible;  
  9. 09      dcCompatible.CreateCompatibleDC(pDC);   //创建内存设备的兼容性  
  10. 10      dcCompatible.SelectObject(&bitmap); //将背景位图载入内存设备  
  11. 11      CRect rect;  
  12. 12      GetClientRect(&rect);                   //获取信息框的大小  
  13. 13      //绘制背景位图  
  14. 14      pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible, 0,0,  
  15.         SRCCOPY);  
  16. 15      return TRUE;  
  17. 16  }  

【代码解析】

这个函数的实现比较简单,首先载入背景位图IDB_BITMAP1,并获取位图信息。然后创建一个与当前设备兼容的内存设备,并将背景位图载入内存设备。最后将内存设备上的信息复制到当前设备上,利用双缓冲实现绘制信息框位图的功能。

第14行的CtlColor()函数实现设置透明背景色的功能。实现如下:

  1. 01  HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor)   
  2. 02  {  
  3. 03      pDC->SetBkMode(TRANSPARENT);        //设置文字背景透明  
  4. 04      return NULL;  
  5. 05  }  

SetBkMode()函数设置背景色模式,MFC中定义的函数原型如下:
  1. int SetBkMode(   
  2.     int nBkMode   
  3. );  

函数有一个参数nBkMode,它是要设置的模式,其值可以为OPAQUE和TRANSPARENT。如果在输出字符串时发现存在背景色,这样的输出是破坏背景的。那么需要使用什么方法来保持背景不变,而又能输出特定颜色的字符串呢?比如按钮的文字颜色是黑色的而背景是灰色的,这就需要使用SetBkMode()函数来设置DrawText()函数的输出方式,显示设备共有两种输出方式,分别是OPAQUE和TRANSPARENT。OPAQUE方式是用当前背景画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景就是其绘制对象的背景。

(3)为截屏窗体添加一个编辑框,并利用向导为该编辑框添加一个CMyEdit类型的关联变量m_eTip,如图11.26所示。

(4)在截屏类中添加一个函数SetTip(),它将根据实际信息设置信息框上的显示信息,实现如下:

 
图11.26  为编辑框添加自定义类型的关联变量

  1. 01  void CCatchDlg::SetTip()  
  2. 02  {  
  3. 03      CPoint pt;  
  4. 04      GetCursorPos(&pt);  
  5. 05      CClientDC dc(this);   
  6. 06      //得到当前R、G、B各像素值  
  7. 07      COLORREF color;  
  8. 08      color=dc.GetPixel(pt);  
  9. 09      BYTE rValue,gValue,bValue;  
  10. 10      rValue=GetRValue(color);  
  11. 11      gValue=GetGValue(color);  
  12. 12      bValue=GetGValue(color);  
  13. 13      //按格式排放字符串  
  14. 14      CString string;  
  15. 15      CString strTemp;  
  16. 16      string.Format("\r\n\r\n\r\n •当前像素RGB (%d,%d,%d)\r\n",rValue,  
  17.         gValue,bValue);  
  18. 17      if(!m_bDraw&&!m_bFirstDraw)  
  19. 18      {  
  20. 19          strTemp="\r\n •按下鼠标左键不放选择截取\r\n 范围\r\n\r\n   
  21. 20                         •按下Esc键或鼠标右键双击退出";  
  22. 21      }  
  23. 22      else  
  24. 23      if(m_bDraw&&m_bFirstDraw)  
  25. 24      {  
  26. 25          strTemp="\r\n •松开鼠标左键确定截取范围\r\n\r\n •按下Esc键退出";  
  27. 26      }  
  28. 27      else  
  29. 28      if(m_bFirstDraw)  
  30. 29      {  
  31. 30          strTemp="\r\n •用鼠标左键调整截取范围的\r\n 大小和位置\r\n\r\n  
  32. 31                      •截取范围内双击鼠标左键保存\r\n 图像,结束操作\r\n\r\n  
  33. 32                      •单击鼠标右键重新选择";  
  34. 33      }  
  35. 34      string+=strTemp;  
  36. 35      m_eTip.SetWindowText(string);       //显示到编缉框中,操作提示窗口  
  37. 36  }  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.6.1 信息提示框的设计与实现(.. 下一篇1.1.1 VC++ 6.0集成开发环境菜单..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: