翻译来源:https://www.codeproject.com/Articles/5242/XColorStatic-a-colorizing-static-control

XColor Static是一个简单的基于静态框的控件,它提供字体更改,文本和背景颜色以及图标显示。

介绍

XColor Static是一种通用控件,允许在对话框中显示漂亮的文本。该演示向您展示了可能的文本和图标显示类型:

XColorstatic API

以下是完整的方法列表:CXColorStatic

 
void SetBackgroundColor(COLORREF rgb, BOOL bRedraw = TRUE);
void SetTextColor(COLORREF rgb, BOOL bRedraw = TRUE);
void SetBold(BOOL bFlag, BOOL bRedraw = TRUE);
void SetFont(LPCTSTR lpszFaceName, int nPointSize, BOOL bRedraw = TRUE);
void SetFont(LOGFONT *pLogFont, BOOL bRedraw = TRUE);
void SetFont(CFont *pFont, BOOL bRedraw = TRUE);
void SetIcon(HICON hIcon, BOOL bRedraw = TRUE);
void SetMargins(int x, int y) { m_nXMargin = x; m_nYMargin = y; }

如何使用

要将XColor Static集成到应用程序中,首先需要将以下文件添加到您的项目中:

  • XColorstatic.cpp
  • XColor static.h
  • FontSize.cpp
  • FontSize.h

然后使用资源编辑器将静态控件添加到对话框中,并使用类向导将成员变量附加到该控件。请注意,添加静态控件时,您必须将其命名为除。IDC_STATIC

接下来,包含头文件XColor static .H在对话框的头文件。然后用。现在你准备开始使用XColor Static

用法

  1. BOOL CXColorStaticTestDlg::OnInitDialog()
  2. {
  3. CDialog::OnInitDialog();
  4. // Add "About..." menu item to system menu.
  5. // IDM_ABOUTBOX must be in the system command range.
  6. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  7. ASSERT(IDM_ABOUTBOX < 0xF000);
  8. CMenu* pSysMenu = GetSystemMenu(FALSE);
  9. if (pSysMenu != NULL)
  10. {
  11. CString strAboutMenu;
  12. strAboutMenu.LoadString(IDS_ABOUTBOX);
  13. if (!strAboutMenu.IsEmpty())
  14. {
  15. pSysMenu->AppendMenu(MF_SEPARATOR);
  16. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  17. }
  18. }
  19. // Set the icon for this dialog.  The framework does this automatically
  20. //  when the application's main window is not a dialog
  21. SetIcon(m_hIcon, TRUE);         // Set big icon
  22. SetIcon(m_hIcon, FALSE);        // Set small icon
  23. m_Banner.SetTextColor(RGB(0,0,255), FALSE);
  24. m_Banner.SetBackgroundColor(RGB(155,115,255), FALSE);
  25. m_Banner.SetBold(TRUE, FALSE);
  26. m_Banner.SetFont(_T("Comic Sans MS"), 20, FALSE);
  27. HICON hIcon = AfxGetApp()->LoadIcon(IDI_SHERLOCK);
  28. m_Icon.SetIcon(hIcon);
  29. m_Icon.SetBackgroundColor(RGB(201,201,255), FALSE);
  30. m_Text1.SetWindowText(
  31. _T("To Sherlock Holmes she is always THE woman.  I have seldom heard ")
  32. _T("him mention her under any other name.  In his eyes she eclipses ")
  33. _T("and predominates the whole of her sex.  It was not that he felt ")
  34. _T("any emotion akin to love for Irene Adler."));
  35. m_Text1.SetMargins(15, 0);
  36. m_Text1.SetFont((LPCTSTR)NULL, 10, FALSE);
  37. m_Text2.SetBold(TRUE, FALSE);
  38. m_Text2.SetFont(_T("Arial"), 14, FALSE);
  39. m_Text2.SetWindowText(_T("But wait...  There's MORE!!!"));
  40. m_Text2.SetMargins(15, 0);
  41. m_Text3.SetFont((LPCTSTR)NULL, 10, FALSE);
  42. m_Text3.SetWindowText(
  43. _T("One night -- it was on the twentieth of March, 1888 -- I was ")
  44. _T("returning from a journey to a patient (for I had now returned to ")
  45. _T("civil practice), when my way led me through Baker Street.  As I ")
  46. _T("passed the well-remembered door, which must always be associated ")
  47. _T("in my mind with my wooing, and with the dark incidents of the ")
  48. _T("Study in Scarlet, I was seized with a keen desire to see Holmes ")
  49. _T("again, and to know how he was employing his extraordinary powers."));
  50. m_Text3.SetMargins(15, 0);
  51. m_Text3.SetFont((LPCTSTR)NULL, 10, FALSE);
  52. m_Text4.SetMargins(15, 0);
  53. LOGFONT lf;
  54. CFont *pFont = m_Text4.GetFont();
  55. pFont->GetLogFont(&lf);
  56. lf.lfItalic = TRUE;
  57. _tcscpy(lf.lfFaceName, _T("Verdana"));
  58. m_Text4.SetFont(&lf, FALSE);
  59. return TRUE;  // return TRUE  unless you set the focus to a control
  60. }

