天天看點

MFC OnCtlColor函數用來改變控件顔色

MFC類庫提供了CWnd::OnCtlColor函數,在工作架構的子視窗被重畫時将調用該成員函數.是以可以重載WM_CTLCOLOR消息的響應函數.此函數的原型:afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd

*pWnd,UINT nCtlColor);

參數nCtlColor用于指定控件的類型,可以是:

           .CTLCOLOR_BTN               

按鈕控件

           .CTLCOLOR_DLG               

對話框

           .CTLCOLOR_EDIT               編輯框

           .CTLCOLOR_LISTBOX           

清單控件

           .CTLCOLOR_MSGBOX            

消息控件

           .CTLCOLOR_SCROLLBAR 滾動條控件

           .CTLCOLOR_STATIC            

靜态控件

      假設你已有了名為My的對話框工程.你有了一個STATIC的控件,ID為IDC_STATIC1.

  HBRUSH

CMyDlg::OnCtlColor(CDC*

pDC, CWnd*

pWnd, UINT nCtlColor)

           {

        HBRUSH hbr

= CDialog::OnCtlColor(pDC,

pWnd, nCtlColor);

       // TODO: Change any

attributes of the DC here

           if (nCtlColor==CTLCOLOR_STATIC)

              {

                    pDC->SetTextColor(RGB(255,0,0));  //字型顔色

                    pDC->SetBkColor(RGB(0, 0,

255));   //字型背景色 

                }

       // TODO:

Return a different brush if the default is not desired

        return hbr;

           }

如果要指定某個特定控件可以這樣寫:ID為IDC_STATIC1

if (pWnd->GetDlgCtrlID()==IDC_STATIC1)

{

       pDC->SetTextColor(RGB(255,0,0));  //設定字型顔色

       pDC->SetBkMode(TRANSPARENT); //設定字型背景為透明

// TODO: Return a

different brush if the default is not desired

  return (HBRUSH)::GetStockObject(BLACK_BRUSH);  // 設定背景色

}

else

return hbr;

【注】

BLACK_BRUSH:黑色

WHITE_BRUSH:白色

GRAY_BRUSH:灰色

NULL_BRUSH:透明

HOLLOW_BRUSH :透明

繼續閱讀