子框架窗口的颜色可以在视窗内更改。
多文档时,子框架窗口可以缩小,进而显示出主框架窗口的背景。
那么主框架窗口的背景颜色如何更改呢?
我们可以事先准备一个从CWnd派生的类,在此窗口类中先通过消息WM_ERASEBKGND处理函数实现窗口的背景的设置。
然后再用此类将框架窗口子类化。
例如从CWnd派生一个类,使用类向导生成类时,在基于选项卡上没有CWnd,我们可以随意选择一个窗口类。
下面是类的头文件,与源文件
- #if !defined(AFX_MDICLIENTWND_H__7F7D43A4_7FDE_4215_99E7_3700998324FB__INCLUDED_)
- #define AFX_MDICLIENTWND_H__7F7D43A4_7FDE_4215_99E7_3700998324FB__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- // MDIClientWnd.h : header file
- //
- /////////////////////////////////////////////////////////////////////////////
- // CMDIClientWnd frame
- #define CFrameWnd CWnd
- class CMDIClientWnd : public CFrameWnd
- {
- DECLARE_DYNCREATE(CMDIClientWnd)
- public:
- CMDIClientWnd(); // protected constructor used by dynamic creation
- virtual ~CMDIClientWnd();
- CBrush m_Brush;
- // Attributes
- public:
- // Operations
- public:
- // Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CMDIClientWnd)
- //}}AFX_VIRTUAL
- // Implementation
- protected:
-
- // Generated message map functions
- //{{AFX_MSG(CMDIClientWnd)
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////////
- //{{AFX_INSERT_LOCATION}}
- // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
- #endif // !defined(AFX_MDICLIENTWND_H__7F7D43A4_7FDE_4215_99E7_3700998324FB__INCLUDED_)
复制代码 源文件
- // MDIClientWnd.cpp : implementation file
- //
- #include "stdafx.h"
- #include "wer.h"
- #include "MDIClientWnd.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CMDIClientWnd
- IMPLEMENT_DYNCREATE(CMDIClientWnd, CFrameWnd)
- CMDIClientWnd::CMDIClientWnd()
- {
- //创建画刷
- m_Brush.CreateSolidBrush(RGB(0x99, 0xCC, 0xFF));
- }
- CMDIClientWnd::~CMDIClientWnd()
- {
- }
- BEGIN_MESSAGE_MAP(CMDIClientWnd, CFrameWnd)
- //{{AFX_MSG_MAP(CMDIClientWnd)
- ON_WM_ERASEBKGND()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMDIClientWnd message handlers
- BOOL CMDIClientWnd::OnEraseBkgnd(CDC* pDC)
- {
- //获得客户区大小
- CRect rect;
- GetClientRect(rect);
- //填充背景
- pDC->FillRect(rect, &m_Brush);
- return TRUE;
- // return CFrameWnd::OnEraseBkgnd(pDC);
- }
复制代码 然后就是在主框架窗口类的使用此类, CMDIClientWnd m_wndClient;
主框架窗口创建时调用 m_wndClient.SubclassWindow(m_hWndMDIClient);就可以设置主框架窗口的背景了。
这里m_hWndMDIClient是主框架窗口自身 的成员变量。
上位机MFC如何更改主框架窗口的颜色
|