MFC单文档分割窗口显示图片

继之前的“MFC打开BMP图片”今天来看看如何将一个单文档窗口进行分割。首先我们还是在之前"ShouBMP"项目的基础上完成。

  1. 向CMainFrame类中添加一个公有成员变量,类型为CSplitterWnd,变量名为m_wndSplitter.在"类视图"右键"CMainFrame",选择"添加"->“添加变量”.
    在这里插入图片描述

  2. 利用"类向导"为CMainFrame类添加OnCreateClient事件.“项目”->"类向导"如下图选择"CMainFrame"类,添加虚函数OnCreateClient.
    在这里插入图片描述

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO: 在此添加专用代码和/或调用基类
	CRect rect;
	GetClientRect(&rect);  //获取客户区坐标(左上 右下)
	if (!m_wndSplitter.CreateStatic(this, 1, 2))
		return FALSE;      //创建静态分割器窗口 1行*2列
	if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CShowBMPView), CSize(450, 450), pContext))
		return FALSE;      //创建位置(0,0)
	if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CShowBMPView), CSize(rect.Width() / 4, rect.Height()), pContext))
		return FALSE;      //创建位置(0,1)
	SetActiveView((CShowBMPView*)m_wndSplitter.GetPane(0, 0));
	return TRUE;
	//return CFrameWndEx::OnCreateClient(lpcs, pContext);
}

添加代码如下,同时向MainFrm.cpp中添加#include “ShowBMPView.h”,
向ShowBMPView.h中添加#include “ShowBMPDoc.h”,否则会出现"XXXDoc missing ‘;’ before ‘*’"错误提示:

在这里插入图片描述

===============================================================================================================================================================================================================
接下来普及一下CSplitterWnd类基础知识

CSplitterWnd类提供一个分离器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口.窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗口ID的任何CWnd对象.

CSplitterWnd::Create
BOOL Create(
	CWnd* pParentWnd,
	int nMaxRows,
	int nMaxCols,
	SIZE sizeMin,
	CCreateContext* pContext,
	DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT,
	UINT nID = AFX_IDW_PANE_FIRST
);

Create:创建一个动态的分隔器窗口并将它与一个CSplitterWnd对象连接.参数:
pParentWnd表示切分窗口的父框架窗口;
nMaxRows,nMaxCols是创建切分窗口的最大列数和行数(动态创建的分割窗口的窗格数目不能超过2x2);
sizeMin指出显示一个窗格所需的最小尺寸;
pContext指向一个CCreateContext结构的指针(多数情况这个值可以是传递给父框架窗口的pContext);
dwStyle指定窗口的风格;
nID此窗口的子窗口ID(如果分隔器窗口不是嵌套另一分隔器窗口中,则ID可以是AFX_IDW_PANE_FIRST).

CSplitterWnd::CreateStatic
BOOL CreateStatic( 
	CWnd* pParentWnd,
	int nRows,
	int nCols,
	DWORD dwStyle = WS_CHILD | WS_VISIBLE,
	UINT nID = AFX_IDW_PANE_FIRST
);

CreateStatic:创建一个静态的分隔器窗口并将它与一个CSplitterWnd对象连接.参数:
pParentWnd表示切分窗口的父框架窗口;
nRows行数.该值不能超过16;
nCols列数.这个值必须不超过16;
dwStyle指定窗口的风格;
nID此窗口的子窗口ID(如果分隔器窗口不是嵌套另一分隔器窗口中,则ID可以是AFX_IDW_PANE_FIRST).

CSplitterWnd::CreateView
virtual BOOL CreateView( 
	int row, 
	int col, 
	CRuntimeClass* pViewClass, 
	SIZE sizeInit, 
	CCreateContext* pContext 
);

CreateView:在一个分隔器窗口中创建一个窗格.参数:
row指定用来放置新视的分隔器窗口行;
col指定用来放置新视的分隔器窗口列(最多创建16*16窗口);
pViewClass指定新视的CRuntimeClass;
sizeInit指定新视的初始尺寸;
pContext 指向用来创建此视的创建环境的指针(该pContext被传递给创建此分隔器窗口的父框架的重载的OnCreateClient成员函数).

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值