需要在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自動換行導致混亂的原因了 半形字元與全形字符混亂所致!一般情況下,我們輸入的數字 字母以及英文標點都是半形,所以佔位無法確定。它們與漢字的佔位大大的不同,由於這個原因,導致...