MFC CButtonST 在你的程序中如何使用CButtonST类

Posted VIPWTL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC CButtonST 在你的程序中如何使用CButtonST类相关的知识,希望对你有一定的参考价值。

http://www.vckbase.com/module/articleContent.php?id=1135

 

首先在你的工程中加入如下文件:

1
2
BtnST.h
BtnST.cpp

从v3.5版本开始,CButtonST支持使用BCMenu类创建菜单。为了能够使用BCMenu,你必须在 BtnST.h中加入下面二行:

1
2
#define BTNST_USE_BCMENU
#include "BCMenu.h"

当然,你也必须在你的工程文件中加入下面的头文件:

1
2
BCMenu.h
BCMenu.cpp

注意:当 BCMenu 使参数可用时,与用SetNenu的方法是不同的! 从v3.6版本开始, CbuttonST可以在特殊的按钮播放声音。为了能够让它播放声音要在 BtnST.h 中加入:

1
#define BTNST_USE_SOUND

这样是为了使用SetSound 方法。用静态方法创建一个 CButtonST 用对话框编辑器中建一个标准的button,例如IDOK(你不需在自己动手创建),你可以用一个变量来创建这个button:

1
CButtonST m_btnOk;

现在你可以把这个 button 和 CbuttonST 连接在一起。在你的基于对话框的程序,在OnInitDialog:

1
2
3
4
5
6
7
8
9
10
11
// Call the base-class method
CDialog::OnInitDialog();
 
// Create the IDOK button
m_btnOk.SubclassDlgItem(IDOK, this);
Or in your DoDataExchange:
// Call the base method
CDialog::DoDataExchange(pDX);
 
// Create the IDOK button
DDX_Control(pDX, IDOK, m_btnOk);

用动态方法创建一个CButtonST 在人的程序中,为button创建一个变量。注意,这个变量的类型是指针:

1
CButtonST* m_pbtnOk;

现在创建button。在你的基于对话框的程序,在OnInitDialog:

1
2
3
4
5
6
7
8
9
10
// Call the base-class method
CDialog::OnInitDialog();
 
// Create the IDOK button
m_pbtnOk = new CButtonST;
m_pbtnOk->Create(_T("&Ok"),
                    WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP,
                    CRect(10, 10, 200, 100), this, IDOK);
// Set the same font of the application
m_pbtnOk->SetFont(GetFont());

记住销毁这个指针,否则将会导致内存泄漏.这个也可以容易的实现,例如,在你的类中销毁它:

1
if (m_pbtnOk) delete m_pbtnOk;

类的方法:

1
SetIcon(using multi-size resources)

给你的button指定图标。任何本来就有的图标或位图将会被删除。

参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Parameters:
//     [IN]   nIconIn
//            图标资源的ID,当你的鼠标放在按钮上显示该图标.如果为空,则将删除任何图标。
//     [IN]   nCxDesiredIn
//           指定加载图标的宽度,像素
//     [IN]   nCyDesiredIn
//           指定加载图标的高度,像素
//     [IN]   nIconOut
//            图标资源的ID,当你的鼠标在不在按钮内时,显示图标.可以为空.
//            如果指定这个参数的值为 BTNST_AUTO_GRAY (cast to int)第二个图标将从 nIconIn 自动地创建,
//            同时改变灰度级.
//            如果指定这个参数的值为 BTNST_AUTO_DARKER (cast to int)第二个图标将从 nIconIn 自动地创建,
//            灰度级为它的25%的.
//     [IN]   nCxDesiredOut
//           指定加载图标的宽度,像素
//     [IN]   nCyDesiredOut
//           指定加载图标的高度,像素
//
// 返回值:
//      BTNST_OK
//       函数成功执行
//      BTNST_INVALIDRESOURCE
//          加载指定资源失败
//
DWORD SetIcon(int nIconIn, int nCxDesiredIn, int nCyDesiredIn,
              int nIconOut = NULL, int nCxDesiredOut = 0, int nCyDesiredOut = 0)
 
 
SetIcon (using resources)

给你的button指定图标. 任何本来就有的图标或位图将会被删除.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Parameters:
//     [IN]   nIconIn
//            图标资源的ID,当你的鼠标放在按钮上显示该图标.如果为空,则将删除任何图标。
//     [IN]   nIconOut
//            图标资源的ID,当你的鼠标在不在按钮内时,显示图标.可以为空.
//            如果指定这个参数的值为 BTNST_AUTO_GRAY (cast to int)第二个图标将从 nIconIn 自动地创建,
//            同时改变灰度级。如果指定这个参数的值为 BTNST_AUTO_DARKER (cast to int)第二个图标将从
//            nIconIn 自动地创建,灰度级为它的25%的.
//返回值:
//      BTNST_OK
//        函数成功执行
//      BTNST_INVALIDRESOURCE
//          加载指定资源失败
//
DWORD SetIcon(int nIconIn, int nIconOut = NULL)
 
 
SetIcon (using handles)

