• <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
            亚洲天堂久久久| 国色天香久久久久久久小说| 国产精品一久久香蕉产线看 | 久久久久久国产a免费观看不卡| 天天影视色香欲综合久久| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久青青草原精品国产| 久久久av波多野一区二区| 亚洲国产精品久久| 香蕉久久av一区二区三区| 精品久久久无码中文字幕| 热久久视久久精品18| 久久精品国产99久久久香蕉| 亚洲性久久久影院| 久久久久夜夜夜精品国产| 欧美大战日韩91综合一区婷婷久久青草| 2019久久久高清456| 亚洲国产精品热久久| 久久SE精品一区二区| 欧美色综合久久久久久| 国产成人精品久久| 国内精品久久久久影院日本 | 久久久久久狠狠丁香| 色婷婷综合久久久中文字幕| 国内精品久久久久久麻豆| 亚洲国产精品久久久久久| 国产亚洲精品美女久久久| 久久强奷乱码老熟女网站| 久久久久久国产a免费观看黄色大片| 久久亚洲AV成人无码电影| 2021久久精品免费观看| 久久婷婷五月综合色奶水99啪| 久久午夜无码鲁丝片午夜精品| 久久人人超碰精品CAOPOREN| 香蕉久久AⅤ一区二区三区| 久久99热这里只有精品国产| 国产精品女同久久久久电影院| 最新久久免费视频| 精品国产99久久久久久麻豆| 久久亚洲精品人成综合网 | 久久99精品国产麻豆蜜芽|