• 一个字体,大小,颜色可定义的自绘静态框控件-XColorStatic 类(比较好看,一共19篇自绘文章)


    翻译来源: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。 

    用法

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


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

    修订记录

    版本1.0 - 2003年10月17日

    • 首次公开发布。
     

    评论和讨论

    一般 全透明背景 会员 wlburgess 20-Oct-05 6:54 
    给予好评
    downvote
    感谢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 "));
      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

  • 相关阅读:
    二叉排序树的建立与遍历 Anti
    SDUT ACM 2144 最小生成树,克鲁斯卡尔模板 Anti
    用STL优先队列对字符串排序 Anti
    HDU 1176 免费馅饼 水dp Anti
    SDUT ACM 2408 Pick apples 贪心+完全背包 Anti
    筛选法找素数模板 Anti
    JS获取事件的目标
    Javascript中的Prototype和Constructor
    有关于ValueOf( )和toString( )
    JavaScript Animate
  • 原文地址:https://www.cnblogs.com/findumars/p/7192181.html
Copyright © 2020-2023  润新知