<>CCeButtonST v1.2

原谅连接:http://www.codeguru.com/cpp/w-p/ce/controls/article.php/c3509/CCeButtonST-v12.htm


The reference control for MFC flat buttons with text and icons. Give your CE applications a professional look!

<>CCeButtonST v1.2

<>CCeButtonST v1.2

<>CCeButtonST v1.2


Environment: eMbedded VC++ 3.0, Windows CE 3.0

Abstract

CCeButtonST is a class derived from MFC CButton class. With this class your CE applications can have standard buttons or new and modern buttons with "flat" style!

Main CCeButtonST features are:

  • Standard CButton properties
  • Text and icon on the same button
  • Only text or only icon buttons
  • Support for any size icons (max. 256 colors)
  • Standard or flat button style
  • Change runtime from flat to standard style
  • Buttons can have two images. One when the mouse is over the button and one when the mouse is outside (only for "flat" buttons)
  • Every color can be customized
  • Can be used via DDX_ calls
  • Can be used in DLLs
  • Can be dinamically created
  • Each button can have its own mouse pointer
  • Button is hilighted also when the window is inactive, like happens in Internet Explorer
  • Built-in basic support for menus
  • Can be derived to create other button styles not supplied by default
  • Full source code included!
  • UNICODE compatible
  • Windows CE v3.0 compatible
  • Cost-less implementation in existing applications
 

How to integrate CCeButtonST in your application

n your project include the following files:

  • CeBtnST.h
  • CeBtnST.cpp

Create a CCeButtonST object statically
With dialog editor create a standard button called, for example, IDOK (you don't need to make it owner drawn) and create a member variable for this button:

CCeButtonST m_btnOk;

Now attach the button to CCeButtonST. For dialog-based applications, in your OnInitDialog:

// 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);

Create a CCeButtonST object dynamically
In your application, create a member variable for the button. Please note that this variable is a pointer:

CCeButtonST* m_pbtnOk;

Now create the button. For dialog-based applications, in your OnInitDialog:

// Call the base-class method

CDialog::OnInitDialog();



// Create the IDOK button

m_pbtnOk = new CCeButtonST;

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());

Remember to destroy the button or you will get a memory leak. This can be done, for example, in your class destructor:

if (m_pbtnOk) delete m_pbtnOk;

Class methods

SetIcon (using resources)
Assigns icons to the button.
Any previous icon will be removed.

// Parameters:

//      [IN]    nIconIn

//              ID number of the icon resource to show

//              when the mouse is over the button.

//              Pass NULL to remove any icon from the button.

//      [IN]    sizeIn

//              Size of the icon.

//      [IN]    nIconOut

//              ID number of the icon resource to show when 

//              the mouse is outside the button.

//              Can be NULL.

//      [IN]    sizeOut

//              Size of the icon.

//      [IN]    nIconDis

//              ID number of the icon resource to show when 

//              the button is disabled.

//              Can be NULL.

//      [IN]    sizeDis

//              Size of the icon.

//

// Return value:

//      BTNST_OK

//          Function executed successfully.

//

DWORD SetIcon( int nIconIn, 

               CSize sizeIn = CSize(32,32), 

               int nIconOut = NULL, 

               CSize sizeOut = CSize(32,32), 

               int nIconDis = NULL, 

               CSize sizeDis = CSize(32,32))

SetIcon (using handles)
Assigns icons to the button.
Any previous icon will be removed.

// Parameters:

//     [IN]   hIconIn

//            Handle fo the icon to show when the mouse is 

//            over the button.

//            Pass NULL to remove any icon from the button.

//     [IN]   sizeIn

//            Size of the icon.

//     [IN]   hIconOut

//            Handle to the icon to show when the mouse is

//            outside the button.

//            Can be NULL.

//     [IN]   sizeOut

//            Size of the icon.

//     [IN]   hIconDis

//            ID number of the icon resource to show when 

//            the button is disabled.

//            Can be NULL.

//     [IN]   sizeDis

//            Size of the icon.

//

// Return value:

//      BTNST_OK

//          Function executed successfully.

//

DWORD SetIcon( HICON hIconIn, 

               CSize sizeIn = CSize(32,32), 

               HICON hIconOut = NULL, 

               CSize sizeOut = CSize(32,32), 

               HICON hIconDis = NULL, 

               CSize sizeDis = CSize(32,32))

