zoukankan      html  css  js  c++  java
  • VC/MFC如何设置对话框背景颜色

    网上流传有四种方法(可能还不止),在VC++2008SP1测试后,发现只有三种可以使用了,其中第一种被废弃了。以下是四种方法:

    方法一 (失效):调用CWinApp类的成员函数SetDialogBkColor来实现。 
    其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对 话框设置为蓝色背景和红色文本,步骤如下: 
    ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。 
    ② 在CExampleDlgApp ::InitInstance()中添加如下代码:

    1. BOOL CExampleDlgApp: : InitInstance ( )
    2. {
    3. … CExampleDlgDlg dlg;
    4. m_pMainWnd = &dlg;
    5. //先于DoModal()调用,将对话框设置为蓝色背景、红色文本
    6. SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
    7. int nResponse = dlg.DoModal();
    8. …}

    编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。 
    方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):

    1. void CExampleDlgDlg::OnPaint()
    2. {
    3. if (IsIconic())
    4. else
    5. {
    6. CRect rect;
    7. CPaintDC dc(this);
    8. GetClientRect(rect);
    9. dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景
    10. CDialog::OnPaint();
    11. }
    12. }

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

    1. class CExampleDlgDlg : public CDialog
    2. {...
    3. protected:
    4. CBrush m_brush;
    5. ...
    6. };

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

    1. BOOL CExampleDlgDlg::OnInitDialog()
    2. {
    3. ...
    4. // TODO: Add extra initialization here
    5. m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子
    6. ...
    7. }

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

    1. HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    2. {
    3. /*
    4. ** 这里不必编写任何代码!
    5. **下行代码要注释掉
    6. ** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    7. */
    8. return m_brush; //返加绿色刷子
    9. }

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

    1. HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    2. {
    3. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    4. //在这加一条是否为对话框的判断语句
    5. if(nCtlColor ==CTLCOLOR_DLG)
    6. return m_brush; //返加绿色刷子
    7. return hbr;
    8. }

    更多参考:http://www.cnblogs.com/WadeXU/archive/2012/11/20/2778564.html

  • 相关阅读:
    Html.RenderPartial和Html.Partial区别
    SQL Server事务处理
    为什么要使用消息队列(一)
    消息队列的优缺点(三)
    消息队列消息顺序性
    分布式事务之消息队列解决方案
    Solr与tomcat整合,并添加中文分词器
    Solr设置高亮
    Solr执行查询操作
    Lucene使用Filter搜索过滤
  • 原文地址:https://www.cnblogs.com/youxin/p/2858164.html
Copyright © 2011-2022 走看看