CCeButtonST v1.2

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

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

.


Sample Image

Sample Image

Sample Image

SoftechSoftware homepage

SoftechSoftware Email

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


In 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.

Downloads

Download demo project – 55 Kb

Download source – 10 Kb

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read