Fancy Controls






4.82/5 (30投票s)
一套新类,带来时尚的外观
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
引言
起始问题:为什么 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,我的妻子,感谢她巨大的耐心 :)
免责声明
本软件及附带文件按“原样”分发,不附带任何明示或暗示的保证。对于可能造成的损害甚至功能问题,不承担任何责任。用户在使用本软件时必须承担全部风险。
使用条款
本软件可免费用于个人用途、免费软件或商业应用程序。
最后但同样重要
想打发点时间?请访问我的 主页 并签名我的留言簿。