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

Fancy Controls

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (30投票s)

2001 年 11 月 24 日

CPOL

14分钟阅读

viewsIcon

300524

downloadIcon

9516

一套新类,带来时尚的外观

HMXShapedDialog HMXDialog with Bitmap HMXDialog with Color
HMXShapedFormView HMXFormView with Bitmap HMXFormView with Color

引言

起始问题:为什么 VB 和 Delphi 程序员可以轻松使用时尚控件?

我编写这些类是因为我的客户对与普通的控件、对话框和表单交互感到厌倦:总是相同的字体、相同的颜色、总是矩形形状……我同意这一点。

如您所知,仅使用标准的 MFC 类,很难修改 UI 的外观,因此我决定为所有新程序创建自己快速实现的时尚外观。当然,这些不是您离不开的类。但是,我确定,有时用户认为一个程序如果拥有彩色外观会非常有用…… [XP 教的!?-我的个人观点-]

这里是这些类的描述和一些使用技巧。

此套件包含以下类

CHMXStatic 替换 CStatic,让您可以更好地控制静态文本
CHMXEdit 替换 CEdit,改进编辑框行为
CHMXNumEdit 也替换 CEdit,但它专门用于数字输入
CHMXCheckBox 替换复选框类
CHMXComboBox 替换 CComboBox,包括下拉列表和下拉框
CHMXListBox 替换 CListBox
CHMXListCtrl 替换任何视图中的 CListCtrl
CHMXDialog 一个带颜色和图像作为背景的新 CDialog
CHMXShapedDialog 厌倦了使用矩形对话框?
CHMXFormView 替换 CFormView。您的 MDI 应用程序将不再一样。
CHMXShapedFormView 替换 CFormView。您的 MDI 应用程序将拥有全新外观。

有人可能会问我:“单选按钮呢?还有按钮呢?”

我的回答是:“抱歉,我讨厌单选按钮,所以……按钮:我可以推荐 Davide Calabro 的 CButtonST v3.4 (MFC Flat buttons) & CShadeButtonST 或 Davide Pizzolato 的 CxSkinButton & CxShadeButton…… [意大利人做得更好:)) ]”。

如果您有自己喜欢的 `CMySpecialEdit`(派生自 `CEdit` 类)并希望将其功能与 `CHMXEdit` 的功能集成,您所要做的就是让 `CHMXEdit` 派生自 `CMySpecialEdit` 而不是 `CEdit`。在大多数情况下,这就足够了。

如何使用 CHMXStatic

这是该组中最简单的类。它允许您更好地控制静态文本。

要使用一个控件作为 `CHMXStatic`,您必须将其声明为 `CHMXStatic` 而不是 `CStatic`。为此,请搜索您创建的控件的声明,并将 `CStatic` 替换为 `CHMXStatic`。

别忘了添加...

#include "HMXControls.h"

...在使用它之前。

使用此控件,您可以

设置文本颜色 SetTextClr(clr) clr 代表您想使用的颜色
获取文本颜色 GetTextClr(clr) clr 将保留控件的文本颜色
设置背景颜色 SetBkClr(clr) clr 代表您想使用的颜色
获取背景颜色 GetBkClr(clr) clr 将保留控件的背景颜色
设置透明度 SetTransparent(bTransparent) bTransparent 代表透明度标志;如果控件是透明的,则不绘制背景
获取透明度 GetTransparent(bTransparent) bTransparent 将保留透明度状态
设置文本字体 SetTextFont(nHeight, bBold, bItalic, sFaceName) nHeight, bBold, bItalic, sFaceName 分别代表字体高度(磅)、粗体标志、斜体标志和字体名称
设置文本字体 SetTextFont(LogFont) LogFont 代表一个 LOGFONT 结构
获取文本字体 GetTextFont(lpLogFont) lpLogFont 代表指向 LOGFONT 结构的指针
设置文本字体高度 SetTextFontHeight(nHeight) nHeight 代表字体高度(磅)
设置文本字体粗体 SetTextFontBold(bBold) bBold 代表粗体样式的标志
设置文本字体斜体 SetTextFontItalic(bItalic) bItalic 代表斜体样式的标志
设置文本字体名称 SetTextFontFaceName(sFaceName) sFaceName 代表字体名称
设置字体旋转 SetFontRotation(nAngle) nAngle 代表旋转角度
设置工具提示文本 SetToolTipText(sToolTip, bActivate) sToolTip, bActivate 分别代表工具提示文本和激活标志
激活工具提示 ActivateToolTip(bActivate) bActivate 代表激活标志

