24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1129  |  回复: 7

qiaoyusun

铁虫 (小有名气)

[求助] MFC里怎么给主窗口加滚动条?

图像处理的程序一般都是多窗口的模式,现在子窗口里的滚动条是有的,但是发现当打开的子窗口很多的时候,主窗口就不够大了,所以想加个滚动条,但是不知道怎么操作。如果有高手肯不吝赐教烦请稍微详细一些,比如在哪个类哪个函数里添加什么语句。多谢,多谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yalefield

金虫 (文坛精英)

老汉一枚

【答案】应助回帖

qiaoyusun(金币+5): 就是技术学得不够好啊,我知道子窗口是在initialupdate里设置大小的,但是主窗口不太会。 2011-08-02 21:05:42
qiaoyusun(金币+5): 这个设置我也有,不管用啊 2011-08-03 13:11:31
MFC中,窗口的滚动条是“自动”出现的,而不必自己添加。
但前提是您要选用哪种CView的继承类。
您要选用CScollView,那么,在InitialUpdate函数中,就可以设置窗口的大小。
那么,运行的时候,如果窗口的尺寸小于当初的设置,那么滚动条就自动出现了。

建议:认真看看《Visual C++技术内幕》
2楼2011-08-02 16:07:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-08-02 22:31:22
主窗口用的是CScrollView还是CScrollDialog?

前者可以参考http://blog.csdn.net/keyouan2008/article/details/5820602

后者可以参考http://blog.csdn.net/liang_lq/article/details/6224888
3楼2011-08-02 16:11:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qiaoyusun

铁虫 (小有名气)

引用回帖:
2楼: Originally posted by yalefield at 2011-08-02 16:07:06:
MFC中,窗口的滚动条是“自动”出现的,而不必自己添加。
但前提是您要选用哪种CView的继承类。
您要选用CScollView,那么,在InitialUpdate函数中,就可以设置窗口的大小。
那么,运行的时候,如果窗口的尺寸 ...

选的是CScollView类,InitialUpdate函数里也有设窗口的大小,但是运行的时候窗口的尺寸是变了,滚动条没有唉。
4楼2011-08-02 22:35:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yalefield

金虫 (文坛精英)

老汉一枚

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-08-03 00:09:49
引用回帖:
4楼: Originally posted by qiaoyusun at 2011-08-02 22:35:13:
选的是CScollView类,InitialUpdate函数里也有设窗口的大小,但是运行的时候窗口的尺寸是变了,滚动条没有唉。

运行的时候窗口的尺寸,是不是小于InitialUpdate函数里所有设窗口的大小?
5楼2011-08-02 23:47:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qiaoyusun

铁虫 (小有名气)

jjdg: 加代码啊 2011-08-03 22:15:40
jjdg:编辑内容 2011-08-04 13:03
jjdg: 看不见是因为你设得超过了显示器的分辨率 2011-08-04 13:04:32
引用回帖:
5楼: Originally posted by yalefield at 2011-08-02 23:47:42:
运行的时候窗口的尺寸,是不是小于InitialUpdate函数里所有设窗口的大小?

MainFrm的PreCreateWindow里设了cs的大小,主窗口确实会跟着改变。不过如果尺寸设大了超出了显示器的尺寸就看不到边了,设小了也没见有滚动条出现。View的InitialUpdate里的尺寸好像是管着窗口的。

[ Last edited by jjdg on 2011-8-4 at 13:03 ]
6楼2011-08-03 13:17:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jjdg

版主 (知名作家)

优秀版主

【答案】应助回帖

qiaoyusun(金币+10): 2011-08-06 22:07:56
引用回帖:
6楼: Originally posted by qiaoyusun at 2011-08-03 13:17:52:
MainFrm的PreCreateWindow里设了cs的大小,主窗口确实会跟着改变。不过如果尺寸设大了超出了显示器的尺寸就看不到边了,设小了也没见有滚动条出现。View的InitialUpdate里的尺寸好像是管子窗口的。

从你的代码来看,应该是你的sizeTotal太大。cs和cy分别为滚动窗口的水平、垂直分量,表明 窗口的水平、垂直方向尺寸小于其指定像素单位时将出现水平方向滚动条和垂直方向滚动条。通过修改滚动尺寸, 可改变出现滚动条的最小窗口。也就是说,你现在指定的是2000*2000像素的尺寸。一般显示器的分辨率可以达到这个尺寸?
VC++中使用CscrollView代替Cview类即可实现滚动窗口。此时,系统生成OnInitialUpdate()成员函数:
void CmyscrollView::OnInitialUpdat()
{
CscrollView::OnIntialUpdate();
Csize sizeTotal;
SizeTotal.cs=sizeToal.cy=100;
SetScrollSizes(MM-TEXT,sizeTotal);
}

这个例子里面,cs和cy分别为滚动窗口的水平、垂直分量,表明窗口的水平、垂直方向尺寸小于100像素单位时将出现水平方向滚动条和垂直方向滚动条。通过修改滚动尺寸,可改变出现滚动条的最小窗口。例如,若“sizeTotal.cx=600;sizeTotal.cy=800;”,则当窗口尺寸小于600*800时,就会出现滚动条。
努力学习!以正当途径!获得需要的知识!
7楼2011-08-04 12:58:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qiaoyusun

铁虫 (小有名气)

jjdg: 那你看看msdn,里面有例子的吧 2011-08-04 23:42:55
引用回帖:
7楼: Originally posted by jjdg at 2011-08-04 12:58:03:
从你的代码来看,应该是你的sizeTotal太大。cs和cy分别为滚动窗口的水平、垂直分量,表明 窗口的水平、垂直方向尺寸小于其指定像素单位时将出现水平方向滚动条和垂直方向滚动条。通过修改滚动尺寸, 可改变出现滚 ...

OnInitialUpdate里这个sizeTotal的设置是控制子窗口的,当子窗口的PreCreateWindow是cx和cy小于这个sizeTotal的时候就会出现滚动条。决定主窗口大小的设置在MainFrm里的PreCreateWindow函数中。但我就不知道主窗口的sizeTotal在哪里设置。
8楼2011-08-04 16:08:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 qiaoyusun 的主题更新
信息提示
请填处理意见