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

CxShadeButton

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (57投票s)

2001 年 5 月 18 日

CPOL

4分钟阅读

viewsIcon

556992

downloadIcon

10251

一个属主绘制的按钮类,可以为您的按钮提供专业的外观。

Sample Image - sample.jpg

引言

使用此类,您可以轻松地在几个步骤内为您的按钮提供专业的外观。无需位图资源 - 所有位图都在运行时生成。代码部分来源于 CxSkinButton 文章。目标是以最小的应用程序代码修改来替换标准的按钮、复选框和单选按钮。

  1. 将“xShadeButton.cpp”和“xShadeButton.h”添加到项目中。
  2. 在定义控件的头文件中包含“xShadeButton.h”。
  3. 为每个您想自定义的按钮创建(或编辑)一个 `CxShadeButton` 类型的成员变量。如果类向导没有显示 `CxShadeButton` 类型,请选择 `CButton` 然后手动编辑代码。
  4. 在窗口初始化中,添加 `CxShadeButton` 方法。
  5. BOOL CxShadeButtonDemoDlg::OnInitDialog()
    {
        //    ...
        m_btn1.SetTextColor(RGB(255,0,0));
        m_btn1.SetToolTipText("Button1");
        m_btn1.SetShade(SHS_DIAGSHADE,8,10,5,RGB(55,255,55));
        //    ...

CxShadeButton 类成员和操作

CxShadeButton 派生自 CButton。`BS_OWNERDRAW` 样式会自动添加,您无需在资源编辑器中设置“Owner draw”属性。您可以使用资源编辑器更改一些样式(平坦、推式、文本对齐、分组等),但目前并非所有样式都受支持。如果您在运行时更改按钮的外观,为避免闪烁,请先调用不导致无效化的函数(如 SetShadeSetIconSetFont),然后再使按钮无效,例如使用 SetWindowText,或直接使用 Invalidate

void SetShade(UINT shadeID=0, BYTE granularity=8,
              BYTE highlight=10,BYTE coloring=0,COLORREF color=0);
    生成按钮位图。
    重要
  • shadeID:可以是以下效果之一。
    • SHS_NOISE = 0
    • SHS_DIAGSHADE = 1
    • SHS_HSHADE = 2
    • SHS_VSHADE = 3
    • SHS_HBUMP = 4
    • SHS_VBUMP = 5
    • SHS_SOFTBUMP =6
    • SHS_HARDBUMP = 7
    • SHS_METAL = 8
  • granularity:此参数为按钮位图添加均匀的噪声。一个好的值是 5 到 20;0 表示禁用此效果。噪声由于隐藏了调色板的阶梯而具有积极作用。
  • highlight:设置鼠标悬停在按钮上时的突出显示级别。一个好的值是 5 到 20;0 表示禁用此效果。
  • coloring:设置要混合到按钮调色板中的 color 的百分比。该值范围可以从 0 到 100;0 表示禁用此效果。
  • color:如果 coloring 大于零,color 将与标准的按钮颜色混合。
  • 备注coloringcolor 参数应谨慎使用,以确保在所有情况下都具有良好的外观。

void SetToolTipText(CString s, CString sDown="");
    设置或更改工具提示文本。
    nice
  • s:在正常状态下显示的字符串。
  • sDown:(可选)指定当选中复选框或单选按钮时显示的第二个文本。
COLORREF SetTextColor(COLORREF new_color);
    设置或更改按钮文本颜色。返回之前的按钮文本颜色。
    nice
void SetIcon(UINT nIcon, UINT nIconAlign=BS_CENTER, UINT nIconDown=0, 
             UINT nIconHighLight=0);
    类似于 `BS_ICON` 样式。
    nice
  • nIcon:图标资源的 ID 号。
  • nIconAlign:图标对齐方式,可以是以下值之一:
    • BS_CENTER
    • BS_LEFT
    • BS_RIGHT
  • nIconDown:(可选)按钮被选中时显示的图标资源的 ID 号。
  • nIconHighLight:(可选)鼠标指针悬停在按钮上时显示的图标资源的 ID 号。
  • 备注:按钮文本会自动放置,以免图标和文本重叠。

bool SetFont(CString sFontName, long lSize=0, long 
             lWeight=400, BYTE bItalic=0, BYTE bUnderline=0);
bool SetFont(LOGFONT* pNewStyle); / LOGFONT* GetFont();
    更改文本字体。
    nice
  • sFontName:指定字体的字体名称。
  • lSize:(可选)文本高度。
  • lWeight:(可选)文本粗细范围为 0 到 1000;100=细,300=浅,400=正常,700=粗。
  • bItalic:(可选)斜体样式。
  • bUnderline:(可选)下划线样式。
  • 备注:使用 `GetFont`/`SetFont` 结合 LOGFONT 结构来获取/设置字体的完整属性。如果按钮使用默认系统字体,`GetFont` 返回 NULL。

void SetTextAlign(UINT nTextAlign=BS_CENTER);
    设置文本对齐方式。
    optional
  • nTextAlign:按钮文本对齐方式,可以是以下值之一:
    • BS_CENTER
    • BS_LEFT
    • BS_RIGHT
void SetFlat(bool bFlag);
    设置边框样式。
    optional
  • bFlag 可以是以下值:
    • FALSE = 标准 3D 边框。
    • TRUE = 平坦边框。

兼容性

  • Win95, WinNT = 是,需要 IE3.0 或更高版本。
  • Win98, WinME, W2K, WinXP = 是。

致谢

感谢所有 CodeProject 的开发者!特别感谢:

  • Milan Gardian 提供的鼠标和键盘跟踪代码。
  • Davide Calabro 提供的 CButtonST 代码片段。
  • Rainer Mangold 提供的单选按钮和复选框代码。
  • Jeremy Davis, Andre Brogli, Richard Cunday, Shanker Chandrabose, Luis, Gilad, Rui Lopes, Tom Archer, Tommy Svensson, David Scambler, Orioli Alessandro, João Filipe de Castro Ferreira, Jesper Kinnås 和 Derek Lakin 的建议、调试和支持。

发布历史

  • v1.00 - 2001/05/12
    • 基本实现和界面。
  • v1.10 - 2001/05/23
    • 添加了按钮按下时的文本偏移。
    • 修复了许多 CxDib 错误。
    • 修复了 SHS_HARDBUMP 错误。
    • 添加了图标支持。
    • 添加了文本对齐。
    • 添加了平坦样式。
  • v1.20 - 2001/06/23
    • 修复了键盘快捷键错误。
    • 添加了复选框和单选按钮功能。
    • 添加了第二个图标和第二个工具提示。
    • 用于绘制操作的内存 DC。
  • v1.30 - 2001/08/03
    • 修复了 SetIcon 错误。
    • 添加了字体支持。
  • v1.40 - 2001/09/23
    • 修复了 DrawItem()SetIcon() 中的内存泄漏错误。
    • 修复了第二个工具提示初始化错误。
    • 修复了 OnLButtonUp() 中与拖放相关的问题。
    • 添加了多行工具提示支持。
  • v1.41 - 2001/11/04
    • 修复了 SetIcon() 和析构函数中的内存泄漏错误。
    • 添加了高亮状态的第三个图标。
© . All rights reserved.