MFC分割视图大小问题

muyi9339 2016-04-09 09:36:47
创建了静态视图
代码如下
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类

//创建一个静态窗口,分为一行两列
if (!m_splitter.CreateStatic(this, 1, 2) )
return FALSE;

if (m_splitter1.CreateStatic(&m_splitter, 2, 1, WS_CHILD | WS_VISIBLE, m_splitter.IdFromRowCol(0, 0)) == NULL)
return FALSE;
//将FormView1类链接到第二个分栏对象的0行0列
if (m_splitter1.CreateView(0, 0, RUNTIME_CLASS(FormView1), CSize(400, 400), pContext)==NULL)
return FALSE;
//将FormView2类链接到第二个分栏对象的1行0列
m_splitter1.CreateView(1, 0, RUNTIME_CLASS(FormView2), CSize(400, 200), pContext);
//将COTDRView链接到0行1列窗格上
m_splitter.CreateView(0, 1, RUNTIME_CLASS(RightView), CSize(100, 600), pContext);
return TRUE;
}

但是,视图总是右边占据全部大小如下图:
所以重载onsize来设置视图大小,可是就会一直报错,同伴一样的代码就没有问题,所以还想请给位大神指点指点!
...全文
403 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
建筑师 2018-12-31
  • 打赏
  • 举报
回复
2016年的贴子被谁顶起来了
魏Gordon 2018-12-26
  • 打赏
  • 举报
回复
3楼和5楼 思想正确 因为OnSize会在OnCreateClient 前执行 所以,在第一次进入OnSize时 splitter是空的 还没有创建, 需要进行判断,但是3楼和5楼方法我试了没有效果一样进入执行,所以我在splitter.CreateStatic 后添加标记 m_bIsSplitterCreate = TRUE ,在onsize中先判断 if (m_bIsSplitterCreate == TRUE)
赵4老师 2016-04-13
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
Eleven 2016-04-13
  • 打赏
  • 举报
回复
OnSize中需要先判断一下HWND是否有效:
if(NULL != m_splitwnd.GetSafeHwnd())
{
 CRect  rect;
GetClientRect(...);
 m_splitwnd.SetRowInfo();
 m_splitwnd.SetColumnInfo();
 m_splitwnd.RecalcLayout();
}
schlafenhamster 2016-04-13
  • 打赏
  • 举报
回复
if(IsWindow(m_Splitter.m_hWnd))
银点 2016-04-12
  • 打赏
  • 举报
回复
debug下,单步跟踪一下,出错代码行定位
银点 2016-04-12
  • 打赏
  • 举报
回复
debug下,单步跟踪一下,出错代码行定位

15,979

社区成员

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

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