如何格式化结果是具有 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 变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何合并具有不同列号的两个表,同时删除具有大量列的表的重复项

如何在postgresql中查找具有特定列的表

如何获得表的排列?

在这种情况下,设计这个具有 3 个唯一列的简单表的最佳方法是啥?

MySQL:创建具有自动增量的表并将生成的值与同一表的不同列的值连接起来

寻找有关如何根据结果迭代表的示例或提示