我做了這樣的事情,
#define TAB_WIDTH 56
/*codes skipped*/
CString szItems[4] = { _T("ITEM"), _T("XXXXXXXX"), _T("YYYYYYYYYYYYYYYY"), _T("ZZZ") };
CString szValues[4] = { _T("VALUE"), _T("1.0010"), _T("-0.0009"), _T("0.1001") };
CString szStatus[4] = { _T("STATUS"), _T("Passed"), _T("Failed"), _T("Passed") };
int nTabs[3][4] = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
CDC *pDC = this->GetDC();
CFont *pOldFont = pDC->SelectObject(this->GetDlgItem(IDC_EDIT1)->GetFont());
SIZE sizeText;
for (int ni = 0; ni < 4; ni++)
{
GetTextExtentPoint32(pDC->GetSafeHdc(), szItems[ni], szItems[ni].GetLength(), &sizeText);
nTabs[0][ni] = sizeText.cx/TAB_WIDTH;
GetTextExtentPoint32(pDC->GetSafeHdc(), szValues[ni], szValues[ni].GetLength(), &sizeText);
nTabs[1][ni] = sizeText.cx/TAB_WIDTH;
GetTextExtentPoint32(pDC->GetSafeHdc(), szStatus[ni], szStatus[ni].GetLength(), &sizeText);
nTabs[2][ni] = sizeText.cx/TAB_WIDTH;
}
pDC->SelectObject(pOldFont);
int nBig[3] = { 0, 0, 0 };
nBig[0] = BiggestValue(nTabs[0], 4);
nBig[1] = BiggestValue(nTabs[1], 4);
nBig[2] = BiggestValue(nTabs[2], 4);
CString szDispStr = _T("");
for (int ni = 0; ni < 4; ni++)
{
szDispStr += szItems[ni];
for (int nj = nTabs[0][ni]; nj <= nBig[0]; nj++)
szDispStr += _T("\t");
szDispStr += szValues[ni];
for (int nj = nTabs[1][ni]; nj <= nBig[1]; nj++)
szDispStr += _T("\t");
szDispStr += szStatus[ni];
for (int nj = nTabs[2][ni]; nj <= nBig[2]; nj++)
szDispStr += _T("\t");
szDispStr += _T("\r\n");
if (ni == 0)
szDispStr += _T("\r\n");
}
this->GetDlgItem(IDC_EDIT1)->SetWindowTextW(szDispStr);
,並如預期輸出
編輯控件中顯示
並在MessageBox()顯示
here TAB_WIDTH
是我手動計算像素的寬度\t
。現在我必須通過代碼找到\t
的寬度。
我不認爲內置消息框適用於此。 – deviantfan
我同意,在自定義對話框中使用listview控件可以獲得更好的結果。 –
[mfc - 帶有豐富文本的MessageBox]的可能的副本(http://stackoverflow.com/questions/15402671/mfc-messagebox-with-rich-text) – user1