关于 CSplitterWnd 分割窗体的问题,恳请高手赐教!

xxj_bob 2008-02-16 11:19:59
我在我的程序中如下创建了一个三行一列的分割窗体视图(都是从CScrollView派生),我希望最下面一个视图能固定大小,不能通过分割条改变大小,并且在我滚动鼠标滚轮时不滚动。 我该如何做呢?请大家赐教

m_splitter.CreateStatic( this, 3, 1 );
m_splitter.CreateView(0,0,RUNTIME_CLASS(CAINShowView),
Ainrc,pContext);
m_splitter.CreateView(1,0,RUNTIME_CLASS(CDINShowView),
Dinrc,pContext);
m_splitter.CreateView(2,0,RUNTIME_CLASS(CTimeShowView),
Timerc,pContext);
m_pAinView=(CAINShowView*)m_splitter.GetPane(0,0);
m_pDinView=(CDINShowView*)m_splitter.GetPane(1,0);
m_pTimeView=(CTimeShowView*)m_splitter.GetPane(2,0);
m_splitter.SetScrollStyle(WS_HSCROLL);//水平滚动,共用一个水平滚动条
RecalcLayout();
...全文
227 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-08-13
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
lcy_888 2011-07-22
  • 打赏
  • 举报
回复
不显示滚动条好像在OnInitialUpdate()中用一条语句:
SetScrollSizes(MM_TEXT, CSize(0));
dazedase 2008-03-25
  • 打赏
  • 举报
回复
实在抱歉
很久没来,没看到楼主给我发的消息,我做了一个小例子,楼主请留下邮箱,我发给你
dazedase 2008-03-25
  • 打赏
  • 举报
回复
楼上的已发,例子很小很简单,呵呵
楼主咋还不出现?
candyice 2008-03-25
  • 打赏
  • 举报
回复
dazedase 这个例子我也想要,hxb850105@163.com
谢谢了
dazedase 2008-02-18
  • 打赏
  • 举报
回复
派生一个splitter,把它的MouseMove、Up、Down都短路掉,即成固定的splitter

然后先用派生的固定的splitter建立一个两行一列的切分,上面一行是下面的高度的两倍
然后再用普通的splitter在前面分好的splitter的上面一行里嵌套再建立一个两行一列的切分,即可
qiangv 2008-02-16
  • 打赏
  • 举报
回复
SetRowInfo只是设置其初始的大小
并不能限制其不变大或变小。

不变大或变小的思路是,在重新计算的时候,如果面板的大小不是我们想要的大小,就将其调整回来,不让它变。

virtual void RecalcLayout();
继承这个,不进去,怎么可能~
你映射什么的有错误么?
xxj_bob 2008-02-16
  • 打赏
  • 举报
回复
qiangv 大侠,您好:
首先感谢你的回复,我在该多文档子窗口中重载了该虚函数(RecalcLayout)可是我拖动分割条时,并没有进入到此函数中,我那边不对呢,我想将最低下(第三行)的窗口固定大小(用 m_splitter.SetRowInfo(2,40,40);好像不行),并不想跟随其它两个窗口一起滚动,请您具体讲一下好吗?
再次感谢!
queshangxintou 2008-02-16
  • 打赏
  • 举报
回复
关注
qiangv 2008-02-16
  • 打赏
  • 举报
回复
virtual void RecalcLayout(); // call after changing sizes

static void DeferClientPos(AFX_SIZEPARENTPARAMS* lpLayout,
CWnd* pWnd, int x, int y, int cx, int cy, BOOL bScrollBar);
static void LayoutRowCol(CSplitterWnd::CRowColInfo* pInfoArray,
int nMax, int nSize, int nSizeSplitter);


上天入地,弄了很久,必须修改RecalLayout函数才行,具体的自己跟踪进去看。

15,978

社区成员

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

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