Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > SetCharFormat меняеться шрифт


Автор: kurlyak 12.12.2010, 20:03
У меня есть SDI приложение на базе CRichEditView. В CRichEditView в функции OnInitialUpdate() я меняю шрифт.

Код

cf.yHeight = 240;
cf.dwMask = CFM_FACE|CFM_BOLD|CFM_SIZE ;
cf.dwEffects = cf.dwEffects&~CFM_BOLD;
            
strcpy_s(cf.szFaceName,32, TEXT("Times New Roman"));
SetCharFormat(cf);


Где cf глобальная для класса переменная. Так вот все нормально- шрифт TimeNewRoman когда набираю текст. Но стоит мне переключить раскладку клавиатуры с украниского на русский или с русского на английский - шрифт меняеться- становиться какой -то другой, вроде Arial и размером по- больше. Вобщим не TimeNewRoman точно- не то что я установил. 

Кроме того у меня при запуске приложения устанавливаеться укр. раскладка клавиатуры- может это имеет значение.
Код

InitInstance()
{
......................
DWORD dwLang = MAKELANGID(LANG_UKRAINIAN, SUBLANG_DEFAULT);
CString strMl;
strMl.Format(_T("00000%x"), dwLang);
TCHAR szLang[10];

lstrcpy(szLang, strMl);
HKL kl;
kl=LoadKeyboardLayout(szLang,KLF_ACTIVATE|KLF_SETFORPROCESS);


Почему когда меняю раскладку меняеться у меня шрифт, причем весь набранный шрифт шрифтом TimeNewRoman становиться Arial. Как мне сделать что бы этого не было?

Автор: Albor 13.12.2010, 07:18
SetCharFormat() изменяет формат у текущего выделения. Попробуй использовать GetRichEditCtrl( ).SetDefaultCharFormat().

Автор: kurlyak 16.12.2010, 10:37
все равное таже фигня

Автор: Albor 16.12.2010, 12:46
Цитата(kurlyak @  16.12.2010,  10:37 Найти цитируемый пост)
все равное таже фигня 

Страно так, что аж интересно smile
Установил себе украинский язык, создал SDI приложение, добавил следующий код:
Код

void CSDI_RichView::OnInitialUpdate()
{
    CRichEditView::OnInitialUpdate();


    // Set the printing margins (720 twips = 1/2 inch)
    SetMargins(CRect(720, 720, 720, 720));

    CHARFORMAT cf={0};
    cf.cbSize = sizeof(cf);
    cf.yHeight = 440;
    cf.dwMask = CFM_FACE|CFM_BOLD|CFM_SIZE ;
    cf.dwEffects = cf.dwEffects&~CFM_BOLD;

    wcscpy_s(cf.szFaceName,32, TEXT("Times New Roman"));

    GetRichEditCtrl().SetDefaultCharFormat(cf);
}

И всё работает как надо. В InitInstance() добавил ваш код, при старте устанавливается украинский, но изменение раскладки не влияет на форматирование текста.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)