给你的button指定图标. 任何本来就有的图标或位图将会被删除.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Parameters:
//     [IN]   hIconIn
//            图标的句柄,鼠标放在按钮上显示该图标.如果为空,则将删除任何图标。.
//     [IN]   hIconOut
//            图标的句柄,当你的鼠标在不在按钮内时,显示图标.可以为空.
//            如果指定这个参数的值为 BTNST_AUTO_GRAY (cast to int)第二个图标将从 nIconIn 自动地创建,
//            同时改变灰度级。如果指定这个参数的值为 BTNST_AUTO_DARKER (cast to int)第二个图标将从
              nIconIn 自动地创建,灰度级为它的25%的.
//返回值:
//      BTNST_OK
//     函数成功执行
//      BTNST_INVALIDRESOURCE
//          加载指定资源失败
//
DWORD SetIcon(HICON hIconIn, HICON hIconOut = NULL)
 
 
SetBitmaps (using resources)

给你的button指定位图. 任何本来就有的图标或位图将会被删除.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Parameters:
//     [IN]   nBitmapIn
//          位图资源的ID,当你的鼠标放在按钮上显示该位图.如果为空,则将删除任何位图.
//     [IN]   crTransColorIn
//            颜色(inside nBitmapIn)将被用于透明色.
//     [IN]   nBitmapOut
//           位图资源的ID,当你的鼠标在不在按钮内时,显示位图.可以为空
//     [IN]   crTransColorOut
//           颜色(inside nBitmapOut)将被用于透明色.
 
// 返回值:
//     BTNST_OK
//        函数成功执行
//     BTNST_INVALIDRESOURCE
//      加载指定资源失败
//     BTNST_FAILEDMASK
//        创建mask bitmap失败
//
DWORD SetBitmaps(int nBitmapIn,
                 COLORREF crTransColorIn,
                 int nBitmapOut = NULL,
                 COLORREF crTransColorOut = 0)
 
SetBitmaps (using handles)

给你的button指定位图. 任何本来就有的图标或位图将会被删除.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Parameters:
//     [IN]   hBitmapIn
//          位图资源的句柄,当你的鼠标放在按钮上显示该位图.如果为空,则将删除任何位图.
//     [IN]   crTransColorIn
//            颜色(inside nBitmapIn)将被用于透明色.
//     [IN]   hBitmapOut
//            位图资源的句柄,当你的鼠标在不在按钮内时,显示位图.可以为空
//     [IN]   crTransColorOut
//            颜色(inside nBitmapOut)将被用于透明色.
//
// 返回值:
//     BTNST_OK
//       函数成功执行
//     BTNST_INVALIDRESOURCE
//      加载指定资源失败
//     BTNST_FAILEDMASK
//        创建mask bitmap失败
//
DWORD SetBitmaps(HBITMAP hBitmapIn,
        COLORREF crTransColorIn,
        HBITMAP hBitmapOut = NULL,
        COLORREF crTransColorOut = 0)
 
 
SetFlat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
设置button为一个标准平滑的样式 // Parameters:
//     [IN]   bFlat
//            如果为TRUE按钮是平滑的样式否则为标准的样式.缺省为TRUE。
//     [IN]   bRepaint
//            如果为TRUE 将被重置
//返回值:
//     BTNST_OK
//         函数成功执行
//
DWORD SetFlat(BOOL bFlat = TRUE, BOOL bRepaint = TRUE)
 
 
SetAlign
设置icon/bitmap各text 之间的绑定方式.
// Parameters:
//     [IN]   byAlign
//            绑定方式.可以是下面的值:
//            ST_ALIGN_HORIZ          Icon/bitmap 在左, text 在右
//            ST_ALIGN_VERT           Icon/bitmap 在上, text  在下
//            ST_ALIGN_HORIZ_RIGHT    Icon/bitmap 在右, text 在左
//            ST_ALIGN_OVERLAP        Icon/bitmap 和 text 同一位置
//            缺省为 ST_ALIGN_HORIZ.
//     [IN]   bRepaint
//           如果为TRUE 将被重置
//
// 返回值:
//     BTNST_OK
//        函数成功执行
//     BTNST_INVALIDALIGN
//        绑定失败.
//
DWORD SetAlign(BYTE byAlign, BOOL bRepaint = TRUE)
 
 
SetTextAlign

在text内设置不同的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Parameters:
//     [IN]   byTextAlign
//            绑定方式.可以是下面的值:
//            ST_TEXTALIGN_CENTER_VCENTER       水平,垂直,中心
//            ST_TEXTALIGN_LEFT_VCENTER         靠左,垂直,中心
 
