【VC编程技巧】窗体☞3.8静态窗口分割

窗口分割在平时编成中用的特别多,Windows的资源管理器,编写代码的IDE(Visual Stdio,Eclipse)都有窗口分割,下面我们以单文档维例开始讲如何进行窗口分割!


CSplitterWnd Class

class CSplitterWnd : public CWnd

CSplitterWnd类很方便的提供了窗口分割的功能,只需下面几步就能完成窗口分割:

  • 定义CSplitterWnd对象在窗口框架类(CFrameWnd或者CMDIChildWnd)中;
  • 重载框架类成员函数CFrameWnd::OnCreateClient();
  • 在重载过的函数CFrameWnd::OnCreateClient()中,通过分割窗口类CSplitterWnd的成员方法CreateStatic,CreateView 实现窗口分割。

分割窗口类的定义:


class CMainFrame : public CFrameWnd
{
	
protected: // シリアル化からのみ作成します。
	CMainFrame();
	DECLARE_DYNCREATE(CMainFrame)

// 属性
public:

// 操作
public:

// オーバーライド
public:
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

// 実装
public:
	virtual ~CMainFrame();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:  // コントロール バー用メンバー
	CToolBar          m_wndToolBar;
	CStatusBar        m_wndStatusBar;
	
	//分割窗口对象定义
	CSplitterWnd      m_wndSplitter1;
	CSplitterWnd      m_wndSplitter2;

// 生成された、メッセージ割り当て関数
protected:
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnApplicationLook(UINT id);
	afx_msg void OnUpdateApplicationLook(CCmdUI* pCmdUI);
	DECLARE_MESSAGE_MAP()

	virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
};

框架类成员函数CFrameWnd::OnCreateClient()重载:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
	
	//各View大小的设定
	CSize sizeView1, sizeView2, sizeView3;
	CRect rectClient;
	GetClientRect(&rectClient);
	sizeView1.cx = 200;
	sizeView1.cy = rectClient.Height();
	sizeView2.cx = rectClient.Width() - sizeView1.cx;
	sizeView2.cy = 300;
	sizeView3.cx = sizeView2.cx;
	sizeView3.cy = sizeView1.cy - sizeView2.cy;

	//静态分割窗口
	BOOL bSplitterCreated1 = m_wndSplitter1.CreateStatic(this, 1,2);
	m_wndSplitter1.CreateView(0,0, RUNTIME_CLASS(CStaticSplitWndView), sizeView1, pContext);

	BOOL bSplitterCreated2 = m_wndSplitter2.CreateStatic(&m_wndSplitter1, 2, 1, WS_CHILD | WS_VISIBLE, m_wndSplitter1.IdFromRowCol(0,1));
	m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CView2),sizeView2, pContext);
	m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CView3),sizeView3, pContext);

	return bSplitterCreated1 && bSplitterCreated2;
	//return CFrameWnd::OnCreateClient(lpcs, pContext);
}







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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值