动态分割窗口:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (m_WndSplitter.Create(this, , , CSize(, ), pContext))
{
return TRUE;
}
else
{
return false;
}
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}

静态分割窗口:

为MainFrame类添加两个成员变量如下,并重载虚函数OnCreateClient,以实现窗口分割。

CSplitterWnd m_WndSplitter1;
CSplitterWnd m_WndSplitter2;
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);

以CView为基类创建CView2,CView3,CView4类。

在MainFrame.cpp包含所有视图头文件

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rect;
GetClientRect(&rect);
m_WndSplitter1.CreateStatic(this,,);  //创建一个静态分栏窗口,分为3行一列 m_WndSplitter1.CreateView(, , RUNTIME_CLASS(C窗口分割2View), CSize(, ), pContext);  //连接0行0列窗格 m_WndSplitter1.CreateView(, , RUNTIME_CLASS(CView2), CSize(, ), pContext);  //用cview2连接1行0列窗格 //将两行0列再分开1行2列
if (!m_WndSplitter2.CreateStatic(&m_WndSplitter1, , , WS_CHILD | WS_VISIBLE, m_WndSplitter1.IdFromRowCol(, )))
return FALSE; m_WndSplitter2.CreateView(, , RUNTIME_CLASS(CView3), CSize(, ), pContext);  //用cview3连接到第二个分行对象0行0列窗格 m_WndSplitter2.CreateView(, , RUNTIME_CLASS(CView4), CSize(, ), pContext);  //用cview4连接到第二个分行对象0行1列窗格 return TRUE;
}

固定分割窗口的分割线:

以 CSplitterWnd为基类,创建新的CFixSplitterWnd 类,并在CFixSplitterWnd 类中手动添加WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_SETCURSOR消息的消息映射和消息响应函数。

CFixSplitterWnd 类代码如下:

class CFixSplitterWnd :
public CSplitterWnd
{
public:
CFixSplitterWnd(BOOL b_lock=TRUE);
virtual ~CFixSplitterWnd();
public:
BOOL m_block;
void Lock() { m_block = true; } //锁定分割线
void UnLock() { m_block = FALSE; } //不锁定分割线 DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
};
CFixSplitterWnd::CFixSplitterWnd(BOOL b_lock)
{
m_block = b_lock;
} CFixSplitterWnd::~CFixSplitterWnd()
{
}
BEGIN_MESSAGE_MAP(CFixSplitterWnd, CSplitterWnd)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_SETCURSOR()
END_MESSAGE_MAP() void CFixSplitterWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (!m_block)
CSplitterWnd::OnLButtonDown(nFlags, point);
else
CWnd::OnLButtonDown(nFlags,point);
} void CFixSplitterWnd::OnMouseMove(UINT nFlags, CPoint point) //移动鼠标
{
// TODO: Add your message handler code here and/or call default
if (!m_block)
CSplitterWnd::OnMouseMove(nFlags, point);
else
CWnd::OnMouseMove(nFlags, point);
} BOOL CFixSplitterWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) //设置光标
{
// TODO: Add your message handler code here and/or call default
if (!m_block)
return CSplitterWnd::OnSetCursor(pWnd, nHitTest, message);
else
return CWnd::OnSetCursor(pWnd, nHitTest, message);
}

在CMainFrame类中 ,m_WndSplitter1、 m_WndSplitter2的基类由 CSplitterWnd 设置为 CFixSplitterWnd.重载的 OnCreateClient 代码如下.

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class m_WndSplitter1.Lock();
m_WndSplitter2.UnLock(); m_WndSplitter1.CreateStatic(this, , ); m_WndSplitter1.CreateView(, , RUNTIME_CLASS(C窗口分割3View), CSize(, ), pContext);//连接0行0列窗格 m_WndSplitter1.CreateView(, , RUNTIME_CLASS(CView2), CSize(, ), pContext);//用cview2连接1行0列窗格 //将两行0列再分开1行2列
if (!m_WndSplitter2.CreateStatic(&m_WndSplitter1, , , WS_CHILD | WS_VISIBLE,
m_WndSplitter1.IdFromRowCol(, )))
return FALSE; m_WndSplitter2.CreateView(, , RUNTIME_CLASS(CView3), CSize(, ), pContext);//用cview3连接到第二个分行对象0行0列窗格 m_WndSplitter2.CreateView(, , RUNTIME_CLASS(CView4), CSize(, ), pContext);//用cview4连接到第二个分行对象0行1列窗格 return TRUE; // return CFrameWnd::OnCreateClient(lpcs, pContext);
}

