CSplitterWnd后,显示与隐藏某一个view

finder_zhang 2010-05-25 04:01:30
用 CSplitterWnd 做了2个CView,做成类似于注册表编辑器的小工具.想在菜单上控制显示与隐藏某一个view,不知道该用什么函数去实现他.

试用过网上的 CCoolBar 可以做到类似的,但我不想把我的代码作太大的修改.
只是想简单地实现控制某一个 view 窗的显示与隐藏,隐藏后再显示时,可以设回之前的位置.

如果实现了,请直接给我个代码试试,谢谢了.
...全文
433 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
finder_zhang 2010-06-11
  • 打赏
  • 举报
回复
我是看一本叫做VC++6.0开发指南的书,里面写动态分割只能一个VIEW窗分多格,而静态分割是可以分多个View窗.
regedit是静态分割.左边CTreeView,右边CListView,我自己也做了一个仿制的regedit.
不过regedit也是没有把其中一个view关起来的功能,会不会是就如他的名字一样,静态,不可以增减的?
实在试不出来的话我也只好结帖了.
向立天 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 finder_zhang 的回复:]
原来你说的动态是那样,但那样的分割,只能是对一个视图类,分开多部份来看.
[/Quote]
是么?
这我还真不清楚
我看了一下windows下的regedit就是动态的啊
finder_zhang 2010-06-11
  • 打赏
  • 举报
回复
原来你说的动态是那样,但那样的分割,只能是对一个视图类,分开多部份来看.
向立天 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 finder_zhang 的回复:]
请问下,动态切分是怎么样做的?
最好是可以这样,本来是2个,点一下菜单,变成了1个,消息的那个,窗口类对象还是在的.
然后又重新再显示出来.还是原来的窗口类对象,里面的数据还在.
[/Quote]
你不知道切分窗口分为动态切分和静态切分么?
动态切分通过鼠标拖拽就可以实现你的需求
不过具体通过代码实现我没有深入研究
幻想多巴胺 2010-06-11
  • 打赏
  • 举报
回复
finder_zhang 2010-06-11
  • 打赏
  • 举报
回复
请问下,动态切分是怎么样做的?
最好是可以这样,本来是2个,点一下菜单,变成了1个,消息的那个,窗口类对象还是在的.
然后又重新再显示出来.还是原来的窗口类对象,里面的数据还在.
向立天 2010-06-11
  • 打赏
  • 举报
回复
我简单看了看
不过最近比较忙
没有深究
提个建议吧
你不是可以考虑动态切分
youhun1990 2010-06-06
  • 打赏
  • 举报
回复
绑定。。
Eleven 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 finder_zhang 的回复:]
谢谢10楼,11楼的回复.
想问问11楼,m_cxSplitter = 4;这种保护成员,有没有哪个函数是可以改的呢?我好像MSDN没查到.

在窗建好后,重复执行DeleteView 与 CreateView 不知道能不能做到整个View窗隐藏的效果?
[/Quote]
重载CSplitterWnd类
向立天 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 finder_zhang 的回复:]
13,14楼,你又说要传我代码,留了个QQ,十几天了,都忘记了.唉.
版主,我要做的,正是你8楼说的那样的,帮想想吧.谢谢啊.
[/Quote]
结帖通知我会删除
不过我做分割窗体确实比较少
我试试吧
finder_zhang 2010-06-05
  • 打赏
  • 举报
回复
13,14楼,你又说要传我代码,留了个QQ,十几天了,都忘记了.唉.
版主,我要做的,正是你8楼说的那样的,帮想想吧.谢谢啊.
Eleven 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 finder_zhang 的回复:]
对,取消分割,回复原样,好像只有一个窗那样,然后我按菜单,又回到分割了2个的样子,不知道要怎么做,请帮帮想想办法,谢谢了.
[/Quote]
// 框架类中调用
CRect rect;
GetClientRect(&rect);
m_wndSplitter.SetColumnInfo(0, 0, 10);
m_wndSplitter.SetColumnInfo(1, rect.Width(), 10);
m_wndSplitter.RecalcLayout();
finder_zhang 2010-05-28
  • 打赏
  • 举报
回复
QQ 644832501 发来看看,谢谢了.
dianhui 2010-05-28
  • 打赏
  • 举报
回复
这样吧,你留下邮箱,我这边有一个简单改改的CUserSplitter类,发给你,反正能满足你的要求!你在框架内将CSplitterWnd类型变量改成CUserSplitter类型变量就可以了!
dianhui 2010-05-28
  • 打赏
  • 举报
回复
重载类CSplitterWnd类不就可以改了吗?你就在CMySplitter的构造函数中加上我参考代码就行了,其它什么都不要改!
finder_zhang 2010-05-28
  • 打赏
  • 举报
回复
谢谢10楼,11楼的回复.
想问问11楼,m_cxSplitter = 4;这种保护成员,有没有哪个函数是可以改的呢?我好像MSDN没查到.

在窗建好后,重复执行DeleteView 与 CreateView 不知道能不能做到整个View窗隐藏的效果?
dianhui 2010-05-28
  • 打赏
  • 举报
回复
void SetColumnInfo(int col, //指定列
int deal, //理想宽度(像素)
int cxmin); //最小宽度(像素)

框架窗口分成两列,0列,1列,每列内放一个视图,用上面这个函数即可完成单个视图显示把另一个隐藏,如下:
m_wndSplitter.SetColumnInfo(0,SplitterWidth,SplitterWidth);
m_wndSplitter.RecalcLayout();
两个菜单内的事件代码可以写成上面这样的,只是改变SplitterWidth就行了!
1) 在菜单一事件内,隐藏1列显示0列的视图:
设置SplitterWidth值为框架的客户区宽度
2)在菜单二事件内,隐藏0列显示1列视图
设置SplitterWidth值为0
由于CSplitterWnd的默认边高/度较大,所以你应该重载该类,将其边宽/高改小,以达到分隔条近似隐藏效果,使视图显示时没有分隔条控件在傍边影响美观!
给你一组改写的参考值:
m_cxSplitter = 4; //must >=4 ,拖动时拖动条的宽度
m_cySplitter = 4;
m_cxBorderShare = 0; //按下鼠标时拖动条的偏移量
m_cyBorderShare = 0;
m_cxSplitterGap= 1; //splitter拖动条的宽度
m_cySplitterGap= 1;
finder_zhang 2010-05-27
  • 打赏
  • 举报
回复
对,取消分割,回复原样,好像只有一个窗那样,然后我按菜单,又回到分割了2个的样子,不知道要怎么做,请帮帮想想办法,谢谢了.
向立天 2010-05-27
  • 打赏
  • 举报
回复
所谓隐藏就是取消分割吧
无幻 2010-05-27
  • 打赏
  • 举报
回复
我也来接分 哈哈
加载更多回复(6)

15,979

社区成员

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

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