标题:怎样才能添加底部控制窗口呢?
只看楼主
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
 问题点数:0 回复次数:12 
怎样才能添加底部控制窗口呢?
我想在程序的底部添加一个底部控制窗口,就像visual studio的一样,当上面的视图发生改变时,这个控制窗口的内容也随着变化,开始的时候想用窗口分割做,可是效果不太理想,于是想如果能加入一个和vs一样的控制窗口就好了,之前没做过类似的东西,有没有谁也用过这样的窗口,能大概说一下怎么做吗?不胜感激!
搜索更多相关主题的帖子: 窗口 效果 视图 visual studio 
2006-10-03 22:30
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
切分窗口是最简单的方法,可以看看书,或者在精华区里找我写的一篇分割窗口的文章。
其他实现方法可以利用DialogBar之类的。

http://myajax95./
2006-10-06 03:15
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
得分:0 

参考书上的例子做了一下,窗口分割开了,可是分割的大小却总变,本来我是打算把窗口分成5:1的两个,运行以后开始没有小窗口,最大化以后出来两个差不多大的,这是我的代码,能帮忙看看有什么问题吗?谢谢 (CSplitterWnd m_wndSplitter;)

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
CRect rcClient(0, 0, 0, 0);
GetClientRect(rcClient);

if(m_wndSplitter.CreateStatic(this,2,1)==NULL)
return FALSE;
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyWorkView),CSize(rcClient.Width(), rcClient.Height()*5/6),pContext);
m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(COperateView),CSize(rcClient.Width(), rcClient.Height()/6),pContext);
return TRUE;
}


生活充满阳光,快乐无处不在
2006-10-09 09:16
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
运行以后开始没有小窗口//不会的,会有窗口的。

最大化以后出来两个差不多大的//没有响应OnSize,在那里面去处理,应该可以。

试试MoveWindow可能可以。用GetPane应该能得到。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-09 10:03
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
得分:0 
以下是引用wfpb在2006-10-9 10:03:59的发言:
运行以后开始没有小窗口//不会的,会有窗口的。

最大化以后出来两个差不多大的//没有响应OnSize,在那里面去处理,应该可以。

试试MoveWindow可能可以。用GetPane应该能得到。

能说的详细点吗?OnSize是自己加上去的吧?主要处理什么呢?


生活充满阳光,快乐无处不在
2006-10-09 10:25
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 

你不是改变框架的SIZE吗?
由于Splitter是在CreateClient时就只创建了一次,并规定了分隔条的位置。之后就不会去改变那个位置了。

所以要在OnSize里去改变位置。

OnSize是在窗口发生改变时产生的消息,WM_SIZE.

当窗口创建时,会产生两个WM_SIZE消息,然后窗体就创建成功,如果再拖动边框,就会产生这个消息了(最大化也一样)。


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-09 10:40
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
得分:0 

运行以后开始没有小窗口//不会的,会有窗口的。
确实没有小窗口,最大化以后才出线两个窗口
添加了OnSize,效果和原来的一样
CSize Up;
CSize Down;


void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);

CRect rcClient(0, 0, 0, 0);
GetClientRect(rcClient);
Up.cx=rcClient.Width();
Up.cy=rcClient.Height()*5/6;
Down.cx=rcClient.Width();
Down.cy=rcClient.Height()*5/6;
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{

if(m_wndSplitter.CreateStatic(this,2,1)==NULL)
return FALSE;
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMyWorkView),Up,pContext);
m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(COperateView),Down,pContext);
return TRUE;
}


生活充满阳光,快乐无处不在
2006-10-09 10:57
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
OnCreateClient
这个函数是响应的什么消息?

我理解是:
只是创建框架客户区时调用一次,以后就不调用了。
那么,你的OnSize相当于就什么都没做。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-09 11:16
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
得分:0 
这个函数是用来分割窗口的

生活充满阳光,快乐无处不在
2006-10-09 11:51
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
...
我说了,这是产生客户区的。

只是开始调用一次。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-10-09 12:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-94123-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.315986 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved