VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 870|回复: 6

如何动态调整组合框下拉列表高度

[复制链接]
71_avatar_middle
最佳答案
0 
在线会员 发表于 2018-4-9 10:44:15 | 显示全部楼层 |阅读模式
3驿站币
最近自己学着写了一个基类为CCombox的类来实现自己的一些功能,燃后在单文档中动态创建了一个组合框,添加数据后下拉列表的高度会随着数据的添加不断放大,直到高度变成屏幕大小,从网上查了一些动态改变下拉列表高度的方法都没能实现需要的功能,下面是我添加DropDown消息的代码,单步调试发现r.bottom = r.top + 150没能改变r.bottom的值,这是怎么回事?求高手指点。
  1. void CMyComboBox::OnCbnDropdown()
  2. {
  3.         // TODO:  在此添加控件通知处理程序代码

  4.         CRect r;
  5.         GetDroppedControlRect(&r);
  6.         GetParent()->ScreenToClient(&r);
  7.         r.bottom = r.top + 150;
  8.         MoveWindow(&r);
  9. }
复制代码





上一篇:socket外网连接问题
下一篇:把视频画面同步到另一个程序中然后直播
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-4-9 11:03:27 | 显示全部楼层
在MFC中,如何设置组合框ComboBox控件下拉列表的高度:

方法一:(只适用于静态创建)
如果是从MFC资源框中拖放下拉控件,那么可以单击下拉框的向下箭头,调整弹出的虚线框,就可以实现了。

方法二:(只适用于动态创建)
在动态创建下拉控件的Create函数中,RECT变量的高度Height设置大些,下拉列表的高度 = Height - ComboBox 控件的高度

方法三:(适用于动态创建、静态创建)
捕获下拉控件的 CBN_DROPDOWN 消息,然后通过 MoveWindow 或 SetWindowPos 函数,可以实时修改下拉列表的高度

说明:
用系统 API MoveWindow、SetWindowPos,这个函数对 ComboBox 改变大小操作时改变的不是编辑框大小,而是下拉列表的大小!

方法三对应的实例如下:
  1. void CA13Box::OnDropdown()   
  2. {  
  3.     //CA13Box为CComboBox的子类  
  4.   
  5.     //设置下拉框的高度  
  6.     CRect rc;  
  7.     //如果是在主对话框中,可以使用 GetDlgItem(IDC_COMBO)->GetClientRect(&rc); 获取控件的大小  
  8.     GetClientRect(&rc);   
  9.     //SetWindowPos函数里面,第五个参数中的100,就表示下拉列表显示的高度  
  10.     SetWindowPos(NULL, 0, 0, rc.Width(), rc.Height()+100, SWP_NOZORDER|SWP_NOMOVE|SWP_SHOWWINDOW);  
  11. }
复制代码


71_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-4-9 11:11:42 | 显示全部楼层
Syc 发表于 2018-4-9 11:03
在MFC中,如何设置组合框ComboBox控件下拉列表的高度:

方法一:(只适用于静态创建)


这个实现不了,之前试过,这个是效果,我把代码复制进去的效果
TIM截图20180409111024.png
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-4-9 11:12:14 | 显示全部楼层
zzw843 发表于 2018-4-9 11:11
这个实现不了,之前试过,这个是效果

三种办法都不行吗?
71_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-4-9 11:22:38 | 显示全部楼层
Syc 发表于 2018-4-9 11:12
三种办法都不行吗?

第一种可以,但是我是需要动态创建的,第二种我试了没效果,第三种也是这样……
我用的是VS2013,估计跟这个没多大关系吧?
71_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-4-9 13:19:06 | 显示全部楼层
Syc 发表于 2018-4-9 11:12
三种办法都不行吗?

找到解决办法了,之前我通过SetItemHeight设置了每项的高度,结果就是下拉列表高度达到整个屏幕,后来我注释掉SetItemHeight,结果是下拉列表有一个最大高度,但不是整个屏幕,因此分析默认有一个最大显示的项的数量,通过SetMinVisibleItems设置最大显示项问题就解决了。
还是谢谢Syc!
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-4-9 13:37:17 | 显示全部楼层
zzw843 发表于 2018-4-9 13:19
找到解决办法了,之前我通过SetItemHeight设置了每项的高度,结果就是下拉列表高度达到整个屏幕,后来我 ...

解决了就好!如何动态调整组合框下拉列表高度
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-14 07:52

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表