首页 > 学院 > 开发设计 > 正文

VC对话框背景颜色、控件颜色

2019-11-06 06:40:51
字体:
来源:转载
供稿:网友

系统环境:Windows 7

方法一:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):    

[cpp] view plain copyvoid   CExampleDlgDlg::OnPaint()        {              if  (IsIconic())                 …              else             {                CRect   rect;                CPaintDC   dc(this);                GetClientRect(rect);                dc.FillSolidRect(rect,RGB(0,255,0));     //设置为绿色背景                CDialog::OnPaint();             }       }  

方法二:重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):       ①在CExampleDlgDlg的头文件中,添加一个CBrush的成员变量:     

[cpp] view plain copyclass   CExampleDlgDlg   :   public   CDialog      {...        PRotected:        CBrush   m_brush;          ...      };     ②在OnInitDialog()函数中添加如下代码:     [cpp] view plain copyBOOL   CExampleDlgDlg::OnInitDialog()        {        ...        //   TODO:   Add   extra   initialization   here        m_brush.CreateSolidBrush(RGB(0,   255,   0));   //   生成一绿色刷子          ...      }     ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:     

[cpp] view plain copyHBRUSH   CExampleDlgDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)        {        /*       **   这里不必编写任何代码!       **下行代码要注释掉       **   HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);       */        return   m_brush;       //返加绿色刷子      }   

方法三还是重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):       步骤①、②同上方法三中的步骤①、②。       步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同:     

[cpp] view plain copyHBRUSH   CExampleDlgDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)        {        HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);        //在这加一条是否为对话框的判断语句        if(nCtlColor   ==CTLCOLOR_DLG)        return   m_brush;       //返加绿色刷子        return   hbr;      }  

控件颜色:

对于分布在对话框上的控件,我们可以修改其颜色、其背景颜色,比如对静态文本、文本编辑框、列表框等等。

步骤①、②同上方法三中的步骤①、②。步骤③:利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同:

[cpp] view plain copyHBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  {      HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);      if(nCtlColor   ==CTLCOLOR_DLG)      //对话框颜色        return   m_brush;       //返加绿色刷子        if(nCtlColor==CTLCOLOR_STATIC && pWnd->GetDlgCtrlID()==IDC_STATIC)  //静态文本颜色,并且指定控件ID号      {           pDC->SetTextColor(RGB(255,0,0));           pDC->SetBkColor(RGB(191,219,255));     //静态控件的背景颜色设置,这里设置于背景颜色一致,则可以免设置透明           //pDC->SetBkMode(TRANSPARENT);    //模式设置透明的话,则忽略静态控件的背景颜色设置,与对话框颜色融合           hbr=(HBRUSH)m_brush;      }      if(nCtlColor==CTLCOLOR_EDIT)    //文本编辑框颜色      {          pDC->SetTextColor(RGB(0,0,255));           //pDC->SetBkColor(RGB(191,219,255));     //静态控件的背景颜色设置          pDC->SetBkMode(TRANSPARENT);          hbr=(HBRUSH)m_brush;      }         return hbr;  }  

对于其中nCtlColor类型,即它的取值:

CTLCOLOR_DLG   对话框  CTLCOLOR_EDIT   编辑框  CTLCOLOR_LISTBOX   列表框    CTLCOLOR_MSGBOX   消息框  CTLCOLOR_SCROLLBAR   滑动条  CTLCOLOR_STATIC   静态文本框、矩形等


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表