MFC 窗口分割
动态分割窗口:
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 窗口分割的更多相关文章
- MFC窗口分割以及各窗口间的通讯
一个偶然的机会又重新接触了MFC窗口的分割,自己结合资料重新写了一个窗口分割的程序,现将具体流程跟大家分享一下: 1.我们先创建一个MFC单文档类的程序,具体分割方式先将单文档整个客户区分成两行一列, ...
- MFC 窗口分割与通信
一.关于CSplitterWnd类我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割. 那么我们自己如何创 ...
- MFC程序实现窗口分割,视图快捷插入控件和插入列表
将视图中插入列表: 1.创建一个MFC应用程序,在MFC Wizard中,生成的类选项,如图 2.选择CListView作为基类 3.在CXXView.cpp(XX为你的程序名)重写虚函数OnInit ...
- VS2010 MFC中 窗口分割的实现
分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...
- MFC界面分割以及挂载
MFC中文档与视图(二) Last Edit 2013/11/19 这篇主要是介绍一下怎么去分割视图. 视图的分割分为:动态分割,静态分割.所谓的静态分割是指软件一启动视图就分割完成,而动态分割是在 ...
- 将Cocos2dX渲染到MFC窗口上
引用:http://www.cnblogs.com/windeer/archive/2012/11/18/2767750.html 引言 现在智能手机已经慢慢进入大众化,移动类应用开始火爆起来,游戏类 ...
- 同时支持控制台和MFC窗口程序的APP
BOOL CMyApp::InitInstance() { if ( m_bShowGui==FALSE ) { FILE *stream = NULL; AllocConsole(); // 开辟控 ...
- MFC窗口重绘
Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后 ...
- 重写MFC窗口上的关闭按钮事件(SDI, MDI, Dialog)
This piece of code demonstrate how to override WM_CLOSE event. 点击窗口关闭按钮,触发相关事件! 有时候,在MFC程序退出之前,我们通常会 ...
随机推荐
- Linq专题之查询操作
前面我们主要讲解的是Linq的查询表达式,Linq不但提供了一些基本的查询表达式,还提供了数十个查询操作.比如筛选操作.聚合操作.投影操作等等.通过这些查询操作可以更方便的对数据源进行处理. Linq ...
- easyui-treegrid节点选择
easyui-treegrid本身不能实现选中父节点子节点全选,必须通过另外的方法来实现,这里说下如何通过修改节点样式添加checkbox来实现级联选择效果 首先需要格式化节点的样式 formatte ...
- js获取url传递的参数
获取URL带参数的JAVASCRIPT客户端解决方案 一.正则分析法.(我较喜欢使用正则)function GetQueryString(name) {var reg = new RegExp(“(^ ...
- 002_Razor简介
关于 Razor: Razor 语句以 @ 字符开始.在使用 Razor 声明视图模型对象的类型时要使用小写字母,如在本例文件 Index.cshtml 文件中 @model 以小写的 m 开头,但要 ...
- MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
上篇文章我们完成了 动态生成多级菜单 这个实用组件. 本篇文章我们要开发另一个实用组件:面包屑导航. 面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱 ...
- Scala on Visual Studio Code
Download and install Scala Download a scala installation package from here. Then install it. Linux s ...
- (旧)子数涵数·C语言——条件语句
首先,我们讲一下理论知识,在编程中有三种结构,分别是顺序结构.条件结构.循环结构,如果用流程图来表示的话就是: 那么在C语言中,如何灵活运用这三种结构呢?这就需要用到控制语句了. 而条件语句便是控制语 ...
- Html==>>一些经典
1.CSS overflow 属性 2.<input>标签 <input> 标签用于搜集用户信息. 1 type属性 根据不同的 type 属性值,输入字段拥有很多种形式.可以 ...
- pygame for python3.3
pygame的更新慢的令人发指,我最初使用的python是3.4版本的,无何奈何pygame不支持3.4,甚至官网只有3.2版本的.我于是将各种版本试了一遍,出现各种问题,同时我比较钟爱3.x版本,最 ...
- 关于SQL Server的WITH(NOLOCK)和(NOLOCK)
The difference is that you should be using the syntax WITH (NOLOCK) (or WITH (<any table hint> ...