• <转载>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!


    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.


    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    js--在页面元素上(移动到或获取焦点)、鼠标离开(或失去焦点)
    Oracle 树操作、递归查询(select…start with…connect by…prior)
    oracle 错误码查看命令oerr ora及常用错误码总结--不断更新
    Dbvisual连接远程数据库报错Error Code: 17401
    struts2 转发、重定向概述
    javascript array操作
    理解 Node.js 里的 process.nextTick()
    js的in运算符与instanceof运算符
    Javascript引擎单线程机制及setTimeout执行原理说明
    NodeJS错误处理最佳实践
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2391813.html
Copyright © 2020-2023  润新知