Форум программистов CodeGuru
18 Январь 2018, 18:02:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

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

Сообщений: 36


Просмотр профиля
« : 13 Февраль 2007, 21:33:55 »

У меня окно "вид" производное от CScrollView.  Через CFontDialog я выбираю
  шрифт, при этом заполняется структура LOGFONT и затем:
                                        CFont m_font;     LOGFONT m_lf;  CDC* pDC;
                                    m_font.CreateFontIndirect(&m_lf );
                                        pDC->SelectObject( m_font );
  Для редактирования информации я накладываю окошко CRichEditCtrl  m_rich;
  Передаю все параметры из LOGFONT-а в CHARFORMAT, а дальше не знаю,
  что делать. Какой метод создаёт шрифт из структуры CHARFORMAT.
  Как сделать, чтобы этим шрифтом пользовался не "вид", а RichEdit.
  Можно ли получить полное совпадение двух шрифтов, или CView и RichEdit
  используют разные библиотеки шрифтов. У меня на компьютере стоит
  Windows-98.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 15 Февраль 2007, 22:31:37 »

В RichEdit надо шрифт устанавливать для фрагмента текста.
Это в случае CRichEditCtrl делается через SetSelectionCharFormat.
Этому методу передается структура CHARFORMAT или CHARFORMAT2. Назначение некоторых полей этих структур схоже с назначением полей . Короче, надо создать экземпляр CHARFORMAT и заполнить его поля на основе значений из LOGFONT. А потом можно уже устанавливать шрифт в ричедит при помощи SetSelectionCharFormat.
Записан

torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #2 : 18 Февраль 2007, 19:44:38 »

      Сделал всё как нужно, но со шрифтами не то что надо. У RichEdit непонятный
  запутанный алгоритм. Вообще-то я делаю редактор данных с редактированием
  всех колонок, так может я выбрал тупиковый метод и делать нужно по другому,
  например, на основе CScrollView  без RichEdit и делат всё самому, почти как в DOS-    
  Может быть есть мнение на этот счёт?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #3 : 19 Февраль 2007, 00:45:58 »

Цитировать
Сделал всё как нужно, но со шрифтами не то что надо. У RichEdit непонятный
запутанный алгоритм.

Да вроде, все нормально там - шрифт меняется для выделенного текста. Можно по-умолчанию шрифт задать.
Возможно, с отступами междустрочными, итд что то не так ?
Цитировать
Вообще-то я делаю редактор данных с редактированием
всех колонок, так может я выбрал тупиковый метод и делать нужно по другому,
например, на основе CScrollView без RichEdit и делат всё самому, почти как в DOS-
Может быть есть мнение на этот счёт?

А можно тогда поподробнее задачу описать - что должно как выглядеть ?
Записан

torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #4 : 21 Февраль 2007, 19:02:00 »

     У меня есть таблица, допустим, три графы. Левая-"наименование изделия", средняя-
  "количество", правая-"цена". На каждую графу есть буфер типа char[j]-где i-номер строки,
   j-номер символа в строке. Всё это нужно менять, добавлять, удалять и т.д. Вот я и думал,
  что с использованием RichEdit это будет удобно делать. Наложил в нужное место окошко
  RichEdit и в нём автоматически обрабатываются клавиши: Right, Left, Del, Backspace и
  вставка символа. Так оно и есть, но тогда шрифт нужно использовать   Courier New,
  только он совпадает в окне "вид" от CScrollView и в RichEdit.
 А если совсем не использовать RichEdit, то все эти клавиши нужно самому обрабатывать,
  т.е. менять буфер, выводить в то же место и передвигать каретку. Но зато шрифт можно
  использовать любой. В каждом способе ещё вылезут "подводные камни", поэтому я и
  подумал, что, если кто делал такой редактор, то мог бы дать заранее дельный совет.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #5 : 22 Февраль 2007, 00:47:21 »

Сдается мне, что будет достаточно обычного EDIT - а (в MFC враппер CEdit).
Вот ему то точно можно шрифт прямо так установить - через WM_SETFONT (или через CWnd::SetFont в MFC, передавая указатель на объект CFont).
Записан

torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #6 : 22 Февраль 2007, 21:36:48 »

     Спасибо. Попробую. Пока не знаю, что получится.
Записан
torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #7 : 25 Февраль 2007, 19:34:51 »

     С шрифтом получилось, но , как установить цвет шрифта и цвет фона окна Edit.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #8 : 25 Февраль 2007, 19:54:59 »

Это надо обрабатывать WM_CTLCOLOR в родительском контроле (в списке в данном случае).
Визардом можно добавить в класс контрола обработчикOnCtlColor
Код:
afx_msg HBRUSH OnCtlColor(
  CDC* pDC,
  CWnd* pWnd,
  UINT nCtlColor
);

В ней либо по указателю pWnd, либо по дескриптору pWnd->m_hWnd определяется, тот ли это контрол, которому надо менять цвет текста. Если да, то вызывается pDC->SetTextColor. и устанавливается нужный цвет текста.
Для установки цвета фона надо возвращать дескриптор кисти нужного цвета. Если цвет - произвольный, кисть надо создать, хранить, а потом корректно удалять. Или можно возвращать результат вызова GetSysColorBrush.
Записан

torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #9 : 27 Февраль 2007, 21:00:26 »

     Оказалось, что OnCtlColor вызывается в класс CDialog, т.е., если в диалоговом окне есть контрол Edit.  У меня Edit расположен в "виде" от CScrollView  и ClassWizard не устанавливает этот метод.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #10 : 28 Февраль 2007, 07:16:48 »

Можно дописать руками в CScrollView по аналогии - так же как в диалоге абсолютно.
Контрол просто шлет WM_CTLCOLOR своему родителю.
Записан

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

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