dcsimg

CCeButtonST v1.2

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


This article was originally published on December 18th, 2001
Close Icon
Thanks for your registration, follow us on our social networks to keep up-to-date
Twitter
LindkedIn
GooglePlus
RSS