• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 改變Push Button背景色

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    在 Windows 中Edit,StaticBox的背景色都可以通過處理WM_CTLCOLOR消息來改變,但Push Button卻不行。 唯一的方法是使用OwnerDraw風格的按鈕。本文講述的方法是使用CButton的派生類。 class CC Button : public CButton { DECLARE_DYNA MI C(CCButton) public:
    Windows中Edit,StaticBox的背景色都可以通過處理WM_CTLCOLOR消息來改變,但Push Button卻不行。

    唯一的方法是使用OwnerDraw風格的按鈕。本文講述的方法是使用CButton的派生類。

    class CCButton : public CButton
    {
    DECLARE_DYNAMIC(CCButton)
    public:
        CCButton();
        virtual ~CCButton();
        BOOL CCButton::Attach(const UINT nID, CWnd* pParent)

    protected:
        virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);//必需重載的函數

    public:
        COLORREF m_fg, m_bg, m_disabled_fg, m_disabled_bg;//四種顏色分別為文字,背景,失效時文字,失效時背景
    };


    實現DrawItem

    void CCButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
    {
        CDC* pDC = CDC::FromHandle(lpDIS->hDC);//???????DC

        UINT state = lpDIS->itemState; //得到狀態
        CRect focusRect, btnRect;//兩個矩形,表示得當輸入焦點時的虛線矩形和按鈕矩形     
        focusRect.CopyRect(&lpDIS->rcItem);
        btnRect.CopyRect(&lpDIS->rcItem);

        //
        //調整虛線矩形
        //
        focusRect.left += 4;
       focusRect.right -= 4;
       focusRect.top += 4;
       focusRect.bottom -= 4;

        //
        // 得當Button上文字
        //
       const int bufSize = 512;
       TCHAR buffer[bufSize];
       GetWindowText(buffer, bufSize);
        
       // 使用m_fg, m_bg顏色利用 Draw3dRect(...)繪制按鈕邊框

       // FillRect(...)填充按鈕內部

       // DrawText(...)繪制文字

        //根據當前狀態調整顯示
        //
        if (state & ODS_FOCUS) {
            .........//得到輸入焦點,通過focusRect畫虛線
            if (state & ODS_SELECTED){
            .....// 被按下,繪制下陷邊框
            }
        }
        else if (state & ODS_DISABLED) {
        //失效,通過m_disabled_fg, m_disabled_bg 重繪按鈕內部
        }
    }


    CCButton是CButton派生類,具有CButton的全部成員函數,但在創建時需要使用BS_OWNERDRAW風格。

    如果按鈕不是動態生成,使用Attach函數使CCButton代替原來按鈕的窗口過程。

    BOOL CCButton::Attach(const UINT nID, CWnd* pParent)
    {
        GetDlgItem(nID)->ModifyStyle(0,BS_OWNERDRAW,0);

        if (!SubclassDlgItem(nID, pParent))
            return FALSE;

        return TRUE;
    }

    如在一對話框的InitDialog(...)中加入下面幾行

    {// 假定 m_cbBtn為成員變量 IDC_BUTTON1為一按鈕ID值

       m_cbBtn.Attach(IDC_BUTTON1,this);

    }

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>