设置对话框的背景色(转)

基于对话框的MFC AppWizard应用程序中,改变对话框的背景颜色

---- 方法一:

    调用CWinApp类的成员函数SetDialogBkColor来实现。

---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:

      ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。 

      ② 在CExampleDlgApp ::InitInstance()中添加如下代码:

             BOOL CExampleDlgApp: : InitInstance ( ) {

             …

             CExampleDlgDlg dlg;  

             m_pMainWnd = &dlg; //先于DoModal()调用,将对话框设置为蓝色背景红

                                                 色文本

             SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));

             int nResponse = dlg.DoModal();

             … }

            编译并运行,此时对话框的背景色和文本色已发生了改变。

     值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。

 

---- 方法二:

     重载OnPaint(),即WM_PAINT消息。

     有关代码如下(以上例工程为准):

      void 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的成员变量:

      class CExampleDlgDlg : public CDialog {

      ...

      protected:

          CBrush m_brush;

      ...

      };

      ②在OnInitDialog()函数中添加如下代码:

      BOOL CExampleDlgDlg::OnInitDialog() {

       ...

       // TODO: Add extra initialization here

       m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子

       ... } 

      ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:

      HBRUSH 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消息)时则有些不同:

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

      HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); //在这加一条是

                                                                                         否为对话框的判断语句

      if(nCtlColor ==CTLCOLOR_DLG) return m_brush; //返加绿色刷子

      return hbr; }

      编译并运行即可。

     关于如何改变对话框背景颜色的问题,可能还有很多种不同方法可以实现,笔者在这仅举出四种常见的方法。其中方法三的编程似乎有点不太规范,方法四则要比方法三正统些,笔者这样的对比举例是为了拓宽VC编程爱好者特别是初学者的编程思路,读者可以根据实际情况选用其中的一种。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值