CFrame窗体背景颜色

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

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

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

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

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

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

BOOLCMainFrame::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, UINTnCtlColor)
{

 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, UINTnCtlColor)
{

 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));

}

 

 

BOOLCMainWindow::OnEraseBkgnd(CDC* pDC)
{
 CBrushbackBrush(RGB(255,0,0));//建立新的画刷

 //保存旧的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;
}

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

 if( CTLCOLOR_LISTBOX == nCtlColor&& pWnd == m_pMineListBox )
 {
  pDC->SetTextColor(RGB(255,0,0));
  pDC->SetBkColor(RGB(0,0,255));
  //pDC->SetBkMode(OPAQUE);
  HBRUSH B =::CreateSolidBrush(RGB(255,255,255));
  return B;
 }
 return CFrameWnd::OnCtlColor(pDC, pWnd,nCtlColor);//其实不返回父类,也可以成功创建窗口控件                          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值