SetFlat
Sets the button to have a standard or flat style.

// Parameters:

//     [IN]   bFlat

//            If TRUE the button will have a flat style, else

//            will have a standard style.

//     [IN]   bRepaint

//            If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

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

SetAlign
Sets the alignment type between icon and text.

// Parameters:

//  [IN]   byAlign

//         Alignment type.      Can be one of following values:

//         ST_ALIGN_HORIZ       Icon on left, text on right

//         ST_ALIGN_VERT        Icon on top, text on bottom

//         ST_ALIGN_HORIZ_RIGHT Icon on right, text on left

//                              By default, CCeButtonST buttons 

//                              have ST_ALIGN_HORIZ alignment.

//  [IN]   bRepaint

//         If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//     BTNST_INVALIDALIGN

//        Alignment type not supported.

//

DWORD SetAlign(BYTE byAlign, BOOL bRepaint = TRUE)

SetCheck
Sets the state of the checkbox.
If the button is not a checkbox, this function has no meaning.

// Parameters:

//     [IN]   nCheck

//            1 to check the checkbox.

//            0 to un-check the checkbox.

//     [IN]   bRepaint

//            If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

DWORD SetCheck(int nCheck, BOOL bRepaint = TRUE)

GetCheck
Returns the current state of the checkbox.
If the button is not a checkbox, this function has no meaning.

// Return value:

//     The current state of the checkbox.

//        1 if checked.

//        0 if not checked or the button is not a checkbox.

//

int GetCheck()

SetDefaultColors
Sets all colors to a default value.

// Parameters:

//     [IN]   bRepaint

//            If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

DWORD SetDefaultColors(BOOL bRepaint = TRUE)

SetColor
Sets the color to use for a particular state.

// Parameters:

//  [IN]  byColorIndex         

//        Index of the color to set. Can be one of the 

//        following values:

//        BTNST_COLOR_BK_IN     Background color when mouse 

//                              is over the button

//        BTNST_COLOR_FG_IN     Text color when mouse is 

//                              over the button

//        BTNST_COLOR_BK_OUT    Background color when mouse 

//                              is outside the button

//        BTNST_COLOR_FG_OUT    Text color when mouse is 

//                              outside the button

//        BTNST_COLOR_BK_FOCUS  Background color when the 

//                              button is focused

//        BTNST_COLOR_FG_FOCUS  Text color when the 

//                              button is focused

//  [IN]  crColor        New color.

//        

//  [IN]  bRepaint       If TRUE the control will 

//                       be repainted.

// Return value:

//     BTNST_OK

//        Function executed successfully.

//     BTNST_INVALIDINDEX

//        Invalid color index.

//

DWORD SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint = TRUE)

GetColor
Returns the color used for a particular state.

// Parameters:

//  [IN]   byColorIndex

//         Index of the color to get. Can be one of 

//         the following values:

//         BTNST_COLOR_BK_IN     Background color when 

//                               mouse is over the button

//         BTNST_COLOR_FG_IN     Text color when mouse is

//                               over the button

//         BTNST_COLOR_BK_OUT    Background color when mouse

//                               is outside the button

//         BTNST_COLOR_FG_OUT    Text color when mouse is 

//                               outside the button

//         BTNST_COLOR_BK_FOCUS  Background color when 

//                               the button is focused

//         BTNST_COLOR_FG_FOCUS  Text color when the 

//                               button is focused

//  [OUT]  crpColor

//         A pointer to a COLORREF

//         that will receive the color.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//     BTNST_INVALIDINDEX

//        Invalid color index.

//

DWORD GetColor(BYTE byColorIndex, COLORREF* crpColor)

SetAlwaysTrack
Sets the hilight logic for the button.
Applies only to flat buttons.

// Parameters:

//     [IN]   bAlwaysTrack

//            If TRUE the button will be hilighted even 

//            if the window that owns it, is not the 

//            active window.

//            If FALSE the button will be hilighted only if

//            the window that owns it, is the active window.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

DWORD SetAlwaysTrack(BOOL bAlwaysTrack = TRUE)

SetBtnCursor
Sets the cursor to be used when the mouse is over the button.

