无文档/视图结构中如何切分窗口

gaoxiaowei 2008-11-04 04:15:26
原先的程序中由于没有考虑到窗口视图的切分问题,因此在原先创建项目的时候直接建立单文档(无文档/视图结构的支持)
现在项目中考虑加入窗口的切分。请问如何实现?如果需要将文档/视图结构加入又该怎么做呢?
注:有文档视图结构支持的单文档窗口的切分功能是可以实现的。非常感谢!
...全文
184 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdytdhl 2011-05-14
  • 打赏
  • 举报
回复
mark
gaoxiaowei 2008-11-04
  • 打赏
  • 举报
回复
两种方法皆有效,Mackz 牛人 呵呵 多谢!结帖
菜牛 2008-11-04
  • 打赏
  • 举报
回复
如果你要保持从CWnd继承的类作为分割视图的子窗口,那么可以将其基类改为从CView继承,或者做以下修改:
头文件中添加动态创建的声明宏:
class CSDINoDVView : public CWnd
{
DECLARE_DYNCREATE(CSDINoDVView)

cpp文件中添加动态创建的实现宏:
IMPLEMENT_DYNCREATE(CSDINoDVView, CWnd)

添加WM_NCDESTROY消息的响应函数:
BEGIN_MESSAGE_MAP(CSDINoDVView, CWnd)
ON_WM_PAINT()
ON_WM_NCDESTROY()
END_MESSAGE_MAP()

void CSDINoDVView::OnNcDestroy()
{
CWnd::OnNcDestroy();

// TODO: 在此处添加消息处理程序代码
delete this;
}

这样普通的从CWnd继承的类也可以用在CSplitterWnd的子窗口中:
	m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSDINoDVView), CSize(100, 100), &cc);
菜牛 2008-11-04
  • 打赏
  • 举报
回复
和普通有文档/视图支持的框架类似,你在无文档/视图的单文档框架中也可以使用视图作为子窗口,虽然默认的是一个从CWnd继承的窗口类。原来的创建子窗口的代码是这样的:
int CSDINoDVFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

// 创建一个视图以占用框架的工作区
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("未能创建视图窗口\n");
return -1;
}

return 0;
}

改成这样:
int CSDINoDVFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

// 创建一个视图以占用框架的工作区
if (!m_wndSplitter.CreateStatic(this, 2, 1))
{
TRACE0("未能创建分割窗口\n");
return -1;
}
CCreateContext cc;
cc.m_pCurrentFrame = this;
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CView1), CSize(100, 100), &cc);
m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CView2), CSize(100, 100), &cc);
CView1和CView2是从CView类继承的子类

return 0;
}

所有用到m_wndView的地方都改成m_wndSplitter,当然去掉头文件中m_wndView的声明,改成:
	//CSDINoDVView    m_wndView;
CSplitterWnd m_wndSplitter;
qt_freelancer 2008-11-04
  • 打赏
  • 举报
回复
要么就代码移植吧!估计你写的也不多吧!
gaoxiaowei 2008-11-04
  • 打赏
  • 举报
回复
没人知道吗 ?
gaoxiaowei 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 laiyiling 的回复:]
如果需要将文档/视图结构加入又该怎么做呢?
==
1. 添加DOC/VIEW结构的,你可以参考普通SDI的结构把Frame / Doc / View 自己添加进去,

2. 你去 http://www.codeproject.com/KB/splitter/simpledlgsplitter.aspx 上面找分割对话框的示例来看看也是一样的。
[/Quote]
多谢Laiyiling的回复,我试图将 Doc / View 自己添加过了,并且应用程序类的 initinstance做了更改,程序编译没有问题,但是运行时会报错,似乎感觉还是没有全部加进去,仍然无解。。

Kudeet 2008-11-04
  • 打赏
  • 举报
回复
如果需要将文档/视图结构加入又该怎么做呢?
==
1. 添加DOC/VIEW结构的,你可以参考普通SDI的结构把Frame / Doc / View 自己添加进去,

2. 你去 http://www.codeproject.com/KB/splitter/simpledlgsplitter.aspx 上面找分割对话框的示例来看看也是一样的。
gaoxiaowei 2008-11-04
  • 打赏
  • 举报
回复
知道的进来说一下,非常感谢。
杨彦龙 2008-11-04
  • 打赏
  • 举报
回复
用CCoolBar做出來和vc6.0的界面一樣的
gaoxiaowei 2008-11-04
  • 打赏
  • 举报
回复
原先就是单文档程序
dirdirdir3 2008-11-04
  • 打赏
  • 举报
回复
原先是CDialog?
参考:http://www.nohack.cn/code/other/2006-10-05/13076.html
gaoxiaowei 2008-11-04
  • 打赏
  • 举报
回复
在线等。。。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