65.9K
CodeProject 正在变化。 阅读更多。
Home

用于在对话框中生成帮助文本的舒适自定义文本控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.11/5 (2投票s)

2011年5月25日

CPOL

3分钟阅读

viewsIcon

21550

downloadIcon

1347

扩展 CStatic,使其具有图像、框架、阴影和使用自定义字体的功能

引言

在我自己的一个项目中,我一直在寻找一种对话框控件,我可以在项目的对话框中使用它来显示对话框上方的帮助文本。 由于我没有找到合适的控件,所以我自己编写了它,现在我想与社区分享。 如果你想看到该控件的实际效果,请下载演示项目。 如果你想使用该控件,请下载新类的源代码。

HelpStatic.jpg

背景

CHelpStatic 派生自 CStatic,并通过在左侧绘制图像、自定义字体、框架、背景色/文本颜色和阴影来扩展其外观。 如果您使用图像,则图像会自动调整大小以适应控件的大小。

您还可以定义文本和框架侧面之间的像素距离。 这使得帮助文本更易于阅读。

该控件类也可以仅用作颜色静态控件,只需设置文本颜色即可。

Using the Code

以下功能可用。 请注意,您不必使用任何这些功能,但如果使用,外观将得到扩展。

  • void SetColorBack(COLORREF rgb);

    设置背景颜色。 如果不使用,则使用对话框的 windows 标准颜色 (COLOR_3DFACE)。

  • void SetColorText(COLORREF rgb);

    设置文本的颜色。 如果不使用,则使用按钮的 windows 标准颜色 (COLOR_BTNTEXT)。

  • void SetFont(LPCTSTR czFace, int iSize=10);

    设置所需字体的字体和大小。 如果不使用,则使用 windows 标准字体 (DEFAULT_GUI_FONT)。

  • void SetMargin(int iPixel);

    设置您希望在框架侧面和绘图文本之间保持的像素数。 如果不使用,则不提供距离。 如果要禁用边距,请将其设置为 0

  • void SetText(LPCTSTR czText);

    设置控件的文本。

  • void LoadPicture(int iResID);

    从资源加载图像并激活在控件左侧绘制图像。 控件的文本会自动移到图像的右侧。

  • void EnableFrame(BOOL bEnable,COLORREF rgb=RGB(0,0,0));

    启用或禁用在控件周围绘制框架。 如果启用框架,您还可以定义框架的颜色。

  • void EnableShadow(BOOL bEnable=TRUE);

    在控件的底部和右侧启用或禁用阴影。 阴影将像您在资源中定义的那样绘制到控件的大小中。 这意味着,如果使用阴影,则整个控件的扩展与没有阴影时相同。

有关功能的详细描述,请查看源代码中有关这些功能的注释。

如何实施

  1. 在您的对话框中,为您想要的每个帮助文本创建一个 static 文本控件元素,并将其放置在所需的位置(例如,在对话框的顶部)。
  2. 将这两个文件添加到您的项目中
    • HelpStatic.cpp
    • HelpStatic.h
  3. #include "HelpStatic.h" 添加到您的对话框头文件。
  4. 为您在对话框资源中创建的每个插入的控件声明一个 CHelpStatic 实例。

    示例

    CHelpStatic m_help;
  5. 在您的 OnInitDialog() 中,为每个 CHelpStatic 成员变量添加一个 SubclassDlgItem()

    示例

    m_help.SubclassDlgItem(IDC_STATICHELP,this);

    或者,您可以使用 VS 中的向导为 static-ctrl 添加一个成员变量。 在变量类型字段中,键入 "CHelpStatic"。 然后,向导会在 DoDataExchange() 中创建一个条目。

  6. OnInitDialog() 中,使用上述功能中的一个或多个初始化每个帮助控件。

    示例

    m_help.SetText(czText);
    m_help.SetColorBack(RGB(255,128,0));
    m_help.SetColorText(RGB(0,0,255));
    m_help.LoadPicture(IDB_LOVECRAFT);
    m_help.SetFont("Arial",10);
    m_help.SetMargin(5);
    m_help.EnableFrame(TRUE);
    m_help.EnableShadow();

如果您不使用任何这些功能,则控件将以默认设置显示(就像普通的 CStatic 对象一样)。

历史

  • 2011 年 5 月 18 日:首次发布
  • 2011 年 5 月 20 日:更新了文章
© . All rights reserved.