当然,如果您正在寻找一个“功能齐全”的 `CStatic` 类,我可以推荐 CLabel [感谢 Almond 先生,您的工作太棒了]。

如何使用 CHMXEdit

此类替换 `CEdit` 类。它允许您控制编辑框的外观。如您所见,我创建了一个特殊的方法:`EnableEditing`;这样,此类控件在与 `EnableWindow` 或 `SetReadOnly` 一起使用时比 `CEdit` 表现更好。

要使用一个控件作为 `CHMXEdit`,您必须将其声明为 `CHMXEdit` 而不是 `CEdit`。为此,请参阅 `CHMXStatic` 部分。

别忘了...

#include "HMXControls.h"

...在使用它之前。

使用此控件,您可以

设置文本颜色 SetTextClr(clr) clr 代表您想使用的颜色
获取文本颜色 GetTextClr(clr) clr 将保留控件的文本颜色
设置获得焦点时的文本颜色 SetTextClrFocus(clr) clr 代表控件获得焦点时您想使用的颜色
获取获得焦点时的文本颜色 GetTextClrFocus(clr) clr 将保留控件获得焦点时的文本颜色
设置背景颜色 SetBkClr(clr) clr 代表您想使用的颜色
获取背景颜色 GetBkClr(clr) clr 将保留控件的背景颜色
设置获得焦点时的背景颜色 SetBkClrFocus(clr) clr 代表控件获得焦点时您想使用的颜色
获取获得焦点时的背景颜色 GetBkClrFocus(clr) clr 将保留控件获得焦点时的背景颜色
设置文本字体 SetTextFont(nHeight, bBold, bItalic, sFaceName) nHeight, bBold, bItalic, sFaceName 分别代表字体高度(磅)、粗体标志、斜体标志和字体名称
设置文本字体 SetTextFont(LogFont) LogFont 代表一个 LOGFONT 结构
获取文本字体 GetTextFont(lpLogFont) lpLogFont 代表指向 LOGFONT 结构的指针
设置文本字体高度 SetTextFontHeight(nHeight) nHeight 代表字体高度(磅)
设置文本字体粗体 SetTextFontBold(bBold) bBold 代表粗体样式的标志
设置文本字体斜体 SetTextFontItalic(bItalic) bItalic 代表斜体样式的标志
设置文本字体名称 SetTextFontFaceName(sFaceName) sFaceName 代表字体名称
设置工具提示文本 SetToolTipText(sToolTip, bActivate) sToolTip, bActivate 分别代表工具提示文本和激活标志
激活工具提示 ActivateToolTip(bActivate) bActivate 代表激活标志
启用编辑 EnableEditing(bEditing) bEditing 代表编辑标志

如何使用 CHMXNumEdit

此类依赖于 `CHMXEdit`,并且如果您有数字输入,则必须使用它。创建后,此控件允许您只输入数字、小数点、加号、减号和 'e'。

我实现了一个解决方案来解决“本地化与小数点问题”。在普通的 `CEdit` 控件中,如果您输入 `.`,您会得到(当然)一个点。如果您尝试使用 `Calc`(Windows 计算器)执行相同的操作,当您输入 `.` 时,您会得到小数点(如控制面板中所定义)。Excel 也是如此。我的意思是,只用数字键盘输入数字非常方便,尤其是对于使用逗号作为小数点的欧洲人。此类允许您获得此有用功能。要完成操作,您必须使用……

setlocale( LC_ALL, ".OCP" );

……这样,您就告知您的程序使用控制面板中的区域设置:每次按下 `.` 时,您都会得到自己的小数点。

要使用一个控件作为 `CHMXNumEdit`,您必须将其声明为 `CHMXNumEdit` 而不是 `CEdit`。请参阅前面的部分。

如您所知……

#include "HMXControls.h"

...在使用它之前。

它派生自 `CHMXEdit`,因此您可以参考 `CHMXEdit` 部分。使用此控件,您还可以

设置工程格式 SetEngFormat(bEngFormat) bEngFormat 代表工程格式的标志
获取工程格式 GetEngFormat(bEngFormat) bEngFormat 将保留使用的格式

如何使用 CHMXCheckBox

此类通过改进标准的 `CButton` 类,允许您控制复选框的外观。要将复选框用作 `CHMXCheckBox`,您必须将其声明为 `CHMXCheckBox` 而不是 `CButton`。

别忘了添加...

#include "HMXControls.h"

...在使用它之前。

使用此控件,您可以

