我做了这样的事情,
#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