MFC修改窗口背景颜色

简介: MFC修改窗口背景颜色

方法一:调用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;  
  }


2.单文档程序修改颜色


void   CMainFrame::OnNcPaint()  
{
//   TODO:   Add   your   message   handler   code   here
        CRect   rc;
        GetWindowRect(&rc);
        CWindowDC   dc(this);
        dc.FillSolidRect(rc,   RGB(255,0,0));
//   Do   not   call   CFrameWnd::OnNcPaint()   for   painting   messages
}
相关文章
|
API 计算机视觉
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
|
7月前
QT取消标题栏,如何实现窗口移动
QT取消标题栏,如何实现窗口移动
|
7月前
MFC隐藏对话框边框和可拖动
MFC隐藏对话框边框和可拖动
102 0
|
7月前
[MFC] 对话框自带滚动条的使用
[MFC] 对话框自带滚动条的使用
178 0
|
7月前
|
图形学
【计算机图形学】—修改MFC窗口中的标题(默认无标题)
【计算机图形学】—修改MFC窗口中的标题(默认无标题)
MFC更改窗口/对话框的背景颜色
MFC更改窗口/对话框的背景颜色
214 0
MFC更改窗口/对话框的背景颜色
|
API 数据安全/隐私保护
VB编程:无标题栏窗体移动和自定义鼠标样式
VB编程:无标题栏窗体移动和自定义鼠标样式
253 0
|
存储 Windows
MFC 窗体背景图片设置
很多人在做MFC 界面的时候想要给对话框加入背景图片,很多人都会想到在OnPaint()里面来加一段代码来实现,其实这样做并不怎么科学,因为它会导致窗口不断重绘,在很多项目中窗口会闪烁(比如带播放视频的一个对话框);下面的方法我感觉更为合理。
2099 0