• <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>

            道。道。道

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

               :: 首頁 :: 聯系 :: 聚合  :: 管理

            常用鏈接

            搜索

            •  

            最新評論

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

            CTLCOLOR_DLG 對話框

            CTLCOLOR_EDIT 編輯框

            CTLCOLOR_LISTBOX 列表框

            CTLCOLOR_MSGBOX 消息框

            CTLCOLOR_SCROLLBAR 滑動條

            CTLCOLOR_STATIC 靜態文本框、矩形等。

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

            //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是你想設置的顏色

            return (HBRUSH) B;

            default: //其他控件設置自己默認的顏色和背景刷.

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

            }}

            說明:1、可分別處理以上消息以實現不同控件不同背景色。

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

            二、通過定制來實現不同顏色按紐。

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

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

            //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); //重定義虛擬函數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

            第二步:定義各函數

            //CcolorButton.cpp

            ……

            // CColorButton

            IMPLEMENT_DYNAMIC(CColorButton, CButton)

            CColorButton::CColorButton()

            { }

            CColorButton::~CColorButton()

            {

            }

            //定義Attach()函數

            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);

            // 設置表示按紐被選中的虛線框

            focusRect.left += 4;

            focusRect.right -= 4;

            focusRect.top += 4;

            focusRect.bottom -= 4;

            // 按紐標題

            const int bufSize = 512;

            TCHAR buffer[bufSize];

            GetWindowText(buffer, bufSize);

            // 繪制并標志按紐

            DrawFilledRect(pDC, btnRect, GetBGColor());

            DrawFrame(pDC, btnRect);

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

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

            if (state & ODS_FOCUS) {

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

            }

            }

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

            { //繪制按紐,用戶通過定制該函數可實現不同形狀的按紐。

            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用于繪制按紐,其為多態函數

            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 獨孤九劍 閱讀(1232) 評論(0)  編輯 收藏 引用 所屬分類: Win32Visual C++ 8.0
            国内精品伊人久久久久| 影音先锋女人AV鲁色资源网久久| 99久久久精品| 91秦先生久久久久久久| 国产精品久久久久免费a∨| 亚洲AV无码久久精品狠狠爱浪潮| 7777久久亚洲中文字幕| 韩国三级中文字幕hd久久精品| 热久久视久久精品18| 国产精品无码久久综合| 美女久久久久久| 欧美久久精品一级c片片| 亚洲乱码日产精品a级毛片久久 | 99久久免费国产精精品| 欧美亚洲日本久久精品| 国产精品一区二区久久| 亚洲中文久久精品无码ww16| 久久精品无码免费不卡| 国产精品久久久久aaaa| 久久久久久久91精品免费观看| 欧美伊香蕉久久综合类网站| 久久国产亚洲高清观看| 久久99久久99精品免视看动漫| 久久性精品| 国产精品日韩深夜福利久久| 久久国产精品国产自线拍免费| 久久久SS麻豆欧美国产日韩| 亚洲а∨天堂久久精品9966| 久久九色综合九色99伊人| 亚洲乱亚洲乱淫久久| 久久精品国产亚洲av麻豆小说| 亚洲精品无码久久久久去q| 三级三级久久三级久久| 久久人妻AV中文字幕| 亚洲国产成人精品女人久久久| 国内精品久久久久久久久电影网| 国产成人久久激情91| 国产精品久久国产精麻豆99网站| 国产Av激情久久无码天堂| 国产产无码乱码精品久久鸭| 国产亚洲综合久久系列|