2016-05-25 14 views
0

Первое сообщение, поэтому простите любой неправильный этикет, который я могу принести.MFC SDI читается из строки INI и строки с обновлением при изменении атрибутов

Мое название кратко описывает проблему, которую я имею. У меня есть школьный проект, в котором я начинаю с приложения 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, который является просто «Вот ваши данные».

SetDlgItemText(StringToChange, INIValue); 

, и это работает отлично. Поэтому мне удалось изменить то, что я хотел по желанию, но теперь это сложная часть. Мне нужно выделить всю строку перед использованием

SetDlgItemText(StringToChange, INIValue); 

Я столкнулся с таким количеством проблем за последние 5 дней. Я пробовал все, что у меня было на пути google и переполнение стека. Я столкнулся с попыткой использовать элемент управления RTF? пытаясь преобразовать его в html bolding, а затем вернуться? вопросы с 8 бит или 16 бит? unicode или что-то в этом роде. Я столкнулся с макросами типа _T («некоторая строка»), которая, по-видимому, не принимает переменную типа string. Ничто не сработало для меня. То, что я действительно мог использовать, - это своего рода пример, он не должен касаться моего вообще. Что-то я могу работать с базой. И прежде чем вы свяжете меня с другим сайтом или предыдущим сообщением, я гарантирую, что я уже посмотрел на него и попробовал. Мне бы очень хотелось, чтобы кто-то опубликовал небольшую часть кода, чтобы помочь мне начать.

ответ

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); 
} 
+0

нон-RichText: вам нужно будет добавить код в 'YourDlg :: OnInitDialog()' после вызова «CDialog [Ex] :: OnInitDialog () '; вызов установить шрифт будет 'StringToChange.SetFont (& m_font);' –

+0

Итак, первый вариант сработал чудеса! он взял все это и сделал это смело. Есть ли способ сделать слово «жирным» вместо всего элемента управления? учитывая, что мы устанавливаем управление WHOLE с помощью такого шрифта, я бы не подумал. В настоящее время я просматриваю элемент управления RichEdit, поэтому я могу играть с кодом, который вы предоставили. –

+0

@StevenV Для регулярного редактирования вам нужно будет сделать его владельцем. –