欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

combobox之下拉宽度自适应

发布时间:2023/12/20 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 combobox之下拉宽度自适应 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

效果对比

先看下优化前后的效果,再看实现过程.

优化前

优化后

从上图中可看到,combobox优化后可以自适应不同长度的字符串,保证每个字符串都能够显示完整。

实现过程

当我们触发CBN_DROPDOWN事件时,不再使用默认的实现,而是利用消息反射机制,重新计算下拉列表的宽度,具体步骤如下:

  • 生成CMyComboBox类,这个类继承CComboBox
  • 将CMyComboBox绑定combobox控件
  • 响应CBN_DROPDOWN消息响应
  • 重新计算最大的下拉列表长度

CMyComboBox类

类声明 class CMyComboBox : public CComboBox {DECLARE_DYNAMIC(CMyComboBox)public:CMyComboBox();virtual ~CMyComboBox();protected:DECLARE_MESSAGE_MAP() public:afx_msg void OnCbnDropdown(); };
BEGIN_MESSAGE_MAP(CMyComboBox, CComboBox) //消息反射声明 ON_CONTROL_REFLECT(CBN_DROPDOWN, &CMyComboBox::OnCbnDropdown) END_MESSAGE_MAP()// CMyComboBox 消息处理程序 void CMyComboBox::OnCbnDropdown() {CClientDC dc(this);int nWitdh = 10;int nSaveDC = dc.SaveDC();//获取字体信息,dc.SelectObject(GetFont());//计算最大的显示长度for (int i = 0; i < GetCount(); i++){CString strLable = _T("");GetLBText(i, strLable);nWitdh = max(nWitdh,dc.GetTextExtent(strLable).cx);}//多增加的冗余宽度nWitdh += 10;//设置下拉列表宽度SetDroppedWidth(nWitdh);//恢复实际dcdc.RestoreDC(nSaveDC); }

转载于:https://www.cnblogs.com/jinxiang1224/p/8468317.html

总结

以上是生活随笔为你收集整理的combobox之下拉宽度自适应的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。