//            缺省为ST_TEXTALIGN_CENTER_VCENTER
//            ST_TEXTALIGN_RIGHT_VCENTER        靠右,垂直,中心
//            但在checkboxes 或 radiobuttons 中缺省为ST_TEXTALIGN_LEFT_VCENTER.
//     [IN]   bRepaint
//            如果为TRUE 将被重置
//
// 返回值:
//     BTNST_OK
//        函数成功执行
//     BTNST_INVALIDALIGN
//        绑定失败.
//
DWORD SetTextAlign(BYTE byTextAlign, BOOL bRepaint = TRUE)
 
 
SetPressedStyle

设置下压方式.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Parameters:
//     [IN]   byStyle
//           下压方式,可以是下面的值:
//            BTNST_PRESSED_LEFTRIGHT    从左到右         BTNST_PRESSED_TOPBOTTOM    从上到下
//            缺省为 BTNST_PRESSED_LEFTRIGHT.
//     [IN]   bRepaint
//            如果为TRUE 将被重置
//
//返回值:
//     BTNST_OK
//       函数成功执行
//     BTNST_INVALIDPRESSEDSTYLE
//        下压方式不支持.
//
DWORD SetPressedStyle(BYTE byStyle, BOOL bRepaint = TRUE)
 
 
SetCheck

设置checkbox状态.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
button 必须是一个 checkbox.
// Parameters:
//     [IN]   nCheck
//            1 表示选中.
//            0 表示没有选中
//     [IN]   bRepaint
//        如果为TRUE 将被重置
//
// 返回值:
//     BTNST_OK
//       函数成功执行.
//
DWORD SetCheck(int nCheck, BOOL bRepaint = TRUE)
 
 
GetCheck

返回当前checkbox状态. button 必须是一个 checkbox.

1
2
3
4
5
6
7
8
9
//返回值:
//     当前checkbox状态.
//        1 被选中
//        0 没有被选中或button不是一个checkbox.
//
int GetCheck()
 
 
SetDefaultColors

设置缺省颜色值

1
2
3
4
5
6
7
8
9
10
11
12
// Parameters:
//     [IN]   bRepaint
//            如果为TRUE 将被重置
//
//返回值:
//     BTNST_OK
//        函数成功执行
//
DWORD SetDefaultColors(BOOL bRepaint = TRUE)
 
 
SetColor

设置特殊状态下的颜色值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Parameters:
//     [IN]   byColorIndex
//            要设置的颜色值的索引,可以是下面的值:
//            BTNST_COLOR_BK_IN       鼠标滑过时背景色
//            BTNST_COLOR_FG_IN       鼠标滑过时文本色      
//            BTNST_COLOR_BK_OUT      鼠标不在按钮内的背景色
//            BTNST_COLOR_FG_OUT      鼠标不在按钮内的背景色
//            BTNST_COLOR_BK_FOCUS    焦点在按钮上,背景色
//            BTNST_COLOR_FG_FOCUS    焦点在按钮上,文本色
//     [IN]   crColor
//            新颜色
//     [IN]   bRepaint
//            如果为TRUE 将被重置
//
//返回值:
//     BTNST_OK
//        函数成功执行.
//     BTNST_INVALIDINDEX
//        错误的植.
//
DWORD SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint = TRUE)
 
 
GetColor

返回特殊状态下的颜色值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Parameters:
//     [IN]   byColorIndex
//            颜色值索引
//     [OUT]  crpColor
//            指向想要查询的COLORREF.
//
//返回值:
//     BTNST_OK
//        函数成功执行.
//     BTNST_INVALIDINDEX
//        错误的植.
//
DWORD GetColor(BYTE byColorIndex, COLORREF* crpColor)
 
 
OffsetColor

该函数用于设置RGB值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Parameters:
//     [IN]   byColorIndex
//            设置的颜色值的索引.
//            看SetColor函数中颜色列表.
//     [IN]   shOffsetColor
//             -255到255之间
//     [IN]   bRepaint
//            如果为TRUE 将被重置
//
// 返回值:
//     BTNST_OK
//        函数成功执行.
//     BTNST_INVALIDINDEX
//        错误的植.
//     BTNST_BADPARAM
//       超出范围
//
DWORD OffsetColor(BYTE byColorIndex, short shOffset, BOOL bRepaint = TRUE)

以上是关于MFC CButtonST 在你的程序中如何使用CButtonST类的主要内容,如果未能解决你的问题,请参考以下文章

MFC如何添加自定义控件

CButtonST v3.9 (MFC Flat buttons)

如何将已经设置好的VC MFC 矩形按钮改成圆形 工程的基类是CView

MFC调用窗口失败,很崩溃的问题

VC6 如何调用MFC类

在MFC中如何在拆分按钮控件的BCN_DROPDOWN事件上显示列表框