MFC如何修改窗口背景色

news/2024/7/4 1:44:26 标签: mfc, class, 工作
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">   如何修改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(RGB(255, 128, 128));

//保存旧的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(RGB(255, 128, 128));

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

}


http://www.niftyadmin.cn/n/1536564.html

相关文章

[转帖]2019-03-26 发布 深入理解 MySQL ——锁、事务与并发控制

深入理解 MySQL ——锁、事务与并发控制 https://segmentfault.com/a/1190000018658828太长了 没看完。。 数据库 并发 mysql 639 次阅读 读完需要 46 分钟21本文首发于 vivo 互联网技术微信公众号 https://mp.weixin.qq.com/s/JF...作者:张硕 本文对 MySQ…

Extjs GridPanel的相关处理----关于删除后刷新表单的问题

清空store中的所有数据,并重新加载数据。 ds.removeAll(); ds.reload(); 可根据需要: 将gridpanel的当前的页码置为1,即需要删除后,返回至数据的第一条的。 一般情况下,都保留在原页。 转载于:https://www.cnblogs.com…

[转帖]ubuntu 修改 apt源的方法

https://www.cnblogs.com/dadonggg/p/11129973.htmlubuntu 和 centos 是不一样的ubunut 里面 用deb开头 放置到 /etc/apt/sources.list 里面centos 是在 /etc/yum.repos.d/xxxx.repo 里面主要 [name] name baseurl enable gpgcheck 等字段 以Ubuntu18.04为例: 1. 备…

vc随记

Win32 API:user.dll、shell.dll、kernel.dll Workbooks集合、excel编程资料 http://blog.csdn.net/ZOU_SEAFARER/archive/2007/01/27/1495688.aspx Visual C界面常用控件技巧实例 http://www.yesky.com/SoftChannel/72348977504190464/20040717/1832043.shtml vc编…

Node.js基础与实战

Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP&HTTPS 进程与集群 网络安全 关于node.js的误会 昨天写了篇博客,介绍了一下我对node.js的第一次亲密接触后的感受&…

[转帖]Nginx 的 TCP 负载均衡介绍

Nginx 的 TCP 负载均衡介绍 https://www.cnblogs.com/felixzh/转帖学习一下 是跟http 同级的一个 配置节.改天中午尝试一下 应该可以 转发数据库之类的内容. Nginx除了以前常用的HTTP负载均衡外,Nginx增加基于TCP协议实现的负载均衡方法。 HTTP负载均衡&#xff0c…

安装VS2005 SP1补丁攻略

我第一次安装这个补丁的时候就挂了,搞得VS2005和相关的一些程序都不能运行,后来在网上找到了一些解决方法,结合自己的实际体验,写了这篇教程。补丁相关资料:简体中文版补丁名称:VS80sp1-KB926604-X86-CHS.e…

MongoDB分组汇总操作,及Spring data mongo的实现

转载请在页首注明作者与出处 一:分组汇总 1.1:SQL样例 分组汇总的应用场景非常多,比如查询每个班级的总分是多少,如果用关系形数据库,那么sql是这样子的 SELECT count(1),class from score group by class 得到的结果就是每个班分别的总分是多…