MFC中设置文本的颜色

转载 2013年12月03日 23:55:45

改变static的颜色和设为背景透明可以在父窗口的WM_CTLCOLOR中实现(即HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor))

将static设为背景透明时,改变该控件的文本将会出现文字重叠的现象。

 

其实设置为透明背景也就是在static重画背景时返回一个空的刷子而已,所以你改变文本并没有改变上次残留的背景,从而导致重叠现象。

为了解决这个问题,我们可以让父窗口重绘此区域。

 

以下是我的解决方法:

1. 从CStatic继承一个类CStaticEx

2. 增加WM_CTLCOLOR的消息反射(把很多事情留给父窗口处理并不是一件推荐的事,就让CStaticEx自己处理这件事,这样还可以不影响到其它的static)

3. 处理WM_SETTEXT,当文本改变时,重绘父窗口的该控件所在区域

  1. // StaticEx.cpp : implementation file  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include "StaticEx.h"  
  6.   
  7.   
  8. // CStaticEx  
  9.   
  10. IMPLEMENT_DYNAMIC(CStaticEx, CStatic)  
  11.   
  12. CStaticEx::CStaticEx()  
  13. {  
  14.   
  15. }  
  16.   
  17. CStaticEx::~CStaticEx()  
  18. {  
  19. }  
  20.   
  21.   
  22. BEGIN_MESSAGE_MAP(CStaticEx, CStatic)  
  23.  ON_WM_CTLCOLOR_REFLECT()  
  24. END_MESSAGE_MAP()  
  25.   
  26.   
  27.   
  28. // CStaticEx message handlers  
  29.   
  30.   
  31.   
  32. HBRUSH CStaticEx::CtlColor(CDC* pDC, UINT /*nCtlColor*/)  
  33. {  
  34.  // TODO:  Change any attributes of the DC here  
  35.  pDC->SetTextColor(RGB(255, 0, 0));//设置文字的颜色     
  36.     pDC->SetBkMode(TRANSPARENT);//设置透明     
  37.     return (HBRUSH)::GetStockObject(NULL_BRUSH);  
  38.   
  39.  // TODO:  Return a non-NULL brush if the parent's handler should not be called  
  40.  //return NULL;  
  41. }  
  42.   
  43. LRESULT CStaticEx::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)  
  44. {  
  45.  // TODO: Add your specialized code here and/or call the base class  
  46.  if(message==WM_SETTEXT) {  
  47.   CRect rect;  
  48.   GetWindowRect(&rect);  
  49.   CWnd* pParent = GetParent();  
  50.   if(pParent) {  
  51.    pParent->ScreenToClient(&rect);  
  52.    pParent->InvalidateRect(&rect);  
  53.   }  
  54.  }  
  55.   
  56.  return CStatic::DefWindowProc(message, wParam, lParam);  
  57. }  

 

  1. // StaticEx.h : header file  
  2. //  
  3.   
  4. #pragma once  
  5.   
  6.   
  7. // CStaticEx  
  8.   
  9. class CStaticEx : public CStatic  
  10. {  
  11.     DECLARE_DYNAMIC(CStaticEx)  
  12.   
  13. public:  
  14.     CStaticEx();  
  15.     virtual ~CStaticEx();  
  16.   
  17. protected:  
  18.     virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);  
  19.   
  20. protected:  
  21.     DECLARE_MESSAGE_MAP()  
  22.     afx_msg HBRUSH CtlColor(CDC* pDC, UINT /*nCtlColor*/);  
  23. };  

相关文章推荐

MFC 可以设置背景色、字体、字体颜色、透明背景的 Static 静态文本控件

MFC库里没有符合这个条件的控件,于是我自己写了一个,初步测试有效。 注:可以设置透明背景,但还不能做到透明度设置(如50%透明度)         如果设置了背景色,就不保留透明背景        ...

MFC:如和利用C++使得输出文本颜色、字体多变

处理具有不同字体设置的文本输出的C++程序设计

VC MFC中修改STATIC的文本颜色和文本字体等

1. 打开资源视图。 2. 双击打开STATIC所在的对话框。 3. 修改STATIC的ID属性,这里假设为IDC_TEXT1。 4.为对话框添加类,假设为CMyDialog. ...

MFC对话框美化(文本颜色、字体、背景颜色修改)

MFC默认界面太寒碜我已经无力吐槽了,最近稍微做了一些美化的内容,主要是对话框背景颜色的修改,控件文字大小、字体、颜色的修改,多种配色使得对话框风格活泼不少。修改前后对比图: 代...

设置文本颜色和字体API

  • 2011年11月03日 17:12
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC中设置文本的颜色
举报原因:
原因补充:

(最多只允许输入30个字)