MFC 窗口分割的更多相关文章

  1. MFC窗口分割以及各窗口间的通讯

    一个偶然的机会又重新接触了MFC窗口的分割,自己结合资料重新写了一个窗口分割的程序,现将具体流程跟大家分享一下: 1.我们先创建一个MFC单文档类的程序,具体分割方式先将单文档整个客户区分成两行一列, ...

  2. MFC 窗口分割与通信

    一.关于CSplitterWnd类我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割. 那么我们自己如何创 ...

  3. MFC程序实现窗口分割,视图快捷插入控件和插入列表

    将视图中插入列表: 1.创建一个MFC应用程序,在MFC Wizard中,生成的类选项,如图 2.选择CListView作为基类 3.在CXXView.cpp(XX为你的程序名)重写虚函数OnInit ...

  4. VS2010 MFC中 窗口分割的实现

    分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...

  5. MFC界面分割以及挂载

     MFC中文档与视图(二) Last Edit 2013/11/19 这篇主要是介绍一下怎么去分割视图. 视图的分割分为:动态分割,静态分割.所谓的静态分割是指软件一启动视图就分割完成,而动态分割是在 ...

  6. 将Cocos2dX渲染到MFC窗口上

    引用:http://www.cnblogs.com/windeer/archive/2012/11/18/2767750.html 引言 现在智能手机已经慢慢进入大众化,移动类应用开始火爆起来,游戏类 ...

  7. 同时支持控制台和MFC窗口程序的APP

    BOOL CMyApp::InitInstance() { if ( m_bShowGui==FALSE ) { FILE *stream = NULL; AllocConsole(); // 开辟控 ...

  8. MFC窗口重绘

    Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后 ...

  9. 重写MFC窗口上的关闭按钮事件(SDI, MDI, Dialog)

    This piece of code demonstrate how to override WM_CLOSE event. 点击窗口关闭按钮,触发相关事件! 有时候,在MFC程序退出之前,我们通常会 ...

随机推荐

  1. Winform开发框架之简易工作流设计

    一讲到工作流,很多人第一反应就是这个东西很深奥,有时候又觉得离我们较为遥远,确实完善的工作流设计很多方面,而正是由于需要兼顾很多方面,一般通用的工作流都难做到尽善尽美.微软也提供了几个版本的WF框架支 ...

  2. 百度地图js根据经纬度定位和拖动定位点

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  3. c#开发工具软件集合

    visual studio 2015(自带Nuget) Resharper de4dot dnspy ILMergeGui Git 大漠插件3.1233 天使插件v4.019 Navicat_Prem ...

  4. 关于C#读取MySql数据时,返回DataTable中某字段数据是System.Array[]形式

    我在使用C#(VS2008)读取MySql数据库(5.1版本)时,返回的DataTable数据中arrivalDate字段数据显示为System.Array[]形式(程序中没有对返回的数据进行任何加工 ...

  5. Access-Control-Allow-Origin: Dealing with CORS Errors in Angular

    https://daveceddia.com/access-control-allow-origin-cors-errors-in-angular/ Getting this error in you ...

  6. 外表cms,内在wiki的系统anwiki

    比较完整面向对象的语法格式,     外表cms,内在wiki的系统   http://enanocms.org/features   比较老,php4的语法

  7. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  8. html格式化

    解决方法是: 在myeclipse中是这样解决的: 点击 myeclipse菜单栏的 window选项卡,找到下拉 perferences 选项 , 在里面快捷 "搜索" 框里面输 ...

  9. [下载] MultiBeast 6.2.1版,支持10.9 Mavericks。Mac上的驱动精灵,最简单安装驱动的方式。

    下载地址1:http://pan.baidu.com/s/1i3ier9F 下载地址2:http://www.tonymacx86.com/downloads.php?do=cat&id=3 ...

  10. linux下log4j乱码解决

    使用log4j的时候,在WIN系统的时候正常显示中文,但是发布到linux系统的时候中文就显示成乱码了 由于log4j配置文件中没有设置编码格式(encoding),所以log4j就使用系统默认编码. ...