我将SDI使用CSplitterwnd分割成两个部分,左边是CTreeView右边是CListViev...........??->

Gosoft 2002-10-22 05:09:46
我将SDI使用CSplitterwnd分割成两个部分,左边是CTreeView右边是CListView,当CTREELIST选择条件改变时根据需要创建不同的视图,代码如下:

((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMainView),CSize(0,0),NULL);

代码运行无错,但是右边的视图不能显示 ,必须要移动一下分割条才能正确显示。
请问这是为什么?
...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gosoft 2002-10-28
  • 打赏
  • 举报
回复
我 已经解决了.谢谢各位,只要调用CSplitterWnd::RecalcLayout()即可。
Gosoft 2002-10-26
  • 打赏
  • 举报
回复
打错字了。

zhuang123456(婉薰):在ONCREATECLIENT()创建图是可以正常运行的。
但是在其它地方利用CSplitterWnd类的DeleteView()和CreateView()成员函数动态的删除和创建视图的时候,会产生以上的现象。

这是为什么?从SDK上看是什么原因呢?
Gosoft 2002-10-26
  • 打赏
  • 举报
回复
抱歉,未能及时看贴。

我先时时。
wenrich 2002-10-26
  • 打赏
  • 举报
回复
heilman(好人) 说得有些道理。 关注
heilman 2002-10-26
  • 打赏
  • 举报
回复
重写Resize()即可,好像是CMainFrame的
zhuang123456 2002-10-26
  • 打赏
  • 举报
回复
我也曾经做过一个是这样的:BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if (!m_wndSpMain.CreateStatic(this, 1, 2))
{
TRACE0("Failed to create splitter window\n");
return FALSE;
}

if (!m_wndSpMain.CreateView(0, 0, RUNTIME_CLASS(CMyTreeView),CSize(180, 200), pContext))
{
TRACE0("Failed to create left pane view\n");
return FALSE;
}
if (!m_wndSpMain.CreateView(0, 1,
RUNTIME_CLASS(CShengView), CSize(100,100), pContext))
{
TRACE0("Failed to create right pane frame\n");
return FALSE;
}
return TRUE;

return CFrameWnd::OnCreateClient(lpcs, pContext);
}
成功
beasts 2002-10-26
  • 打赏
  • 举报
回复
调用 MainFrm::RecalcLayout 试试
Gosoft 2002-10-22
  • 打赏
  • 举报
回复
我设了CSIZE(200,200),新视图的不是显示在右边的窗口中阿,而是显示左边的窗口中,要移动分割条才能正确显示为什么?
CharmDream 2002-10-22
  • 打赏
  • 举报
回复
CSize(0,0)?????
masterlee 2002-10-22
  • 打赏
  • 举报
回复
CSize(0,0),
你设置大小为0,当然看不到了。

15,979

社区成员

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

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