MFC设置窗口背景颜色(很全很强大)

转载 2013年12月04日 00:14:49

如何修改frame窗口的背景颜色?   

MDI窗口的客户区是由frame窗口拥有的另一个窗口覆盖的。为了改变frame窗口背景的颜色,只需要这个客户区的背景颜色就可以了。你必须自己处理WM_ERASEBKND消息。下面是工作步骤:

  创建一个从CWnd类继承的类,就叫它CMDIClient吧; 

在CMDIFrameWnd中加入CMDIClient变量;(具体情况看下面的代码) 

#include "MDIClient.h"
class CMainFrame : public CMDIFrameWnd
{
...
protected:
CMDIClient m_wndMDIClient;
}

  重载CMDIFrameWnd::OnCreateClient,下面是这段代码,请注意其中的SubclassWindow();

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
{
m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
return TRUE;
}
else
return FALSE;
}

  最后要在CMDIClient中加入处理WM_ERASEBKGND的函数。

 

如何改变view的背景颜色? 

若要改变CView,CFrameWnd或CWnd对象的背景颜色需要处理WM_ERASEBKGND消息,下面就是一个范例代码:

BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{

//设置brush为希望的背景颜色
CBrush backBrush(#ff8080);

//保存旧的brush
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect);

//画需要的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);

return TRUE;

}

 

若要改变CFromView继承类的背景颜色

下面是一个范例代码:

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

 switch (nCtlColor)
{

  case CTLCOLOR_BTN:
case CTLCOLOR_STATIC:
{

   pDC->SetBkMode(TRANSPARENT);
//不加任何处理或设置背景为透明

  }
case CTLCOLOR_DLG:
{

   CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);

  }

 }

 return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));

}

 

如何修改frame窗口的背景颜色?

  MDI窗口的客户区是由frame窗口拥有的另一个窗口覆盖的。为了改变frame窗口背景的颜色,只需要这个客户区的背景颜色就可以了。你必须自己处理WM_ERASEBKND消息。下面是工作步骤:

  创建一个从CWnd类继承的类,就叫它CMDIClient吧; 

在CMDIFrameWnd中加入CMDIClient变量;(具体情况看下面的代码) 

#include "MDIClient.h"
class CMainFrame : public CMDIFrameWnd
{
...
protected:
CMDIClient m_wndMDIClient;
}

  重载CMDIFrameWnd::OnCreateClient,下面是这段代码,请注意其中的SubclassWindow();

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
{
m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
return TRUE;
}
else
return FALSE;
}

  最后要在CMDIClient中加入处理WM_ERASEBKGND的函数。

 

如何改变view的背景颜色? 

若要改变CView,CFrameWnd或CWnd对象的背景颜色需要处理WM_ERASEBKGND消息,下面就是一个范例代码:

BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{

//设置brush为希望的背景颜色
CBrush backBrush(#ff8080);

//保存旧的brush
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect);

//画需要的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);

return TRUE;

}

 

若要改变CFromView继承类的背景颜色

下面是一个范例代码:

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

 switch (nCtlColor)
{

  case CTLCOLOR_BTN:
case CTLCOLOR_STATIC:
{

   pDC->SetBkMode(TRANSPARENT);
//不加任何处理或设置背景为透明

  }
case CTLCOLOR_DLG:
{

   CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);

  }

 }

 return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));

}

相关文章推荐

设置窗口背景色

若要改变CView,CFrameWnd或CWnd对象的背景颜色需要处理WM_ERASEBKGND消息 WM_ERASEBKGND Return Values An application s...

MFC设置窗口背景颜色(很全很强大)

如何修改frame窗口的背景颜色?    MDI窗口的客户区是由frame窗口拥有的另一个窗口覆盖的。为了改变frame窗口背景的颜色,只需要这个客户区的背景颜色就可以了。你必须自己处理WM_E...

MFC修改窗口客户区颜色

思路:响应WM_PAINT消息,纯色绘制客户区 代码: CPaintDC dc(this); // device context for painting CRect rect; GetClie...
  • rankun1
  • rankun1
  • 2016年07月26日 10:54
  • 817

DirectX11 学习笔记4 - 一个完整的封装框架

解释下次补上 先上代码 XGraphics.h #pragma once #include #include "XD3Device.h" ///////////// // GLOBALS // ...

Direct3D顶点坐标变换

开始的话:顶点坐标变换时Direct3D学习中的入门基础,在这里将详述其原理: Direct3D中渲染三维对象的过程分为两个阶段:《1》T&L(Transforming and Lighting...

Win8.1设置窗口背景颜色为护眼色

win7里可以在个性化里设置,到win8的时候没有了。只能手动修改注册表,达到同样的效果: window+R ---》输入regedit(点击确定后进入注册表编辑器) ---》HKEY_CURRE...
  • feg545
  • feg545
  • 2014年01月22日 10:51
  • 39812

设置系统注册表值修改窗口背景颜色

计算机窗口背景颜色为白色,对于十分喜欢个性化的用户来说,这显得不够独特,那么有什么办法能够修改窗口颜色来凸显自己的个性化呢?今天我们就教大家如何修改窗口颜色让用户拥有个性化的窗口背景颜色。   ...

VC/MFC如何设置对话框背景颜色

方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。  (这个函数已经废弃) ? 1 void SetDialogBkColor...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC设置窗口背景颜色(很全很强大)
举报原因:
原因补充:

(最多只允许输入30个字)