MFC之CListBox自動換行顯示(實測)

2021-10-05 03:59:56 字數 993 閱讀 7795

需要在listbox控制項中顯示一些資訊。

為方便檢視,不使用水平滾動條。當要輸出的字串占用的寬度超過listbox的寬度時,截斷字串,剩餘的在下一行顯示。

1. 計算listbox所佔的寬度,用getclientrect。

getclientrect返回的是客戶區的大小。當listbox中有垂直滾動條時,那麼客戶區的大小會相應調整。getclientrect返回的是去掉滾動條占用區域後剩餘的區域,即完全用來顯示內容的區域的大小。

2. 計算字串占用的寬度,用gettextextent方法。

一開始計算的不正確,明顯比實際占用的值大。

上網查,發現listbox的clientdc並沒有包含列表框字型資訊。也就是說,對話方塊建立時所使用字型並沒有「選入」clientcd。

要獲得字串真正占用的寬度,應該先呼叫getfont獲得列表框的字型資訊,然後將此字型選入clientdc中。

例如:cfont *pfont = m_list1.getfont();

cdc *pdc = m_list1.getdc();

cfont *poldfont = pdc->selectobject(pfont);

csize sz = pdc->gettextextent(str);

pdc->selectobject(poldfont);

原始碼如下:

void showinfo(clistbox *plistbox, cstring infostr)

pdc->selectobject(poldfont);

plistbox->addstring(infostr.left(len));

int strlen = infostr.getlength();

if(len != strlen)

}自己寫的乙個呼叫方式:

void cusb_testdlg::listboxshowinfo1(cstring infostr)

MFC 2 Edit Control 實現自動換行

設定屬性 multiline true auto hscroll true vertical scroll true 賦值時換行 方法一 當edit對映到一cstring時 m string m string snewstring r n updatedata false 此法只能做到自動換行,不會...

怎麼自動換牆紙

systemparametersinfo函式應用的乙個例子 vb宣告 private declare function systemparametersinfo lib user32 alias systemparametersinfoa byval uaction as long,byval up...

解決android textview自動換行問題

今天忽然發現android專案中的文字排版參差不齊的情況非常嚴重,不得不想辦法解決一下。經過研究之後,終於找到了textview自動換行導致混亂的原因了 半形字元與全形字符混亂所致!一般情況下,我們輸入的數字 字母以及英文標點都是半形,所以佔位無法確定。它們與漢字的佔位大大的不同,由於這個原因,導致...