设置文本颜色 SetTextClr(clr) clr 代表您想使用的颜色
获取文本颜色 GetTextClr(clr) clr 将保留控件的文本颜色
设置背景颜色 SetBkClr(clr) clr 代表您想使用的颜色
获取背景颜色 GetBkClr(clr) clr 将保留控件的背景颜色
设置透明度 SetTransparent(bTransparent) bTransparent 代表透明度标志;如果控件是透明的,则不绘制背景
获取透明度 GetTransparent(bTransparent) bTransparent 将保留透明度状态
设置文本字体 SetTextFont(nHeight, bBold, bItalic, sFaceName) nHeight, bBold, bItalic, sFaceName 分别代表字体高度(磅)、粗体标志、斜体标志和字体名称
设置文本字体 SetTextFont(LogFont) LogFont 代表一个 LOGFONT 结构
获取文本字体 GetTextFont(lpLogFont) lpLogFont 代表指向 LOGFONT 结构的指针
设置文本字体高度 SetTextFontHeight(nHeight) nHeight 代表字体高度(磅)
设置文本字体粗体 SetTextFontBold(bBold) bBold 代表粗体样式的标志
设置文本字体斜体 SetTextFontItalic(bItalic) bItalic 代表斜体样式的标志
设置文本字体名称 SetTextFontFaceName(sFaceName) sFaceName 代表字体名称
设置工具提示文本 SetToolTipText(sToolTip, bActivate) sToolTip, bActivate 分别代表工具提示文本和激活标志
激活工具提示 ActivateToolTip(bActivate) bActivate 代表激活标志
启用编辑 EnableEditing(bEditing) bEditing 代表编辑标志

如何使用 CHMXComboBox

此类替换 `CCombobox` 类,包括下拉列表和下拉框。它允许您控制组合框的外观。要将控件用作 `CHMXComboBox`,您必须将其声明为 `CHMXComboBox` 而不是 `CComboBox`。

别忘了...

#include "HMXControls.h"

...在使用它之前。

使用此控件,您可以

设置文本颜色 SetTextClr(clr) clr 代表您想使用的颜色
获取文本颜色 GetTextClr(clr) clr 将保留控件的文本颜色
设置背景颜色 SetBkClr(clr) clr 代表您想使用的颜色
获取背景颜色 GetBkClr(clr) clr 将保留控件的背景颜色
设置文本字体 SetTextFont(nHeight, bBold, bItalic, sFaceName) nHeight, bBold, bItalic, sFaceName 分别代表字体高度(磅)、粗体标志、斜体标志和字体名称
设置文本字体 SetTextFont(LogFont) LogFont 代表一个 LOGFONT 结构
获取文本字体 GetTextFont(lpLogFont) lpLogFont 代表指向 LOGFONT 结构的指针
设置文本字体高度 SetTextFontHeight(nHeight) nHeight 代表字体高度(磅)
设置文本字体粗体 SetTextFontBold(bBold) bBold 代表粗体样式的标志
设置文本字体斜体 SetTextFontItalic(bItalic) bItalic 代表斜体样式的标志
设置文本字体名称 SetTextFontFaceName(sFaceName) sFaceName 代表字体名称
设置工具提示文本 SetToolTipText(sToolTip, bActivate) sToolTip, bActivate 分别代表工具提示文本和激活标志
激活工具提示 ActivateToolTip(bActivate) bActivate 代表激活标志
启用编辑 EnableEditing(bEditing) bEditing 代表编辑标志

如何使用 CHMXListBox

如果您想使用列表框并设置字体、颜色和背景颜色,则必须使用 `CHMXListBox` 类。

别忘了...

#include "HMXControls.h"

...在使用它之前。

使用此控件,您可以

设置文本颜色 SetTextClr(clr) clr 代表您想使用的颜色
获取文本颜色 GetTextClr(clr) clr 将保留控件的文本颜色
设置背景颜色 SetBkClr(clr) clr 代表您想使用的颜色
获取背景颜色 GetBkClr(clr) clr 将保留控件的背景颜色
设置文本字体 SetTextFont(nHeight, bBold, bItalic, sFaceName) nHeight, bBold, bItalic, sFaceName 分别代表字体高度(磅)、粗体标志、斜体标志和字体名称
设置文本字体 SetTextFont(LogFont) LogFont 代表一个 LOGFONT 结构
获取文本字体 GetTextFont(lpLogFont) lpLogFont 代表指向 LOGFONT 结构的指针
设置文本字体高度 SetTextFontHeight(nHeight) nHeight 代表字体高度(磅)
设置文本字体粗体 SetTextFontBold(bBold) bBold 代表粗体样式的标志
设置文本字体斜体 SetTextFontItalic(bItalic) bItalic 代表斜体样式的标志
设置文本字体名称 SetTextFontFaceName(sFaceName) sFaceName 代表字体名称
设置工具提示文本 SetToolTipText(sToolTip, bActivate) sToolTip, bActivate 分别代表工具提示文本和激活标志
激活工具提示 ActivateToolTip(bActivate) bActivate 代表激活标志
启用编辑 EnableEditing(bEditing) bEditing 代表编辑标志

如何使用 CHMXListCtrl

参考 `CHMXListBox`。

如何使用 CHMXDialog

使用此类,您可以创建具有彩色背景或位图背景的对话框。使用 BMP 作为背景,可以使图像居中、平铺或拉伸。

此类允许您

设置背景颜色 SetBkClr(clr) clr 是对话框背景的颜色
获取背景颜色 GetBkClr(clr) clr 将保留对话框背景颜色
设置背景位图 SetBitmap(sFileName, nStyle) sFileName 是包含图像的文件,nStyle 代表图像绘制方法的样式:居中、平铺或拉伸
设置背景位图 SetBitmap(nResource, nStyle) nResource 是包含图像的资源 ID,nStyle 代表图像绘制方法的样式

要使用此对话框,您必须像通常使用 Visual Studio 一样,通过资源编辑器设计自己的对话框。如果您打算为标签(静态)、复选框和编辑框使用自定义文本,请记住增加控件的大小;组合框会自动增加其大小。现在,使用 `ClassWizard`,创建您的 *MyDialog.cpp* 和 *MyDialog.h*(您的类名可以是 `CMyDialog`)。`ClassWizard` 帮助您创建与控件关联的变量,例如 `CEdit` 控件的 `m_edtText`,`CStatic` 控件的 `m_lblLabel` 等等。

为了让 `CHMXDialog` 派生类正常工作,请进行以下更改

  • 打开 *MyDialog.h*
  • 类型
    #include "HMXControls.h"
    在类定义之前,
  • 在类定义中将 `CDialog` 替换为 `CHMXDialog`
  • 如果需要,请使用此转换表转换此头文件中的每个控件
    新建 注释
    CStatic CHMXStatic  
    CEdit CHMXEdit 用于字母和数字编辑框
    CEdit CHMXNumEdit 仅数字编辑框
    CButton CHMXCheckBox 不适用于按钮!!仅适用于复选框
    CComboBox CHMXComboBox 下拉框和下拉列表
    CListBox CHMXListBox  
    CListCtrl CHMXListCtrl  
  • 必须重写 `OnInitDialog` 以修改对话框和控件的妆容
  • 打开 *MyDialog.cpp*
  • 进行以下更改
    其中 新建
    构造函数 CDialog(

    CMyDialog::IDD, pParent)

    CHMXDialog(

    CMyDialog::IDD, pParent)

    DoDataExchange CDialog::DoDataExchange(pDX); CHMXDialog:

    DoDataExchange(pDX);

    BEGIN_MESSAGE_MAP BEGIN_MESSAGE_MAP(CMyDialog, CDialog) BEGIN_MESSAGE_MAP(CMyDialog, CHMXDialog)
    OnInitDialog CDialog::OnInitDialog(); CHMXDialog:

    OnInitDialog();

如何使用 CHMXShapedDialog

顾名思义,使用此类,您可以创建具有自定义形状的对话框,该形状取决于所选的位图文件。

此类允许您通过类似以下的方法设置位图作为“遮罩”

SetRegionFile( sFileName, clrTransp )

其中 `sFileName` 代表包含 BMP 图像的文件,`clrTransp` 是必须用作透明色的颜色。

重要提示:此对话框必须没有标题栏和边框。

如何使用 CHMXFormView

此类允许您

设置背景颜色 SetBkClr(clr) clr 是对话框背景的颜色
获取背景颜色 GetBkClr(clr) clr 将保留对话框背景颜色
设置背景位图 SetBitmap(sFileName, nStyle) sFileName 是包含图像的文件,nStyle 代表图像绘制方法的样式:居中、平铺或拉伸
设置背景位图 SetBitmap(nResource, nStyle) nResource 是包含图像的资源 ID,nStyle 代表图像绘制方法的样式

使用 Visual Studio 资源编辑器,设计您的表单,并通过 Class wizard 创建您的 `CMyFormView`。

