翻译来源: https://www.codeproject.com/Articles/1014/CxSkinButton
这个类很常见,在很多源码中都有见到。
MFC用CxSkinButton.cpp和CxSkinButton.h
之前用到过的案例:对话框背景图六种方法-PictureEx类实现对话框背景图和xSkinButton类实现按钮样式
此类并不能加载png图片,加载png图片按钮请加载png图片按钮GdipButton按钮类
一个带剪裁区域,工具提示和鼠标跟踪的皮肤按钮类
通过这个课程,您可以通过几个步骤轻松地给你的按钮皮肤:
- 将xSkinButton.cpp和xSkinButton.h添加到项目中。
- 在定义控件的头文件中包含xSkinButton.h
- 为要自定义的每个按钮创建(或编辑)成员变量
CxSkinButton
。如果类向导不显示CxSkinButton
类型,请选择CButton
然后手动编辑代码。 - 添加按钮的位图资源:
- NORMAL位图:默认按钮图像。
- DOWN位图:按下按钮图像。
- OVER位图:(可选)当鼠标在按钮上方时显示的图像。如果为NULL,则将使用NORMAL位图。
- DISABLED位图:(可选)图像为禁用状态。如果为NULL,则将使用NORMAL位图。
- FOCUS位图:(可选)用于焦点状态的图像。如果为NULL,则将使用NORMAL位图。
- MASK位图:(可选)裁剪区域。如果您不使用MASK,该按钮将是一个矩形所有者绘制控件。默认透明颜色为RGB(255,255,255)。
- 在窗口初始化中添加
CxSkinButton
方法:隐藏 复制代码BOOL CxSkinButtonDemoDlg::OnInitDialog() { // ... m_btn1.SetTextColor(RGB(255,0,0)); m_btn1.SetToolTipText("Button1"); m_btn1.SetSkin(IDB_B1NORM,IDB_B1DOWN,IDB_B1OVER,IDB_B1GRAY, 0,IDB_B1MASK,0,0,0); // ...
该
SetTextColor
和SetToolTipText
是自我解释;SetSkin
是:隐藏 复制代码void CxSkinButton::SetSkin(UINT normal,UINT down,UINT over, UINT disabled, UINT focus,UINT mask, short drawmode, short border, short margin)
- normal,down,over,disabled,focus,mask =位图资源ID
- drawmode =如果mask不为NULL,则应为0(正常); 否则你可以尝试1(拉伸)或2(平铺)。
- border = if mask不是NULL或不是矩形,这应该是0; 否则您可以尝试1在按钮周围绘制标准3D边框。
- margin = if mask不为NULL或不是矩形,这应该是0; 否则您可以尝试更改此值以在控件具有焦点时在按钮上绘制一个虚线矩形。
备注
- 自动添加BS_OWNERDRAW样式,您不需要在资源编辑器中设置“Owner draw”属性。
- 只有NORMAL和DOWN位图是必不可少的; OVER位图是一个加号。
- 如果按钮始终启用,则不需要禁用位图。您也可以使用按钮文字(自动蚀刻)显示禁用状态。
- 如果按钮是矩形,则MASK位图不是必需的。
- 对于矩形按钮,您应该设置margin参数大于0(4是一个不错的选择),或使用FOCUS位图。
- 对于矩形按钮,您可以使用'flat'位图并将border参数设置为1.在这种情况下,NORMAL和DOWN位图也可以共享相同的资源。