优雅而实用的用户界面按钮

UI及其底层代码用于按钮,通常被忽视,需要不必要的开销。为了解决这些问题,开发了一种简单的方式来增强按钮:ButtonFly - 第一个全功能美观按钮类。

ButtonFly是在Secured Globe, Inc.开发的一个独特类。ButtonFly可以节省大量的开销和编码时间,因为一个按钮可以处理四幅图像:

  • 鼠标悬停
  • 按下
  • 未按下(正常)
  • 禁用

到目前为止,处理不同的按钮状态需要更多的代码和开销。使用ButtonFly类,有一个易于处理的全能按钮。下面的gif图像显示了一个按钮的四种不同状态,所有这些都包含在一个类中。

ButtonFly具有DPI(每英寸点数)感知,因此程序员可以决定其大小。选定的大小将用于任何显示器的分辨率。

使用代码

要使用代码,需要采取几个步骤。

1. 定义图像

为了定义显示的图像,使用以下函数:

void SG_ButtonFly::SetImages(UINT nNormalId, UINT nHoverId, UINT nPressId, UINT nDisableId, LPCTSTR lpszResourceType) { ReleaseImages(); LoadImageFromResource(m_images[Normal], nNormalId, lpszResourceType); LoadImageFromResource(m_images[Hover], nHoverId, lpszResourceType); LoadImageFromResource(m_images[Press], nPressId, lpszResourceType); nDisableId = nDisableId == 0 ? nNormalId : nDisableId; LoadImageFromResource(m_images[Disable], nDisableId, lpszResourceType); // AutoSize(); }

通过发送四个资源ID来调用SetImages。

2. 初始化

通常希望调用两个函数来添加SG_ButtonFly到MFC对话框。这些调用将在OnInitDIalog()函数内进行,所以可以使用this来指向当前范围。

例如,如果想添加一个用于导出数据为.txt的按钮:

m_btnExportToTxt.SetImages(IDB_PNG_EXPORT, IDB_PNG_EXPORT2, IDB_PNG_EXPORT3, IDB_PNG_EXPORT4); m_btnExportToTxt.SetParent(this);

3. 定义

需要在对话框的头文件中定义按钮,希望添加按钮。

SG_ButtonFly m_btnExportToTxt; // (需要包括 “SG_ButtonFly.h”。)

每个添加到按钮的图像在几个地方定义:

在resource.h中,定义资源ID:

#define IDB_PNG_EXPORT 131

为四个图像中的每一个都这样做。在资源文件(.rc文件)中,添加:

IDB_PNG_EXPORT PNG "res\\export.png"

这意味着在源代码路径的res文件夹中放置了一个名为“export.png”的.png图像。

可以在这里阅读更多关于资源标识符的信息。

4. 四种状态

定义了一个枚举来支持按钮的四种可能状态:

enum State { Normal = 0, Hover, Press, Disable, };

Normal是按钮在没有发生任何事情时的外观。Hover是用鼠标悬停按钮时发生的情况。Press是点击按钮时发生的情况。Disable是按钮被禁用时的外观。

5. 向按钮添加标题

可能还想向按钮添加标题(文本)。为此,使用SetCaptionText()。

m_btnExportToTxt.SetCaptionText(L"This is my caption");

6. 使用更少的图像

如果希望按钮只有一个图像,或者有两个图像,只需在初始化时使用相同的图像。例如,可以只使用一个图像IDB_PNG_EXPORT用于所有四种状态。

m_btnExportToTxt.SetImages(IDB_PNG_EXPORT, IDB_PNG_EXPORT, IDB_PNG_EXPORT, IDB_PNG_EXPORT);
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485