好了,所以回答我的問題: 上面的代碼(見問題)提供了一種方式太因爲MESSAGE_SIZE是1000而不是實際字符串的大小,所以我使用了strMessage.c_str和strMessage.size()來代替Size.cx。這仍然給輸出一些小的不準確,我認爲這是因爲使用了錯誤的字體,所以我手動做了一個字體。現在它爲Size.cx提供了一個正確的值。現在,該代碼如下所示:
int iHorExt=0;
SIZE Size;
int iCurHorExt=0 // iCurHorExt is actually a global var to prevent it from being reset to 0 evertime the code executes
string strMessage="Random user input here!"
HDC hdc=GetDC(hDlg);
//Random font
HFONT hFont=CreateFont(15, 5, NULL, NULL, FW_MEDIUM, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_ROMAN, "Times New Roman");
//change font of the control
SendDlgItemMessage(hDlg, IDC_LIST1, WM_SETFONT, (WPARAM)hFont, true);
SelectObject(hdc, hFont);
int iResult=GetTextExtentPoint32(hdc, strMessage.c_str(), strMessage.size(), &Size);
if(iResult!=0)
{
iHorExt=Size.cx;
if(iHorExt>iCurHorExt)
{
iCurHorExt=iHorExt;
}
}
在後面的代碼:
SendDlgItemMessage(hDlg, IDC_LIST1, LB_SETHORIZONTALEXTENT, iCurHorExt, NULL);
編輯:
SelectObject(hdc, (HFONT)SendDlgItemMessage(hDlg, IDC_LIST1, WM_GETFONT, NULL, NULL));
工作過,也不需要你做的字體或編輯控制字體
當您將字符串設置爲特定字體時,字符串只有定義的寬度。這就是爲什麼你需要圖形上下文(hdc)。使用hdc作爲輸出窗口。 – stark 2013-04-28 13:41:59
@stark如何爲我的輸出窗口獲取hdc,這就是我卡住的地方 – BioCycle 2013-04-28 13:44:03
您可以通過調用'GetDC(hWnd)'來獲得它。 – 2013-04-28 13:53:06