Форум программистов CodeGuru
23 Апрель 2018, 21:34:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: CHARFORMAT  (Прочитано 16907 раз)
0 Пользователей и 1 Гость смотрят эту тему.
torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« : 25 Декабрь 2004, 08:57:46 »

Казалось бы всё просто в структуре СHARFORMAT, но работает
наполовину. Создал проект с базовым классом CRichEditView.
В файле CMyRichView.cpp пишу:
void CMyRichView::OnFont()
{
  CHARFORMAT cf;
  cf=GetCharFormatSelection();
  cf.cbSize=sizeof(cf);
  cf.dwMask=CFM_SIZE|CFM_COLOR|CFM_CHARSET;
  cf.yHeight=pika;
  cf.crTextColor=RGB(0,0,255);
  cf.bHarSet=RUSSIAN_CHARSET;           //  пробовал и другие
  cf.bPitchAndFamily=FIXED_PITCH|FF_ROMAN;  //  и другие
  if(cf.dwEffects & CFE_AUTOCOLOR) cf.dwEffects=0;
  SetCharFormat(cf);
}
 Если использовать CHARFORMAT2 cf, то ошибка трансляции уже в
 GetCharFormatSelection(). Размер шрифта изменяется, но, если
 вместо pika подставить число < 323, то информация выводится
 в RichEdit системным шрифтом с полной высотой tmHeight=13
 пиксел. Это мелкий шрифт. Если же pika >=323, то шрифт увели-
 чивается сразу в два раза, до 26 пиксел. Промежуточных значе-
 ний нет. Для проверки библиотек с шрифтами использовал класс
 CFont с функциями CreateFont() и TextOut() (программа Ex05a
 из книги Д. Д. Круглински). Работает всё нормально, значит
 библиотеки в порядке. Но CFont не используется в RichEdit.
 Далее, цвет меняется, но ширина символов разная несмотря на
 параметр FIXED_PITCH.Может быть задавать параметры системного
 шрифта,а RichEdit возьмёт их по умолчанию,но как это сделать?
    Если кто работал с этими структурами,подскажите пожалуйста,
 как получить в RichEdit шрифт любого размера и символы одина-
 ковой ширины.
    А может быть в Интернете есть литература по работе с
 базовым классом CRichEditView.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 26 Декабрь 2004, 01:02:07 »

Гм...
А может быть, поступить гораздо проще ?
Просто установить какой либо True Type шрифт, но чтобы он был пропорциональным ? То есть например Courier New.
В том же самом редакторе VC, вроде, такой же шрифт используется.
То есть немного измененный твой код:

Код:

CHARFORMAT cf;

cf = GetCharFormatSelection();

cf.cbSize = sizeof(cf);
cf.dwMask = CFM_SIZE | CFM_FACE | CFM_COLOR | CFM_CHARSET;
cf.yHeight = 600;
cf.crTextColor = RGB(0,0,255);
cf.bCharSet = RUSSIAN_CHARSET; // пробовал и другие
cf.bPitchAndFamily = FIXED_PITCH | FF_ROMAN; // и другие

static TCHAR pszFontName[] = _T("Courier New");

memcpy(&cf.szFaceName, pszFontName, sizeof(pszFontName));

if(cf.dwEffects & CFE_AUTOCOLOR)
cf.dwEffects = 0;

SetCharFormat(cf);


Цитировать
Если использовать CHARFORMAT2 cf, то ошибка трансляции уже в
GetCharFormatSelection().

Ну, да.
Если писать с использованием MFC 4.2, то приходится несколько дописывать стандартный ричедит, чтобы работать с CHARFORMAT2.
В MFC, идущем с VC NET уже везде используется CHARFORMAT2.

Цитировать
А может быть в Интернете есть литература по работе с
базовым классом CRichEditView.


Вобщем, это тот же MSDN.
CRichEditView - просто обертка вокруг контрола (виндового ричедита), как вобщем, и CRichEditCtrl.
Просто посмотри на код функции:

Код:
_AFXRICH_INLINE CRichEditCtrl& CRichEditView::GetRichEditCtrl() const
{ return *(CRichEditCtrl*)this; }

и все сразу проясниться.

Короче, для более полного представления о том, как работать с CRichEditView можно просто прочитать про CRichEditCtrl (да и вообще про Rich Edit Control) в MSDN.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!