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

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

时间: 2024-10-12 12:57:38

【VC编程技巧】窗体?3.8静态窗口分割的相关文章

【VC编程技巧】窗体?3.9静态窗口分割 (固定分割线)

上一章节说明了如何静态的分割窗口,分割后窗口的分割线是可以拖动的,有的时候我们需要固定分割线,那么如何实现固定分割呢? 我们需要构造出固定分割窗口类(CFixedSplitterWnd),来实现我们对窗口的固定分割,以上一章例来说明. 1.新创建MFC类,从CSplitterWnd继承,并重载WM_LBUTTONDOWN ,WM_MOUSEMOVE 和 WM_SETCURSOR消息响应函数. 2.新构造的CFixedSplitterWnd使用方法和CSplitterWnd一样. 通过MFC类向导

【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面

(一)概要: 文章描述了怎样通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于单文档程序(SDI)我们可以很方便利用微软提供的组件Visual C++ Component (Splash Screen).因为在Microsoft Visual Studio 6.0以后的版本或者Visual C++ .NET没有提供这个组件,我们可以通过自定义对话框来实现Splash Screen

【VC编程技巧】窗体?3.6以渐变效果载入对话框

平时我们经常可以看到很多应用程序启动过程很酷,什么百叶窗,渐变,各种效果,今天我们看一下如何在程序中增加这种效果. 一.示例展示: 二.示例思路: 1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器.  函数MoveWindow():改变指定窗口的位置和大小.对顶窗口来说,位置和大小取决于屏幕的左上角;对子窗口来    说,位置和大小取决于父窗口客户区的左上角.函数原形如下: BOOL MoveWindow( HWND hWnd, int X, int Y, int nWi

【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)

所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序.代表它运行的图标称作托盘图标.我们可以通过使用小图标来控制应用程序的状态. (一)NOTIFYICONDATA Structure typedef struct _NOTIFYICONDATA { DWORDcbSize;//结构体大小 HWNDhWnd;//接受icon消息的窗口句柄 UINT uID;//icon图标的资源Id UINTuFlags;//标志一些成员是否有效 UINTuCallbackM

【VC编程技巧】窗体?3.4利用bitmap改变对话框的背景。

效果图: 代码: 1.在对话框初始化函数OnInitDialog中加载bitmap,然后创建新的画刷. // CBitmapDemoDlg メッセージ ハンドラー BOOL CBitmapDemoDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します. // IDM_ABOUTBOX は.システム コマンドの範囲内になければなりません. ASSERT((IDM_ABOUT

【VC编程技巧】窗口?3.6以渐变效果加载对话框

平时我们常常能够看到非常多应用程序启动过程非常酷.什么百叶窗.渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果. 一.演示样例展示: 二.演示样例思路: 1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器. ? 函数MoveWindow():改变指定窗体的位置和大小.对顶窗体来说,位置和大小取决于屏幕的左上角;对子窗体来    说,位置和大小取决于父窗体客户区的左上角.函数原形例如以下: BOOL MoveWindow( HWND hWnd, int X, int Y

【VC编程技巧】控件?4.4ListBox控件(打造带有复选框的ListBox)

4.4ListBox控件(打造带有复选框的ListBox) 下面通过两种方式构建复选框ListBox 1.对话框中插入ListBox控件(IDC_LIST1,IDC_LIST2),如下设置属性 图1 方式一: 2.对ListBox控件(IDC_LIST1)关联控件变量m_checkListBox1,将控件变量类型CListBox -> CCheckListBox(需要手动完成). //修改控件变量类型:CListBox -> CCheckListBox CCheckListBox m_chec

【VC编程技巧】控件?4.1位图Button

4.1位图Button 给按钮增加位图,或改变按钮字体,可以让按钮达到跟炫的效果:如何给按钮增加位图,和改变按钮上文字的字体?请看下面示例! 1>创建对话框程序,建立如下对话框: 图1 资源ID说明: 左边按钮ID:IDC_BUTTON1 右边按钮ID:IDCANCEL 2>设置button属性,设置选项如下图箭头处: 图2 3>添加位图到工程,如下图箭头处: 图3 4>给左边按钮添加控件变量(利用类向导); CBitmapButton m_bitmapButton; ※如果类向导

【VC编程技巧】控件?4.2自定义EDIT(只限字母字符输入)

4.2自定义EDIT 自定义button,自定义editbox可以使button和editbox更符合自己的需求.请看下面示例:只限字母字符输入的editbox建立. 1.了解函数CWnd::SubclassDlgItem BOOL SubclassDlgItem( UINT nID, CWnd* pParent ); 说明:调用这个函数可以"动态子类化"从对话框模板中创建出来的控件:并且将控件绑定在CWnd对象上. 参数: nID   控件的ID pParent  控件父层(一般是对