动态分割窗口:

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. javascript: detect mobile devices or browser

    http://detectmobilebrowsers.com/ http://hgoebl.github.io/mobile-detect.js/ http://www.hand-interacti ...

  2. 从零开始学习Linux(ls命令)

    学习Linux已经两年了,可是仍然是小白一个.用过很多命令,可是很多都没记住,基础不扎实,很大程度上是不记笔记,得过且过. 从今天起,开始整理Linux笔记. Linux每个命令都有--help这个选 ...

  3. u-boot中nandflash初始化流程分析(转)

    u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...

  4. 重载赋值运算符 && 对象

    class CMessage { private: char * m_pMessage; public: void showIt()const { cout << m_pMessage & ...

  5. Maven仓库分类

    MAVEN仓库分类 Maven仓库分为:本地仓库+远程仓库两大类 远程仓库又分为:中央仓库+私服+其它公共远程仓库 1,在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件 2,Ma ...

  6. httpclient 认证方式访问http api/resutful api并获取json结果

    最近,因公司线上环境rabbitmq经常发生堆积严重的现象,于是跟运维组讨论,帮助开发个集中监控所有rabbitmq服务器运行情况的应用,需要通过java访问rabbitmq暴露的http api并接 ...

  7. linux环形buff模拟多线程信号量操作

    互斥锁mutex变量的值非0即1,只能用来表示两种状态下的临界资源.而信号量是与之类似的,用来表示可用资源的,区别在于,信号量可以表示多个可用资源的. --值为2的信号量也就是特殊的互斥锁了. 那么下 ...

  8. Android5.0新特性——阴影和剪裁(shadow)

    阴影和剪裁 View的z属性 Material Design建议为了凸显布局的层次,建议使用阴影效果,并且Android L为了简化大家的工作,对View进行了扩展,能使大家非常方便的创建阴影效果: ...

  9. How to install and configure Azure PowerShell

    https://azure.microsoft.com/en-us/documentation/articles/powershell-install-configure/ In this artic ...

  10. 数组拷贝 copyOf()

    Arrarys类的copyof方法与copyOfRange方法可以实现对数组的复制,前者是复制数组到指定的长度,后者将指定的长度复制到一个新数组中. 1.copyOf()方法 该方法提供了很多种重载形 ...