MFC界面问题:没有在创建工程师选择splitterwnd,应该如何添加splitterwnd功能?

alphasun 2003-06-23 10:32:41
我添加了相应的代码 CSplitterWnd 等,这些都是从以前的一个splitterwnd里面超过来的(以前的那个程序当然是好使的),但是无法得到splitterwnd,
好像还有别的玄机。
...全文
37 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphasun 2003-06-24
  • 打赏
  • 举报
回复
谢谢大青蛙了,家里的程序搞定了,的确是调用了父类的 OnCreateClient 导致的,我直接 return TRUE 就一切OK了:)
winthegame 2003-06-24
  • 打赏
  • 举报
回复
:)
alphapaopao 2003-06-23
  • 打赏
  • 举报
回复
好奇怪,我现在新创建了一个工程,试了一下,居然可以。
晚上回家再试试那个原来的工程。

谢谢青蛙了。
alphapaopao 2003-06-23
  • 打赏
  • 举报
回复
对了,我的工程是一个MDI,我的splitterwnd 放在child frame 里面,这样做是不是不对啊?我是不是应该把它放到main frame 里面?
winthegame 2003-06-23
  • 打赏
  • 举报
回复
哦.. 为保证没出错,偶是现实验的,所以里面的一些参数是随便添的。你可以根据实际情况修改。
winthegame 2003-06-23
  • 打赏
  • 举报
回复
很简单啊.
我先假定你有三个 view , CEditView, CFormView, CView. 最初默认的是CView.
后来又添加了CTreeView 和CEditView.

那么就 添加 CMainFrame 的成员变量。
CSplitterWnd m_split;
CSplitterWnd m_split1;

重载CMainframe 的 virtual function ( OnCreateClient

在里面把
//创建 1 行 2 列的 splitter
if (!m_split.CreateStatic (this,1,2))
{
TRACE("Create Static Error!");
return FALSE;
}

//创建左视图 CEditView.
if (!m_split.CreateView (0,0,RUNTIME_CLASS(CEditView),CSize(400,400),pContext))
{
TRACE("Can't Create EditView!");
m_split.DestroyWindow ();
return FALSE;
}

//将m_split1 作为 m_split的子成员创建之 2行1列
if (!m_split1.CreateStatic (&m_split,2,1,WS_CHILD|WS_VISIBLE,m_split.IdFromRowCol(0, 1)))
{
return FALSE;
}

//用 m_split1 创建CView
if (!m_split1.CreateView (0,0,pContext->m_pNewViewClass,CSize(0,200),pContext))
{
m_split1.DestroyWindow ();
return FALSE;
}

//创建CTreeView
if (!m_split1.CreateView (1,0,RUNTIME_CLASS(CTreeView),CSize(0,0),pContext))
{
m_split1.DestroyWindow ();
return FALSE;
}


就可以了啊!!
alphapaopao 2003-06-23
  • 打赏
  • 举报
回复
是静态切分的
winthegame 2003-06-23
  • 打赏
  • 举报
回复
你是动态切分还是静态切分啊?
alphasun 2003-06-23
  • 打赏
  • 举报
回复
up
alphapaopao 2003-06-23
  • 打赏
  • 举报
回复
winthegame(120斤重的大青蛙) ( ) :
是啊,是啊,我这个试验程序 的 OnCreateClient 没有调用父类的 OnCreateClient,
直接 return TRUE, 就能出现 splitter wnd。

我家里的那个程序可能调用了 父类的 OnCreateClient,并且将它的返回值返回了,
所以导致 splitterwnd 出不来,呵呵

ripyu 2003-06-23
  • 打赏
  • 举报
回复
看看深入mfc,上面有现成的例子
winthegame 2003-06-23
  • 打赏
  • 举报
回复
呵呵呵,上午忙着写程序去了, 所以没看到了你的回话了,中午吃完了饭,顺便看看。

炮炮, 我也试了试,的确,用MDI 的工程,把CSplitterwnd的通常语句 放在 child frame 里面上面是出现不了的,但放在CMainframe里面感觉明显不对,调试了一下,发现 child frame 的确也调用了CreateClient, 想了半天,怀疑CChildFrame最后默认返回的

return CMDIChildWnd::OnCreateClient(lpcs, pContext); 做了什么手脚,

于是在CChildFrame的OnCreateClient里面直接改为了return TRUE; splitterwnd就出来了,原因还没有深究,但因为CMainFrame, CChildFrame都是调用的CFrmWnd的OnCreateClient,
所以只能怀疑是消息循环的某个原因了,有空再查查了...

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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