CButtonST的使用

CButtonST是功能强大的按钮类,通过它可以实现多样化、美观的按钮控件。

一、CButtonST类

1、使用方法:通过MFC类向导(常用)或动态创建(Create)

         在MFC对话框模板中添加“按钮资源”,在模板对应的对话框类中添加CButtonST成员,在类的DataExchange方法中添加DDX_Control相关,最后在OnInitDialog中添加风格设置代码;

另外一种最近发现的方法:添加“按钮资源”,添加CButtonST  m_btn成员之后,在OnInitDialog中首先调用m_btn.SubclassDlgItem( IDC_BUTTON1, this),然后设定风格;

        其实,通过MFC的DDX_Control设置和通过SubclassDlgItem是一回事,都是使用MFC中的SUBCLASSING技术,使新风格控件(CButtonST)的窗口过程替换掉基类(CButton)的窗口过程,从而可以使用新风格控件的属性和方法。

2、颜色设置

        可以设置六种颜色:通过枚举标识:

BTNST_COLOR_BK_IN:鼠标在内部时的背景颜色

BTNST_COLOR_FG_IN:  鼠标在内部时的文本颜色

BTNST_COLOR_BK_OUT:鼠标在外部时的背景颜色

BTNST_COLOR_FG_OUT:鼠标在外部时的文本颜色

BTNST_COLOR_BK_FOCUS:当按钮获得焦点时的背景颜色

BTNST_COLOR_FG_FOCUS:当按钮获得焦点是的文本颜色

可以通过以下函数设置颜色:

        (1)、DWORD SetDefaultColors(BOOL bRepaint = TRUE)  ;// 设置默认颜色

          参数: bRepaint:重绘标记

          返回值:BTNST_OK

          作用:将字体颜色都设置为COLOR_BTNTEXT,通过::GetSysColor(COLOR_BTNTEXT)指定。将背景色都设置为COLOR_BTNFACE,通过::GetSysColor(COLOR_BTNFACE)指定。

注:介绍一下CButtonST中用到的返回值含义:

BTNST_OK                                           0

BTNST_INVALIDRESOURCE              1

BTNST_FAILEDMASK                          2

BTNST_INVALIDINDEX                        3

BTNST_INVALIDALIGN                        4

BTNST_BADPARAM 5

BTNST_INVALIDPRESSEDSTYLE      6

(2)、DWORD GetColor(BYTE byColorIndex, COLORREF* crpColor);  //获取指定的颜色

参数:byColorIndex ,六种颜色枚举之一,指定要获取的颜色

           crpColor,作为输出参数,返回获取的颜色;

返回值:BTNST_OK

(3)、DWORD SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint = TRUE); //设置指定的颜色

参数: byColorIndex,颜色索引

            crColor,输入参数,指定的颜色值

            bRepaint:重绘标记

(4)、DWORD OffsetColor(BYTE byColorIndex, short shOffset, BOOL bRepaint) ;//通过偏移来调节颜色,该函数很方便使颜色变浅或变深

参数:byColorIndex:颜色索引

           shOffset:颜色偏移值,该值会让RGB分量都增加相同的偏移量,如偏移值大于零,能够调节到的最亮状态是最高颜色分量为255;若偏移值小于零,能够调节的最暗状态是使最低颜色分量等于0.

           bRepaint:重绘标记


3、状态设置(仅对单选按钮有效,如果不是单选按钮,以下函数无意义)

(1)、int GetCheck() ;//获得CheckBox的状态

 (2)、DWORD SetCheck(int nCheck, BOOL bRepaint = TRUE);//设置CheckBox的状态

4、设置图标

(1)、DWORD SetIcon(int nIconIn, int nCxDesiredIn, int nCyDesiredIn, int nIconOut = NULL, int nCxDesiredOut = 0, int nCyDesiredOut = 0);
DWORD SetIcon(int nIconIn, int nIconOut = NULL);
DWORD SetIcon(HICON hIconIn, HICON hIconOut = NULL);

参数:nIconIn,hIconIn,标识当鼠标在按钮上时,显示的图标;

           nIconout, hIconOut标识当鼠标在按钮外面时,显示的图标;

注意:当nIconout指定为BTNST_AUTO_GRAY时,当鼠标在按钮外面时,显示的图标是鼠标在按钮上时的图标的“变灰”效果。指定为BTNST_AUTO_DARKER时,是“降低15%”灰度效果。

          nCxDesiredIn,nCyDesiredIn指定第一幅图标的像素宽度和高度;

          nCxDesiredOut, nCyDesiredOut指定第二副图标的像素宽度和高度;

例子:

        m_btn.SetIcon( IDI_ICON4);

        m_btn.SetIcon( IDI_ICON4, BTNST_ANTO_GRAY);

        m_btn.SetIcon( IDI_ICON4, BTNST_ANTO_DARKER);

        m_btn.SetIcon( IDI_ICON4, IDI_ICON5);

        m_btn.SetIcon( IDI_ICON4, 32, 32, IDI_ICON4, 16, 16);

