如何格式化结果是具有 3 列的表的 CString 变量?
Posted
技术标签:
【中文标题】如何格式化结果是具有 3 列的表的 CString 变量?【英文标题】:How can I format a CString variable that the result is a table with 3 columns? 【发布时间】:2014-12-10 10:56:44 【问题描述】:我正在使用 Visual Studio 2013 中的 MFC 应用程序,我想格式化变量 CString 以显示在编辑控件框的列中。
我已经向编辑控件框添加了一个变量 CString,但我无法格式化文本以显示在列中。
这是我的代码:
val=_T("column1 column2 column3")
cycle for
val.Format(val+_T("%-15ls%-20s%-15ls"),val1,val2,val3);
val = val + _T("\r\n");
end of cicle for
该代码位于 For 循环中,其中 val1、val2 和 val3 是 CStrings 变量,并且在每次迭代中都会发生变化。
我的结果是这样的:
colum1 colum2 colum3
hello world transform ice cream
hello google pizza
my name is Ze transform ice cream
我想要:
colum1 colum2 colum3
hello world transform ice cream
hello google pizza
my name is Ze transform ice cream
你能帮帮我吗?
【问题讨论】:
只有在编辑控件中使用的字体是固定间距如“Courier”时才能这样做。 非常感谢!!!你救了我的命。有效。我更改了 mfc 应用程序的所有字体并且它起作用了。可以只更改编辑框中的字体吗? 【参考方案1】:您的字体必须是固定间距,例如“Courier New”。
要更改编辑框的字体,请在OnInitDialog
:
CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
CFont *pf = pEdit->GetFont();
LOGFONT lf ;
pf->GetLogFont(&lf);
_tcscpy(lf.lfFaceName, _T("Courier New"));
m_Font.CreateFontIndirect(&lf);
pEdit->SetFont(&m_Font);
然后放
CFont m_Font;
在对话框类的声明中。
【讨论】:
它没有用。我将代码放在 OnInitDialog 中,它给了我一些小错误。我不得不改变两件事:_tcscpy 到 wcscpy_s 和 CFont m_font 到 CFont m_Font。通过此更改,代码运行没有任何问题,但它没有更改任何类型的字体。也许是因为我在编辑框中添加了一个变量,它是一个 CString。还有其他方法可以更改字体类型吗? 我做到了!感谢您的帮助。我把代码放在了错误的地方。我只需要改变我之前说的两件事,它就可以工作。谢谢你的帮助;)【参考方案2】:设置字体后似乎并非所有控件都会更新。您为 CEdit 控件设置了什么样式?
SetFont(&mFont);后尝试手动更新;
pEdit->Invalidate();
pEdit->UpdateWindow();
(我无法评论上面的评论,所以我对上面的评论在这里)
【讨论】:
以上是关于如何格式化结果是具有 3 列的表的 CString 变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何合并具有不同列号的两个表,同时删除具有大量列的表的重复项
在这种情况下,设计这个具有 3 个唯一列的简单表的最佳方法是啥?