// Parameters:

//     [IN]   nCursorId

//            ID number of the cursor resource.

//            Pass NULL to rem/>k a previously loaded cursor.

//     [IN]   bRepaint

//            If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//     BTNST_INVALIDRESOURCE

//        Failed loading the specified resource.

//

DWORD SetBtnCursor(int nCursorId = NULL, BOOL bRepaint = TRUE)

DrawBorder
Sets if the button border must be drawn.
Applies only to flat buttons.

// Parameters:

//     [IN]   bDrawBorder

//            If TRUE the border will be drawn.

//     [IN]   bRepaint

//            If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

DWORD DrawBorder( BOOL bDrawBorder = TRUE, 

                  BOOL bRepaint = TRUE)

DrawFlatFocus
Sets if the focus rectangle must be drawn for flat buttons.

// Parameters:

//     [IN]   bDrawFlatFocus

//            If TRUE the focus rectangle will be 

//            drawn also for flat buttons.

//     [IN]   bRepaint

//            If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

DWORD DrawFlatFocus( BOOL bDrawFlatFocus, 

                     BOOL bRepaint = TRUE)

GetDefault
Returns if the button is the default button.

// Return value:

//     TRUE

//        The button is the default button.

//     FALSE

//        The button is not the default button.

//

BOOL GetDefault()

SetURL
Sets the URL that will be opened when the button is clicked.

// Parameters:

//     [IN]   lpszURL

//            Pointer to a null-terminated string that 

//            contains the URL.

//            Pass NULL to removed any previously specified URL.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

DWORD SetURL(LPCTSTR lpszURL = NULL)

SetMenu
Associates a menu to the button.
The menu will be displayed clicking the button.

// Parameters:

//     [IN]   nMenu

//            ID number of the menu resource.

//            Pass NULL to remove any menu from the button.

//     [IN]   hParentWnd

//            Handle to the window that owns the menu.

//            This window receives all messages from the menu.

//     [IN]   bRepaint

//            If TRUE the control will be repainted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//     BTNST_INVALIDRESOURCE

//        Failed loading the specified resource.

//

DWORD SetMenu( UINT nMenu, 

               HWND hParentWnd, 

               BOOL bRepaint = TRUE)

OnDrawBackground
This function is called every time the button background needs to be painted. This is a virtual function that can be rewritten in CCeButtonST-derived classes to produce a whole range of buttons not available by default.

// Parameters:

//     [IN]   pDC

//            Pointer to a CDC object that indicates 

//            the device context.

//     [IN]   pRect

//            Pointer to a CRect object that indicates the

//            bounds of the area to be painted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

virtual DWORD OnDrawBackground(CDC* pDC, LPCRECT pRect)

OnDrawBorder
This function is called every time the button border needs to be painted. This is a virtual function that can be rewritten in CCeButtonST-derived classes to produce a whole range of buttons not available by default.

// Parameters:

//     [IN]   pDC

//            Pointer to a CDC object that indicates 

//            the device context.

//     [IN]   pRect

//            Pointer to a CRect object that indicates 

//            the bounds of the area to be painted.

//

// Return value:

//     BTNST_OK

//        Function executed successfully.

//

virtual DWORD OnDrawBorder(CDC* pDC, LPCRECT pRect)

GetVersionI
Returns the class version as a short value.

// Return value:

//     Class version. Divide by 10 to get actual version.

//

static short GetVersionI()

GetVersionC
Returns the class version as a string value.

// Return value:

//     Pointer to a null-terminated string 

//     containig the class version.

//

static LPCTSTR GetVersionC()

 

  • v1.2 (18/December/2001)
    Corrected a CE bug in OnLButtonDown
  • v1.1 (28/November/2001)
    Corrected the "DestroyCursor" problem
  • v1.0 (22/October/2001)
    First release

 

Remarks

The demo application shows nearly all the features of the CCeButtonST class. It includes project settings for all the emulators included in Visual C++ eMbedded Tools v3.0 plus settings to compile and run on the Advantech PCM-4823 single board computer. CCeButtonST architecture makes possible to produce a whole range of buttons not available by default. If someone implements new button styles I will be happy to include his code in the next CCeButtonST demo application.

 

 


你可能感兴趣的:(button)