一个简单的ComboBox下拉框高度的问题

weed2007 2010-11-19 09:52:26
如果没有动态使用MoveWindow之类的函数重新确定ComboBox的大小,在资源编辑框内手动下拉的高度就是程序运行起来的下拉框的实际高度.

假如上述成立.

我有三个程序,其中两个都没问题,就是说下拉框的高度仅在资源编辑框内手动下拉指定,如果数据多的话,下拉项自动出现滚动条.但第三个程序无论下拉框下拉到多大.运行起来都是没有滚动条,且完整显示所有数据.后来在属性卡里勾选上no integral height.问题就解决了.

1.为什么前两个程序不需要设置no integral height,运行起来没有问题
2.网上有的说integral height是完整显示所有数据的意思,那么选中no intergal height 也就是说不需要完整显示的意思,这一点放到第三个程序上是成立的,但放在前两个程序上不成立,因为前两个程序没有选中这一项,也是没有完整显示.
3.还有说no integral height 是指下拉框允许显示某条数据的一部分,这个我自己变换下拉框高度试了下,的确是这样.

那么到底no integral height 是什么意思.如果是第3条说的那样(我试验了,确实这样),那么它就跟下拉框的高度无关了,但为什么第三个程序还要勾选上它,而前两个程序却又不需要..

很费解..望各位高手指点....谢谢!..
...全文
1226 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiyazw 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 dyzhen 的回复:]
如果没有动态使用MoveWindow之类的函数重新确定ComboBox的大小,在资源编辑框内手动下拉的高度就是程序运行起来的下拉框的实际高度.

假如上述成立.

我有三个程序,其中两个都没问题,就是说下拉框的高度仅在资源编辑框内手动下拉指定,如果数据多的话,下拉项自动出现滚动条.但第三个程序无论下拉框下拉到多大.运行起来都是没有滚动条,且完整显示所有数据.后来在属性卡里勾选上no in……
[/Quote]
你的第三个ComboBox跟前两个是不是不在同一个工程里?是这样,目前发现ComboBox使用Unicode编译,如果不指定CBS_NOINTEGRALHEIGHT,它的下拉框高度就会自动增长,原因暂未知。
mltong 2011-01-21
  • 打赏
  • 举报
回复
现在我的情况是下拉列表的高度,在Debug下和Release下是不一样的。
Debug下和资源编辑器中高度应该是一致的,但是Release下明显高出许多。
weed2007 2010-12-03
  • 打赏
  • 举报
回复
msdn关于 no integral height 的解释:
CBS_NOINTEGRALHEIGHT

Specifies that the size of the combo box is exactly the size specified by the application when it created the combo box. Normally, the system sizes a combo box so that it does not display partial items.

从网上找到一个解释:
Setting $CBS_NOINTEGRALHEIGHT when creating a combo-box (Or $LBS_NOINTEGRALHEIGHT for a ListBox) creates the box the size you specified instead of letting Windows do it's usual routine which is to attempt to make sure an item isn't partially shown.

感觉意思是

,一般情况下windows会自适应程序预先设定的下拉框高度,以在这个高度内显示最合适的个数个记录,如果无法完全显示所有记录,就自动产生滚动条.所以通常并不需要设置这个属性,windows便以预先设计的高度显示.

但是有时windows始终无法在这个预先设定的高度内显示合适个数个记录(因为默认情况下,windows得保证每条记录都是完整显示的,不能被遮住一部分),然后它就自作主张的调整下拉框高度,直到能适应.所以就造成显示的高度与预先设计的高度不一致了.

为保证windows始终使用预先设计的高度,就增加了个属性CBS_NOINTEGRALHEIGHT,允许windows显示某条记录的一部分.此时windows就不必关心显示完全不完全了,只管用预先设计的高度..,

以上也仅是个人的一点推论而已,不敢保证正确性..
ballsky 2010-12-03
  • 打赏
  • 举报
回复
关注下
weed2007 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 begges 的回复:]

引用 4 楼 dyzhen 的回复:
msdn关于 no integral height 的解释:
CBS_NOINTEGRALHEIGHT

Specifies that the size of the combo box is exactly the size specified by the application when it created the combo box. No……
[/Quote]

如果我上面的推论成立的话,结论是这样:

假设有100条数据,我三个程序都设置一个高度,只能够显示10条数据,剩下的就滚动条显示了

前两个程序显示时:
这个高度正好容纳10条,自然,高度就是设置的高度,正常;

第三个程序显示时:
(1)假如这个高度只能容纳9条半,windows会自动调整高度,一直调整到使其必须正好显示整数条记录(不一定是10条,有可能是11、12或15等等),所以,高度就变了
(2)但是,如果设置上CBS_NOINTEGRALHEIGHT,就等于告诉windows显示的时候不必非得完整显示一条记录,这样windows自己就不调整了,设置成多大它就显示成多大,这时的显示结果就是,高度是预先设置的高度,但是最下面那条记录可能只显示一部分

所以,前两个程序不必设置CBS_NOINTEGRALHEIGHT,而第三个就得设置CBS_NOINTEGRALHEIGHT

begges 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dyzhen 的回复:]
msdn关于 no integral height 的解释:
CBS_NOINTEGRALHEIGHT

Specifies that the size of the combo box is exactly the size specified by the application when it created the combo box. Normally, the system si……
[/Quote]

但你那三个程序到底咋回事儿?怎么会不一样?
andywei1982 2010-12-02
  • 打赏
  • 举报
回复
OwnerDraw看到这属性没,这个选上的话no integral height是无效的,,,,
xjlzyi 2010-12-02
  • 打赏
  • 举报
回复
结无满意的答案就好了
weed2007 2010-12-02
  • 打赏
  • 举报
回复
没有回复 怎么结贴呢?

16,551

社区成员

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

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

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