CxShadeButton






4.90/5 (57投票s)
一个属主绘制的按钮类,可以为您的按钮提供专业的外观。
引言
使用此类,您可以轻松地在几个步骤内为您的按钮提供专业的外观。无需位图资源 - 所有位图都在运行时生成。代码部分来源于 CxSkinButton 文章。目标是以最小的应用程序代码修改来替换标准的按钮、复选框和单选按钮。
- 将“xShadeButton.cpp”和“xShadeButton.h”添加到项目中。
- 在定义控件的头文件中包含“xShadeButton.h”。
- 为每个您想自定义的按钮创建(或编辑)一个 `CxShadeButton` 类型的成员变量。如果类向导没有显示 `CxShadeButton` 类型,请选择 `CButton` 然后手动编辑代码。
- 在窗口初始化中,添加 `CxShadeButton` 方法。
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”属性。您可以使用资源编辑器更改一些样式(平坦、推式、文本对齐、分组等),但目前并非所有样式都受支持。如果您在运行时更改按钮的外观,为避免闪烁,请先调用不导致无效化的函数(如 SetShade
、SetIcon
或 SetFont
),然后再使按钮无效,例如使用 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
将与标准的按钮颜色混合。
生成按钮位图。 |
重要
|
备注:coloring
和 color
参数应谨慎使用,以确保在所有情况下都具有良好的外观。
void SetToolTipText(CString s, CString sDown="");
s
:在正常状态下显示的字符串。sDown
:(可选)指定当选中复选框或单选按钮时显示的第二个文本。
设置或更改工具提示文本。 |
nice
|
COLORREF SetTextColor(COLORREF new_color);
设置或更改按钮文本颜色。返回之前的按钮文本颜色。 |
nice
|
void SetIcon(UINT nIcon, UINT nIconAlign=BS_CENTER, UINT nIconDown=0, UINT nIconHighLight=0);
nIcon
:图标资源的 ID 号。nIconAlign
:图标对齐方式,可以是以下值之一:BS_CENTER
BS_LEFT
BS_RIGHT
nIconDown
:(可选)按钮被选中时显示的图标资源的 ID 号。nIconHighLight
:(可选)鼠标指针悬停在按钮上时显示的图标资源的 ID 号。
类似于 `BS_ICON` 样式。 |
nice
|
备注:按钮文本会自动放置,以免图标和文本重叠。
bool SetFont(CString sFontName, long lSize=0, long
lWeight=400, BYTE bItalic=0, BYTE bUnderline=0);
bool SetFont(LOGFONT* pNewStyle); / LOGFONT* GetFont();
sFontName
:指定字体的字体名称。lSize
:(可选)文本高度。lWeight
:(可选)文本粗细范围为 0 到 1000;100=细,300=浅,400=正常,700=粗。bItalic
:(可选)斜体样式。bUnderline
:(可选)下划线样式。
更改文本字体。 |
nice
|
备注:使用 `GetFont`/`SetFont` 结合 LOGFONT 结构来获取/设置字体的完整属性。如果按钮使用默认系统字体,`GetFont` 返回 NULL。
void SetTextAlign(UINT nTextAlign=BS_CENTER);
nTextAlign
:按钮文本对齐方式,可以是以下值之一:BS_CENTER
BS_LEFT
BS_RIGHT
设置文本对齐方式。 |
optional
|
void SetFlat(bool bFlag);
bFlag
可以是以下值:FALSE
= 标准 3D 边框。TRUE
= 平坦边框。
设置边框样式。 |
optional
|
兼容性
- 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()
和析构函数中的内存泄漏错误。 - 添加了高亮状态的第三个图标。