为了让 `CHMXFormView` 派生类正常工作,请进行以下更改

  • 打开 *MyFormView.h*
  • 类型
    #include "HMXControls.h"
    在类定义之前
  • 在类定义中将 `CFormView` 替换为 `CHMXFormView`
  • 如果需要,请使用此转换表转换此头文件中的每个控件
    新建 备注
    CStatic CHMXStatic  
    CEdit CHMXEdit 用于字母和数字编辑框
    CEdit CHMXNumEdit 仅数字编辑框
    CButton CHMXCheckBox 不适用于按钮!!仅适用于复选框
    CComboBox CHMXComboBox 下拉框和下拉列表
    CListBox CHMXListBox  
    CListCtrl CHMXListCtrl  
  • 必须重写 `OnInitalUpdate` 以修改表单和控件的妆容
  • 打开 MyFormView.cpp*
  • 进行以下更改
    其中 新建
    构造函数 CFormView(CMyFormView::IDD) CHMXFormView(CMyFormView::IDD)
    DoDataExchange CFormView:

    DoDataExchange(pDX);

    CHMXFormView(CMyFormView::IDD)
    BEGIN_MESSAGE_MAP BEGIN_MESSAGE_MAP(CMyFormView, CFormView) BEGIN_MESSAGE_MAP(CMyFormView, CHMXFormView)
    OnInitialUpdate CFormView:

    OnInitalUpdate();

    CHMXFormView:

    OnInitalUpdate();

在 `CMyFormView::OnInitialUpdate()` 方法中,在 `CHMXFormView::OnInitalUpdate()` **之前**,我建议键入

	GetParentFrame()->RecalcLayout();
	ResizeParentToFit(FALSE);

这样,表单将具有正确的尺寸。

如何使用 CHMXShapedFormView

这一节有点棘手……如果您遵循这些说明,您就可以取得正确的结果。使用资源编辑器设计您的表单,并通过 Class Wizard 创建您自己的 `CMyShapedFormView`。现在请按照以下步骤操作

  • 打开主文件 *MyProject.h*
  • 添加 `extern CString g_sMyShapedFormViewBMPFile;`
  • 添加 `extern COLORREF g_rgbMyShapedFormViewRGBTransp;`
  • 打开主文件 *MyProject.cpp*
  • 键入 `#include "HMXcontrols.h"`
  • 在文档模板注册中,将 `RUNTIME_CLASS(CChildFrame)` 替换为 `RUNTIME_CLASS(CHMXChildFrame)`
  • 在 `InitInstance` 中添加 `g_sMyShapedFormViewBMPFile = "MyImage.BMP";`
  • 在 `InitInstance` 中添加 `g_rgbMyShapedFormViewRGBTransp = RGB( x, y, z);`
  • 通过资源编辑器设计表单
  • 使用 Class Wizard 创建类 `CMyShapedFormView`(派生自 `CFormView`)
  • 打开 *MyShapedFormView.h*
  • 键入 `#include "HMXcontrols.h"`
  • 将 `class CMyShapedFormView : public CFormView` 替换为 `class CMyShapedFormView : public CHMXShapedFormView`
  • 打开 *MyShapedFormView.cpp*
  • 添加 `CString g_sMyShapedFormViewBMPFile;`
  • 添加 `COLORREF g_rgbMyShapedFormViewRGBTransp;`
  • 将 `CMyShapedFormView(CMyShapedFormView::IDD )` 替换为 `CMyShapedFormView(CMyShapedFormView::IDD, g_sMyShapedFormViewBMPFile, g_rgbMyShapedFormViewRGBTransp )`
  • 将 `CFormView::DoDataExchange(pDX)` 替换为 `CHMXShapedFormView::DoDataExchange(pDX)`
  • 将 `BEGIN_MESSAGE_MAP(CMyShapedFormView, CFormView)` 替换为 `BEGIN_MESSAGE_MAP(CMyShapedFormView, CHMXShapedFormView)`
  • 在 `OnInitialUpdate:` 中添加 `GetParentFrame()->RecalcLayout();` & `ResizeParentToFit(FALSE);`

特别感谢

  • Davide Calabro 和他的 CButtonST
  • Norm Almond 和他的 CLabel
  • David Gallardo Llopis 和他的 AnyForm 项目
  • Jörg König 和他的 CDIBitmap & CBmpPalette
  • Donatella,我的妻子,感谢她巨大的耐心 :)

免责声明

本软件及附带文件按“原样”分发,不附带任何明示或暗示的保证。对于可能造成的损害甚至功能问题,不承担任何责任。用户在使用本软件时必须承担全部风险。

使用条款

本软件可免费用于个人用途、免费软件或商业应用程序。

最后但同样重要

想打发点时间?请访问我的 主页 并签名我的留言簿。

© . All rights reserved.