VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 575|回复: 6

[求助] 如何动态调整组合框下拉列表高度

[复制链接]
71_avatar_middle
在线会员 zzw843 发表于 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
online_admins Syc 发表于 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
ico_lz  楼主| zzw843 发表于 2018-4-9 11:11:42 | 显示全部楼层
Syc 发表于 2018-4-9 11:03
在MFC中,如何设置组合框ComboBox控件下拉列表的高度:

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


这个实现不了,之前试过,这个是效果,我把代码复制进去的效果
TIM截图20180409111024.png

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-9 11:12:14 | 显示全部楼层
zzw843 发表于 2018-4-9 11:11
这个实现不了,之前试过,这个是效果

三种办法都不行吗?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

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

第一种可以,但是我是需要动态创建的,第二种我试了没效果,第三种也是这样……
我用的是VS2013,估计跟这个没多大关系吧?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

71_avatar_middle
ico_lz  楼主| zzw843 发表于 2018-4-9 13:19:06 | 显示全部楼层
Syc 发表于 2018-4-9 11:12
三种办法都不行吗?

找到解决办法了,之前我通过SetItemHeight设置了每项的高度,结果就是下拉列表高度达到整个屏幕,后来我注释掉SetItemHeight,结果是下拉列表有一个最大高度,但不是整个屏幕,因此分析默认有一个最大显示的项的数量,通过SetMinVisibleItems设置最大显示项问题就解决了。
还是谢谢Syc!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-9 13:37:17 | 显示全部楼层
zzw843 发表于 2018-4-9 13:19
找到解决办法了,之前我通过SetItemHeight设置了每项的高度,结果就是下拉列表高度达到整个屏幕,后来我 ...

解决了就好!如何动态调整组合框下拉列表高度

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

GMT+8, 2018-12-15 04:47

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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