如果没有动态使用MoveWindow之类的函数重新确定ComboBox的大小,在资源编辑框内手动下拉的高度就是程序运行起来的下拉框的实际高度.假如上述成立. 我有三个程序,其中两个都没问题,就是说下拉框的高度仅在资源编辑框内手动下拉指定,如果数据多的话,下拉项自动出现滚动条.但第三个程序无论下拉框下拉到多大.运行起来都是没有滚动条,且完整显示所有数据.后来在属性卡里勾选上no integral height.问题就解决了.1.为什么前两个程序不需要设置no integral height,运行起来没有问题
2.网上有的说integral height是完整显示所有数据的意思,那么选中no intergal height 也就是说不需要完整显示的意思,这一点放到第三个程序上是成立的,但放在前两个程序上不成立,因为前两个程序没有选中这一项,也是没有完整显示.
3.还有说no integral height 是指下拉框允许显示某条数据的一部分,这个我自己变换下拉框高度试了下,的确是这样.那么到底no integral height 是什么意思.如果是第3条说的那样(我试验了,确实这样),那么它就跟下拉框的高度无关了,但为什么第三个程序还要勾选上它,而前两个程序却又不需要..很费解..望各位高手指点....谢谢!..

解决方案 »

  1.   

    OwnerDraw看到这属性没,这个选上的话no integral height是无效的,,,,
      

  2.   

    msdn关于 no integral height 的解释:
    CBS_NOINTEGRALHEIGHTSpecifies 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就不必关心显示完全不完全了,只管用预先设计的高度..,以上也仅是个人的一点推论而已,不敢保证正确性..
      

  3.   


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

  4.   

    现在我的情况是下拉列表的高度,在Debug下和Release下是不一样的。
    Debug下和资源编辑器中高度应该是一致的,但是Release下明显高出许多。
      

  5.   

    你的第三个ComboBox跟前两个是不是不在同一个工程里?是这样,目前发现ComboBox使用Unicode编译,如果不指定CBS_NOINTEGRALHEIGHT,它的下拉框高度就会自动增长,原因暂未知。