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

MFC SDI read from an INI and update view string while changing attributes

第一次post,如有不当之处,敬请谅解

我的标题简要描述了我遇到的问题。我有一个学校项目,我从一个带有单个文档视图的 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

到目前为止,一切进展顺利。下一步是获取我在资源编辑器中创建的 'static text box' 并将其更改为来自 ini 的数据,即 'Here is your data'.

SetDlgItemText(StringToChange, INIValue);

这很完美。所以我设法改变了我想要的,但现在是困难的部分。在使用

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

在过去的 5 天里,我 运行 遇到了很多问题。我已经尝试了 运行 在 google 和堆栈溢出上遇到的所有问题。我 运行 尝试使用 RTF 控件?尝试转换为 html 加粗然后再返回? 8 位或 16 位的问题? unicode 或类似的东西。我已经 运行 进入像 _T("some string") 这样的宏,它显然不接受字符串类型的变量。没有什么对我有用。我真正可以使用的是某种示例,它根本不必与我的相关。我可以使用的基础。在你 link 我到另一个网站或以前的 post - 我 gua运行 给你看之前我已经看过并试过了。我真的很希望有人 post 一小部分代码可以帮助我入门。

您需要使用加粗字体才能达到您的要求:

 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; 成为您 class 的成员(将其放入头文件)。

如果您想要更多的灵活性,请使用 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);
}