程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在ComboBox中改變列表框的寬度

在ComboBox中改變列表框的寬度

編輯:vc教程

  我們經常會使用到組合框,而組合框是是有2種功能的--下拉和列表。一般情況下,列表框的寬度和選擇框是一樣寬的,但是我們有些時候確實很需要把列表框的寬度變大,一便讓我們能更好的看我們要選的東西。

  為了能有這個功能,我寫了下面的這個函數。首先得在你的對話框中添加一個的WM_CTLCOLOR的消息句柄,或者使用CComboBox的繼承類,而且在其中添加下面的代碼:

HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
{
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
  switch (nctlcolor) {
    case ctlcolor_edit:
    break;
   case ctlcolor_listbox:
    if (listwidth > 0) {
       // new width of a listbox is defined
       CRect rect;
       pwnd->GetWindowRect(&rect);
       if (rect.Width() != listwidth) {
        rect.right = rect.left + listwidth;
        pwnd->MoveWindow(&rect);
       }
    }
    break;
   }

   // todo: return a different brush if the default is not desired
   return hbr;
}

  這樣之後還沒有完全好,你還得刷新一下列表框,那樣才能隨時根據列表框中的文本的長度,而改變列表框的寬度,要想這樣的話,你還得這樣,你必須掃描列表框中的條目,還得計算其中文本的長度(通過pdc),這樣你如果再刷新列表框的話,才能一條目中比較長的來顯示。

  上面的方法是通過WM_CTLCOLOR消息來實現的,後來才知道在MFC的CComboBox類中有一個函數也可以實現同樣的功能,就是:

CComboBox::SetDroppedWidth(int width);

  通過這個函數,你可以把寬度設成你自己喜歡的值,而它的實際的寬度是下面2個值中的最大值:   

  1.你所設置的值(就是通過上面的函數所設置的值)

  2.列表框的值

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved