高分求解决方法!是关于窗口分割(splitter)的!高手来,灌水无分!

neverdead 2004-12-03 10:38:13
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CSize size1;
CRect rect(0, 0, 0, 0);
this ->GetWindowRect(&rect);
size1.cx = (rect.right - rect.left) / 2;
size1.cy = (rect.bottom - rect.top) / 4;
if(!m_wndSplitter.CreateStatic(this, 2, 1))
{
TRACE0("Failed to CreateStaticSpitter\n");
return FALSE;
}
if(!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CResultView), size1, pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
}
if(!m_wndSplitter2.CreateStatic(
&m_wndSplitter,
1, 2,
WS_CHILD | WS_VISIBLE | WS_BORDER,
m_wndSplitter.IdFromRowCol(1, 0)
))
{
TRACE0("Failed to create nested splitter\n");
return FALSE;
}
if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CUserView), size1, pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if(!m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CUserView2), CSize(0, 0), pContext))
{
TRACE0("Failed to create third pane\n");
return FALSE;
}
((CResultView*)(m_wndSplitter.GetPane(0, 0))) -> SetReadOnly(true);
SetActiveView((CView*)m_wndSplitter2.GetPane(0, 0));
return TRUE;
}

以上函数实现如下分割窗口:
|-----------------|
| |
|-----------------|
| | |
| | |
|-----------------|

现通过修改以上函数实现如下窗口形式:

|-----------------|
| | |
| | |
|-----------------|
| |
|-----------------|
并说明CreateView()函数的第4个参数即SIZE的具体用法
不能用SetRowInfo,即不能用
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=182284 中的类似方法
...全文
281 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveisbug 2005-03-16
  • 打赏
  • 举报
回复
接分
neverdead 2004-12-25
  • 打赏
  • 举报
回复
如果有时间的话,这倒是个不错的建议!
Mr-Chen 2004-12-19
  • 打赏
  • 举报
回复
具体你可以研究一下CSplitter类
neverdead 2004-12-18
  • 打赏
  • 举报
回复
知道为什么不行吗?

难道CSDN真的没有高手?
或是高手都喜欢潜水?
Mr-Chen 2004-12-06
  • 打赏
  • 举报
回复
不用不能用SetRowInfo好像不行吧?
Mr-Chen 2004-12-06
  • 打赏
  • 举报
回复
你这两种显示是不一样的,第一种可以而第二种嘛,反正我试过是不行的
chuanke 2004-12-06
  • 打赏
  • 举报
回复
路过
neverdead 2004-12-06
  • 打赏
  • 举报
回复
to:crystal521(水晶泪)
为什么不行?
我第一帖贴出来的代码就没有SetRowInfo!
neverdead 2004-12-05
  • 打赏
  • 举报
回复
沉的好快啊!
neverdead 2004-12-05
  • 打赏
  • 举报
回复
to:I_Love_CPP(我爱C++)
那贴出来呀,我好给分!

这个问题可以用SetRowInfo解决的!而且非常的简单!
但是,我主要是想知道CreateView的第四个参数是怎么实现的,所以
就在这里钻牛角了~~
neverdead 2004-12-05
  • 打赏
  • 举报
回复
to:I_Love_CPP(我爱C++)
代码呢?我不是和你说来坛子里贴的嘛~~
QQ那里你只是说了一下你的原理~~
但是,我不知道你那种方法管不管用!


I_Love_CPP 2004-12-05
  • 打赏
  • 举报
回复
一?
不是在QQ上已经给你讲明白了吗?
bobob 2004-12-04
  • 打赏
  • 举报
回复
size的用发:就是指定create出来的view的初始大小
bobob 2004-12-04
  • 打赏
  • 举报
回复
以下代码已经实现,自己把尺寸调整一下就可以了

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CSize size1;
CRect rect(0, 0, 0, 0);
this ->GetWindowRect(&rect);
size1.cx = (rect.right - rect.left) / 2;
size1.cy = (rect.bottom - rect.top) / 4;
if(!m_wndSplitter.CreateStatic(this, 2, 1))
{
TRACE0("Failed to CreateStaticSpitter\n");
return FALSE;
}
if(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CResultView), size1, pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
}
if(!m_wndSplitter2.CreateStatic(
&m_wndSplitter,
1, 2,
WS_CHILD | WS_VISIBLE | WS_BORDER,
m_wndSplitter.IdFromRowCol(0, 0)
))
{
TRACE0("Failed to create nested splitter\n");
return FALSE;
}
if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CUserView), size1, pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if(!m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CUserView2), CSize(0, 0), pContext))
{
TRACE0("Failed to create third pane\n");
return FALSE;
}
//((CResultView*)(m_wndSplitter.GetPane(0, 0))) -> SetReadOnly(true);
SetActiveView((CView*)m_wndSplitter2.GetPane(0, 0));
return TRUE;
}
whs1980 2004-12-04
  • 打赏
  • 举报
回复
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CSize size1;
CRect rect(0, 0, 0, 0);
this ->GetWindowRect(&rect);
size1.cx = (rect.right - rect.left) / 2;
size1.cy = (rect.bottom - rect.top) / 4;
if(!m_wndSplitter.CreateStatic(this, 2, 1))
{
TRACE0("Failed to CreateStaticSpitter\n");
return FALSE;
}
if(!m_wndSplitter2.CreateStatic(
&m_wndSplitter,
1, 2,
WS_CHILD | WS_VISIBLE | WS_BORDER,
m_wndSplitter.IdFromRowCol(0, 0)
))
{
TRACE0("Failed to create nested splitter\n");
return FALSE;
}
if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CUserView), size1, pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if(!m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CUserView2), CSize(0, 0), pContext))
{
TRACE0("Failed to create third pane\n");
return FALSE;
}

if(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CResultView), size1, pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
}
((CResultView*)(m_wndSplitter.GetPane(0, 0))) -> SetReadOnly(true);
SetActiveView((CView*)m_wndSplitter2.GetPane(0, 0));
return TRUE;
}
哈哈哈.......
I_Love_CPP 2004-12-04
  • 打赏
  • 举报
回复
我已经99.99%地解决了这个问题了。

呵呵,好高兴哦。

唯一的缺点是关闭时会报个错。
medie 2004-12-04
  • 打赏
  • 举报
回复
看来只能在创建之后设置位置信息了
因为上面的View最后才创建
neverdead 2004-12-04
  • 打赏
  • 举报
回复
错~~都错了~~~
whs1980(知秋一叶)和bobob(bobob)(★★★★★★)
给出的代码运行的结果都是
|--------|--------|
|-----------------| <------
| |
| |
| |
|-----------------|
也就是显示了不正常的结果~即下面的窗口覆盖了上面的窗口~箭头指的分割线已经贴到窗口的上边缘了

to: bobob(bobob)(★★★★★★)
我正是搞不出这个尺寸才发这个贴的!
不然我也不会发这个贴,不会来问size的用法及其具体的实现过程

继续在线等答案
有兴趣去解决的朋友也可以与我联系:
QQ : 214200729(验证窗写 “窗口分割”即可,不写验证消息不通过! )

我提供源码!
neverdead 2004-12-03
  • 打赏
  • 举报
回复
那留个QQ吧!我下了~~接下来的明天早上回复!
EnochShen 2004-12-03
  • 打赏
  • 举报
回复
EnochShen@qq.com来问我拿吧

16,471

社区成员

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

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

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