该软件发布到公共领域。您可以随意使用任何您喜欢的方式。如果您修改它或扩展它,请考虑发布新的代码在这里供大家分享。该软件按“原样”提供,没有明示或默示的保证。对于此软件可能导致的任何损坏或业务损失,我不承担任何责任。

修订记录

版本1.0 - 2003年10月17日

  • 首次公开发布。
 

评论和讨论

全透明背景 wlburgess 20-Oct-05 6:54 

感谢Hans为优秀的静态框控制。

透明度是我在许多演示类型Dialog Apps中的一个目标。

以前的解决方案有效,但在某些情况下需要太多的背景知识。

这是一个简单的解决方案,让文本画在已经存在的背景上。

要打开“静态”控件的“透明度”,请使用“对话框编辑器”将“透明度”的“扩展样式”复选框设置为“true” - 将“关闭”默认为具有完整背景的常规“不透明”文本。

首先在OnPaint中,成员函数的顶部现在将如下所示:
void CXColorStatic :: OnPaint()

CPaintDC dc(this); //设备上下文绘制

dc.SaveDC();

dc.SetTextColor(m_rgbText); 
if(!(GetExStyle()&
WS_EX_TRANSPARENT)) { 
dc.SetBkColor(m_rgbBackground); 
dc.SetBkMode(TRANSPARENT); 

else 

dc.SetBkMode(TRANSPARENT); 

dc.SelectObject(m_pBrush);

CRect rect; 
GetClientRect(RECT);

...(其余与以前一样)

第二个设置EraseBackground :
BOOL CXColorStatic :: OnEraseBkgnd(CDC * pDC)

if(!(GetExStyle()&WS_EX_TRANSPARENT))

CRect cr; 
GetClientRect(CR); 
pDC-> FillRect(&cr,m_pBrush); 
}

return TRUE; //的CStatic :: OnEraseBkgnd(PDC); 
}

Wayne L. Burgess 

 

译者见解:

实现透明度以上方法在属性框设置 TRANSPARENT=TRUE,这就需要一个一个控件去修改;如果是动态创建,可以增加WS_EX_TRANSPARENT,在

void CXColorStatic::PreSubclassWindow() 
{
TRACE(_T("in CXColorStatic::PreSubclassWindow\n"));
  ModifyStyleEx(0, WS_EX_TRANSPARENT);
// get current font

已修改的源码案例:http://download.csdn.net/detail/greless/9898892

http://download.csdn.net/detail/greless/9897974

http://blog.csdn.net/greless/article/category/6970425

最新文章

  1. tomcat 7 WARNING: A context path must either be an empty string or start with a &#39;/&#39; and do not end with a &#39;/&#39;. The path [/] does not meet these criteria and has been changed to []
  2. 修改订单的收货时间(MySQL)脚本
  3. nginx 隐藏版本信息
  4. CSS3-border-radius的兼容写法大全
  5. Bootstrap_标签
  6. PHP 对象和引用总结
  7. LeetCode104: Maximum Depth of Binary Tree
  8. lightoj 1021 - Painful Bases 状态压缩
  9. first move advantage_百度搜索
  10. 批量转换引擎为innodb
  11. ubuntu18.04 apt-get换国内源 阿里源 163源 清华源 中科大源
  12. Kafka的安装 -- 未完成
  13. SQL 的各种 join 用法
  14. ASP.NET Web API实践系列01,以ASP.NET Web Form方式寄宿
  15. Qt_QString.indesOf和mid测试
  16. c++ ifstream
  17. hdu 1498 50 years, 50 colors 最小点覆盖
  18. mybatis源码分析(2)-----SqlSession创建
  19. 714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
  20. HDU 5294 Tricks Device 网络流 最短路

热门文章

  1. 我眼中的c++编程总结-20150602
  2. thinkphp中如何实现无限级分类?
  3. 工具类与工具函数 —— NextPrime
  4. 【u028】数列的整除性
  5. 一个完整的Erlang应用
  6. 【codeforces 782B】The Meeting Place Cannot Be Changed
  7. Java中如何拼接sql或者其他含有变量语句
  8. hadoop 集群及hbase集群的pid文件存放位置
  9. Java易混点记录
  10. tap code —— 两个一位数字编码一个字母