更改属性时,MFC SDI从INI读取并更新视图字符串

时间:2016-05-25 01:46:16

标签: c++ mfc sdi

第一次发布,请原谅我带来的任何不正当的礼仪。

我的标题简要介绍了我遇到的问题。我有一个学校项目,我开始使用单个文档视图的MFC应用程序,我需要在我的视图中只显示一个简单的文本但是这个文本来自一个简单的INI文件。

LPCTSTR path = _T("C:\\Users\\Steve\\Documents\\WhereDataIs.ini");
TCHAR INIValue[256];
GetPrivateProfileString(_T("SETUP"), _T("Introduction"), _T("File Could Not Be Found"), INIValue, 256, path);

好的,现在我的ini文件只包含这个......

[SETUP]

Introduction = Here is your data

到目前为止,一切进展顺利。下一步是抓住静态文本框'我在资源编辑器中创建并将其更改为来自ini的数据,这只是'这是您的数据'。

SetDlgItemText(StringToChange, INIValue);

这很完美。所以我设法根据需要改变了我想要的东西,但现在却变得困难了。我需要在使用

之前加粗整个字符串
SetDlgItemText(StringToChange, INIValue);

过去5天我遇到了很多问题。我已经尝试了我在谷歌和堆栈溢出时遇到的一切。我遇到试图使用RTF控件?试图转换为html粗体,然后回来? 8位或16位的问题? unicode或类似的东西。我已经遇到像_T("某些字符串")这样的宏,它们显然没有采用字符串类型的变量。没有什么对我有用。我真正可以使用的是某种例子,它根本不需要与我的相关。我可以用基地工作的东西。在你将我链接到另一个网站或之前的帖子之前 - 我保证你已经看过它并试了一下。我真的希望有人发布一小部分代码来帮助我入门。

1 个答案:

答案 0 :(得分:1)

您需要使用粗体字体来实现您的需求:

 m_font.CreateFont(16, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, DEFAULT_CHARSET,
 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
 DEFAULT_PITCH | FF_SWISS, _T("MS Sans Serif"));
 m_YourStaticControl.SetFont(&m_font); 

使CFont m_font;成为您班级的成员(将其放入头文件中)。

如果您想要更灵活,请使用RichEdit控件。这是辅助函数,它使用不同的样式附加文本:

void AddToRichText(CRichEditCtrl &rEdit, const CString& sNewText, COLORREF color, BOOL bBold, BOOL bUnderline, BOOL bItalic)
{
    int iTotalTextLength = rEdit.GetWindowTextLength();

    rEdit.SetSel(iTotalTextLength, iTotalTextLength);

    CHARFORMAT cf;
    cf.cbSize = sizeof(CHARFORMAT);
    cf.dwMask = CFM_COLOR | CFM_UNDERLINE | CFM_BOLD | CFM_ITALIC;

    DWORD dwEffects = CFE_AUTOCOLOR;
    if (!bBold)
        dwEffects |= CFE_BOLD;

    if (!bUnderline)
        dwEffects |= CFE_UNDERLINE;

    if (!bItalic)
        dwEffects |= CFE_ITALIC;

    cf.dwEffects = (unsigned long)~dwEffects;

    cf.crTextColor = color;
    rEdit.SetSelectionCharFormat(cf);

    rEdit.ReplaceSel(sNewText);
    rEdit.HideSelection(TRUE, FALSE);
}