• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            道。道。道

            安全特性不等于安全的特性

               :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理

            常用鏈接

            搜索

            •  

            最新評論

            ??????? 在VC編程中要改變控件(諸如CView, CFrameWnd, or CWnd等)的背景色可通過處理特定的消息來實(shí)現(xiàn)。但如果想改變按鈕的顏色,就只能使用自繪制的按鈕(也可以用位圖按鈕,此處未做說明)而不能通過OnCtlColor()改變。
               一、在一個MFC應(yīng)用程序中,要改變控件的背景色可通過重載OnCtlColor()函數(shù)來實(shí)現(xiàn)。方法是在該函數(shù)中設(shè)置所需顏色后再返回一個畫刷句柄便可重繪控件背景色。OnCtlColor()函數(shù)對于控件背景色的處理是通過捕捉相應(yīng)的控件消息來實(shí)現(xiàn)的。常用的此類消息有:

            CTLCOLOR_DLG 對話框

            CTLCOLOR_EDIT 編輯框

            CTLCOLOR_LISTBOX 列表框

            CTLCOLOR_MSGBOX 消息框

            CTLCOLOR_SCROLLBAR 滑動條

            CTLCOLOR_STATIC 靜態(tài)文本框、矩形等。

            以下示例代碼說明如何更改以上控件的背景色:

            //CmyDialog.h定義

            class CMyDialog : public Cdialog //派生自己的對話框類

            {

            ……..

            // Implementation

            protected:

            // Generated message map functions

            //{{AFX_MSG(CMyDialog)

            afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

            …….

            //}}AFX_MSG

            DECLARE_MESSAGE_MAP()

            };

            //CmyDialog.cpp 定義

            ……

            HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

            {

            switch (nCtlColor) {

            case CTLCOLOR_EDIT:

            case CTLCOLOR_MSGBOX:

            case CTLCOLOR_DLG :

            case CTLCOLOR_EDIT : //在此加入你想要改變背景色的控件消息

            pDC->SetBkMode(TRANSPARENT);

            HBRUSH B = CreateSolidBrush(COLOR); //COLOR是你想設(shè)置的顏色

            return (HBRUSH) B;

            default: //其他控件設(shè)置自己默認(rèn)的顏色和背景刷.

            return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

            }}

            說明:1、可分別處理以上消息以實(shí)現(xiàn)不同控件不同背景色。

            2、此方法不適用于按紐控件。

            二、通過定制來實(shí)現(xiàn)不同顏色按紐。

            以下通過定制方形彩色按紐來說明:

            第一步:派生出自己的按紐類。

            //CcolorButton.h

            class CColorButton : public CButton

            {

            DECLARE_DYNAMIC(CColorButton)

            public:

            CColorButton();

            virtual ~CColorButton();

            BOOL Attach(const UINT nID, CWnd* pParent,

            const COLORREF BGColor = RGB(192, 123, 192), // 按紐的背景色

            const COLORREF FGColor = RGB(1, 1, 1), // 文本顏色

            );

            protected:

            virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS); //重定義虛擬函數(shù)DrawItem

            void DrawFrame(CDC *DC, CRect R); //繪制按紐框

            void DrawFilledRect(CDC *DC, CRect R, COLORREF color); //填充按紐框

            void DrawLine(CDC *DC, CRect EndPoints, COLORREF color);

            void DrawLine(CDC *DC, long left, long top, long right, long bottom, COLORREF color);

            void DrawButtonText(CDC *DC, CRect R, const char *Buf, COLORREF TextColor);

            //繪制按紐上的文本

            COLORREF GetFGColor() { return m_fg; }

            COLORREF GetBGColor() { return m_bg; }

            private:

            COLORREF m_fg, m_bg;

            };

            #endif

            第二步:定義各函數(shù)

            //CcolorButton.cpp

            ……

            // CColorButton

            IMPLEMENT_DYNAMIC(CColorButton, CButton)

            CColorButton::CColorButton()

            { }

            CColorButton::~CColorButton()

            {

            }

            //定義Attach()函數(shù)

            BOOL CColorButton::Attach(const UINT nID, CWnd* pParent, const COLORREF BGColor, const COLORREF FGColor)

            {

            if (!SubclassDlgItem(nID, pParent))

            return FALSE;

            m_fg = FGColor;

            m_bg = BGColor;

            return TRUE;

            }

            //重載DrawItem()

            void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)

            {

            CDC* pDC = CDC::FromHandle(lpDIS->hDC);

            UINT state = lpDIS->itemState;

            CRect focusRect, btnRect;

            focusRect.CopyRect(&lpDIS->rcItem); //按紐的選中虛線框

            btnRect.CopyRect(&lpDIS->rcItem);

            // 設(shè)置表示按紐被選中的虛線框

            focusRect.left += 4;

            focusRect.right -= 4;

            focusRect.top += 4;

            focusRect.bottom -= 4;

            // 按紐標(biāo)題

            const int bufSize = 512;

            TCHAR buffer[bufSize];

            GetWindowText(buffer, bufSize);

            // 繪制并標(biāo)志按紐

            DrawFilledRect(pDC, btnRect, GetBGColor());

            DrawFrame(pDC, btnRect);

            DrawButtonText(pDC, btnRect, buffer, GetFGColor());

            // 如果按紐處于選中狀態(tài)則在其上繪制選中虛線框

            if (state & ODS_FOCUS) {

            DrawFocusRect(lpDIS->hDC, (LPRECT)&focusRect);

            }

            }

            void CColorButton::DrawFrame(CDC *DC, CRect R)

            { //繪制按紐,用戶通過定制該函數(shù)可實(shí)現(xiàn)不同形狀的按紐。

            DrawLine(DC, R.left, R.top, R.right, R.top, RGB(255, 255, 255));

            DrawLine(DC, R.left, R.top, R.left, R.bottom, RGB(255, 255, 255));

            //以下繪制按紐的外圍框線以使按紐有立體感

            DrawLine(DC, R.left + 1, R.bottom - 1, R.right, R.bottom - 1, RGB(1, 1, 1));

            //繪制按紐左框線和上框線

            DrawLine(DC, R.right - 1, R.top + 1, R.right - 1, R.bottom, RGB(1, 1, 1));

            //繪制按紐右框線和下框線

            }

            //用色彩填充按紐框

            void CColorButton::DrawFilledRect(CDC *DC, CRect R, COLORREF color)

            {

            CBrush B;

            B.CreateSolidBrush(color);

            DC->FillRect(R, &B);

            }

            // DrawLine用于繪制按紐,其為多態(tài)函數(shù)

            void CColorButton::DrawLine(CDC *DC, CRect EndPoints, COLORREF color)

            {

            ……

            }

            void CColorButton::DrawLine(CDC *DC, long left, long top, long right, long bottom, COLORREF color)

            {

            ……

            }

            //繪制按紐文本

            void CColorButton::DrawButtonText(CDC *DC, CRect R, const char *Buf, COLORREF TextColor)

            {

            COLORREF prevColor = DC->SetTextColor(TextColor);

            DC->SetBkMode(TRANSPARENT);

            DC->DrawText(Buf, strlen(Buf), R, DT_CENTER|DT_VCENTER|DT_SINGLELINE);

            DC->SetTextColor(prevColor);

            }

            第三步:引用定制類

            定制任意對話框CColorDlg,在其上畫一按鍵控件。ID為IDOK。

            //CColorDlg.h

            class CColorDlg : public CDialog

            {

            …..

            // Implementation

            protected:

            CColorButton m_btnOK;

            }

            //CColorDlg.cpp

            …….

            BOOL CColorBtnSampleDlg::OnInitDialog()

            {

            CDialog::OnInitDialog();

            …….

            VERIFY(m_btnOK.Attach(IDOK, this, RED, BLUE, YELLOW));

            …….

            }
            posted on 2006-11-27 20:35 獨(dú)孤九劍 閱讀(1250) 評論(0)  編輯 收藏 引用 所屬分類: Win32Visual C++ 8.0
            久久福利片| 久久精品国产一区二区三区日韩| 久久99热这里只有精品国产 | 久久精品国产久精国产一老狼| 国内精品伊人久久久影院| 亚洲国产另类久久久精品黑人 | 亚洲伊人久久大香线蕉综合图片| 亚洲熟妇无码另类久久久| 国产精品激情综合久久| 国内精品久久久久影院薰衣草| 久久久综合九色合综国产| 成人午夜精品无码区久久| 国产精品欧美久久久久天天影视| 久久久久久久久久久久久久| 国产精品久久亚洲不卡动漫| 久久青青草视频| 久久久久中文字幕| 久久久久久人妻无码| 久久亚洲国产成人影院| 国产精品99久久久久久猫咪 | 亚洲欧美一级久久精品| 99精品久久久久中文字幕| 久久毛片一区二区| 久久黄视频| 久久精品国产亚洲Aⅴ蜜臀色欲| 色婷婷综合久久久久中文一区二区 | 久久精品国产亚洲综合色| 国内精品久久久久影院一蜜桃 | 久久亚洲国产精品一区二区| 精品久久久无码人妻中文字幕豆芽| 亚洲v国产v天堂a无码久久| AAA级久久久精品无码区| 久久久国产精品福利免费 | 97热久久免费频精品99| 久久夜色精品国产噜噜亚洲AV| 中文字幕精品久久| 久久婷婷午色综合夜啪| 久久精品国产免费观看| 亚洲级αV无码毛片久久精品| 久久久久久久97| 亚洲va中文字幕无码久久|