5、设置文字与ICON(或Bitmap)的对齐方式

         DWORD SetAlign(BYTE byAlign, BOOL bRepaint = TRUE);

         参数:byAlign,指定对齐风格,可以是以下枚举:(默认是ST_ALIGN_HORIZ

                     ST_ALIGN_HORIZ          Icon/bitmap 在left,  text在right

                     ST_ALIGN_VERT            Icon/bitmap在top,   text在bottom

                     ST_ALIGN_HORIZ_RIGHT   Icon/bitmap在right, text在left

                     ST_ALIGN_OVERLAP        Icon/bitmap与text在相同位置

                 bRepaint,重绘标记

6、设置气泡提示

void SetTooltipText(int nText, BOOL bActivate = TRUE);
void SetTooltipText(LPCTSTR lpszText, BOOL bActivate = TRUE);

参数:nText:气泡提示文本,字符串资源ID;

           lpszText:气泡提示文本

           bActive:当为TRUE时,气泡提示创建时即激活,FALSE时,创建时不激活。

void ActivateTooltip(BOOL bEnable = TRUE);//enable或disable Tooltip功能

DWORD EnableBalloonTooltip();//开启气泡风格提示框,该函数必须在任何SetTooltipText函数调用之前调用。

例子:

m_btn5.SetTooltipText("http://cn.bing.com/", TRUE );

7、设置URL

DWORD SetURL(LPCTSTR lpszURL = NULL); //设置超链接

例如:m_btn5.SetURL("http://cn.bing.com/");点击按钮就会在浏览器中打开该网址。


8、设置位图

DWORD SetBitmaps(int nBitmapIn, COLORREF crTransColorIn, int nBitmapOut = NULL, COLORREF crTransColorOut = 0);

DWORD SetBitmaps(HBITMAP hBitmapIn, COLORREF crTransColorIn, HBITMAP hBitmapOut = NULL, COLORREF crTransColorOut = 0);

参数:nBitmapIn, hBitmapIn,指定当鼠标移动到按钮上时,显示的位图

          nBitmapOut, hBitmapOut,指定当鼠标在按钮外面时,显示的位图

          crTransColorIn,指定用于代替BitmapIn的透明色

          crTransColorOut,指定用于代替Bitmapout的透明色。

9、设置菜单

#ifdef BTNST_USE_BCMENU
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bWinXPStyle = TRUE, UINT nToolbarID =        NULL, CSize sizeToolbarIcon = CSize(16, 16), COLORREF crToolbarBk = RGB(255, 0, 255), BOOL bRepaint = TRUE);
#else
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bRepaint = TRUE);
#endif
DWORD SetMenuCallback(HWND hWnd, UINT nMessage, LPARAM lParam = 0);

10、设置为平面按钮( 平面式简约风格按钮)

DWORD SetFlat(BOOL bFlat = TRUE, BOOL bRepaint = TRUE);

参数:bFlat,为TRUE,表示按钮将拥有flatStyle,FAlSE;表示拥有standard风格

           bRepaint:重绘标记


11、根据Icon的形状设置按钮的形状

void SizeToContent();//设置按钮的大小与Image一致,为达到最佳效果,IN image与Out Image应该保持一样大小。

12、设置透明

void DrawTransparent(BOOL bRepaint = FALSE); // 设置透明模式,操作不可逆,另外代码注释解释说,若非真的需要,不要使用透明模式,因为透明模式会产生按钮背景的一份Copy,带来不必要的内存和额外开销。

       参数:bRepaint:重绘标记


13、设置光标

DWORD SetBtnCursor(int nCursorId = NULL, BOOL bRepaint = TRUE);//设置当鼠标在按钮之上时显示的光标

       参数:nCursordId,光标资源ID,   bRepaint,重绘标记

14、设置声音

#ifdef BTNST_USE_SOUND
DWORD SetSound(LPCTSTR lpszSound, HMODULE hMod = NULL, BOOL bPlayOnClick = FALSE, BOOL bPlayAsync = TRUE);
#endif

15.其他接口

BOOL GetDefault(); //若按钮不是默认按钮返回FALSE,若按钮是默认按钮返回TRUE;

DWORD SetBk(CDC* pDC); //绘制背景


DWORD SetAlwaysTrack(BOOL bAlwaysTrack = TRUE);//设置按钮是否总是高亮(hilight)

       参数:bAlwaysTrack为TRUE,即使父窗口不是活动窗口,按钮也会保持高亮,FALSE,只有父窗口是活动窗时,按钮才会保持高亮。

注意:此函数只能应用于flat button.


DWORD SetPressedStyle(BYTE byStyle, BOOL bRepaint = TRUE);//设置加压方式

参数:byStyle:可以是以下枚举:

BTNST_PRESSED_LEFTRIGHT:(默认方式)

BTNST_PRESSED_TOPBOTTOM

void SetPressedState(BOOL isPress){m_bIsPressed =isPress; }//设置按压状态


DWORD DrawBorder(BOOL bDrawBorder = TRUE, BOOL bRepaint = TRUE)//控制是否绘制按钮边界

注意:注释解释此函数仅用于flat button.测试发现一般按钮也可以应用。


DWORD DrawFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = TRUE);//控制是否绘制焦点矩形

二、其他从CButtonST派生的按钮类

CWinXPButtonST、CShadeButtonST等,用到时再研究


你可能感兴趣的:(CButtonST的使用)