combobox之下拉宽度自适应
生活随笔
收集整理的這篇文章主要介紹了
combobox之下拉宽度自适应
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
效果對(duì)比
先看下優(yōu)化前后的效果,再看實(shí)現(xiàn)過程.
優(yōu)化前
優(yōu)化后
從上圖中可看到,combobox優(yōu)化后可以自適應(yīng)不同長(zhǎng)度的字符串,保證每個(gè)字符串都能夠顯示完整。
實(shí)現(xiàn)過程
當(dāng)我們觸發(fā)CBN_DROPDOWN事件時(shí),不再使用默認(rèn)的實(shí)現(xiàn),而是利用消息反射機(jī)制,重新計(jì)算下拉列表的寬度,具體步驟如下:
- 生成CMyComboBox類,這個(gè)類繼承CComboBox
- 將CMyComboBox綁定combobox控件
- 響應(yīng)CBN_DROPDOWN消息響應(yīng)
- 重新計(jì)算最大的下拉列表長(zhǎng)度
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());//計(jì)算最大的顯示長(zhǎng)度for (int i = 0; i < GetCount(); i++){CString strLable = _T("");GetLBText(i, strLable);nWitdh = max(nWitdh,dc.GetTextExtent(strLable).cx);}//多增加的冗余寬度nWitdh += 10;//設(shè)置下拉列表寬度SetDroppedWidth(nWitdh);//恢復(fù)實(shí)際dcdc.RestoreDC(nSaveDC); }
轉(zhuǎn)載于:https://www.cnblogs.com/jinxiang1224/p/8468317.html
總結(jié)
以上是生活随笔為你收集整理的combobox之下拉宽度自适应的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang(4)使用beego + a
- 下一篇: 微信小程序wxParse富文本解析