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


Автор: Dreamer_0x01 4.12.2005, 14:44
Мне нужно сделать достаточно крупный СEdit и в нем - крупные цифры.
Пытаюсь использовать для этого SetFont - меняется только тип шрифта, но не его размер. Более того, если шрифт делать маленьким, то он выводится все равно такого же размера, но какой-то "обрезанный".
Я конечно понимаю, что можно написать свой класс, в котором все нарисовать в графическом контексте устройства, но уж больно лениво извращаться.

Автор: Dray 4.12.2005, 15:26
Если использовать вместо CEdit'a CRichEdit то вот этот код работает:
Код

CFont *font = new CFont;
font->CreateFont (
    20,                        // nHeight
    0,                         // nWidth
    0,                         // nEscapement
    0,                         // nOrientation
    FW_NORMAL,                 // nWeight
    FALSE,                     // bItalic
    FALSE,                     // bUnderline
    0,                         // cStrikeOut
    ANSI_CHARSET,              // nCharSet
    OUT_DEFAULT_PRECIS,        // nOutPrecision
    CLIP_DEFAULT_PRECIS,       // nClipPrecision
    DEFAULT_QUALITY,           // nQuality
    DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
    "Arial");                 // lpszFacename
m_RichEdit.SetFont (font);

Где m_RichEdit - переменная типа control для RichEdit'a.
И еще чтобы использовать RichEdit нужно вызвать фуекцию AfxInitRichEdit перед показом окна с RichEdit'ом.

Автор: Dreamer_0x01 4.12.2005, 16:14
Такс, щас попробуем!


Цитата(Dray @ 4.12.2005, 15:26)
чтобы использовать RichEdit нужно вызвать фуекцию AfxInitRichEdit

Само собой, эт знаем ;)

Автор: JoyEx 4.12.2005, 17:11
Код

    CFont f;
    f.CreatePointFont(-500/*tenths of a point*/, "Arial");
    GetDlgItem (IDC_EDIT1)->SetFont (&f);
    f.Detach ();



Detach() обязательно!

Автор: Guest 4.12.2005, 19:37
Кромк того есть Microsoft form 2.0 editbox(ActiveX идет со студио стандартной комплектации) там он "очень похож" на edit box и там можна поставить и размер и цвет шрифта.

Автор: Dreamer_0x01 4.12.2005, 21:38
Dray
JoyEx

по "плюсу", выручили!
Добавлено @ 21:45
JoyEx

Что делает Detach(), почему DeleteObject() не достаточно?

Автор: JoyEx 4.12.2005, 22:02
Цитата(Dreamer_0x01 @ 4.12.2005, 21:38)
Что делает Detach(), почему DeleteObject() не достаточно?

Там немного не так было. CFont'вский деструктор удаляет шрифт, а EDIT потом рисует текст системным фонтом и свой курсор забывает уменьшить. Detach() "отсоединяет" Windows'ский обьект от CFont'a

Автор: Earnest 4.12.2005, 22:33
Цитата(JoyEx @ 4.12.2005, 17:11)
Detach() обязательно!

Цитата(JoyEx @ 4.12.2005, 22:02)
Detach() "отсоединяет" Windows'ский обьект от CFont'a

Тогда уж правильнее фонт хранить в своем классе - удалять-то его кто-то должен после использования? А то можешь получить утечку GDI-ресурсов.

А вообще-то поменять фонт можно еще в обработчике сообщении WM_CTLCOLOR. Один из параметро - это hDC, вот ему и вставляется новый фонт. Правда, не совсем уверена, что именно для эдита это срабатывает. Тоже, фонт нужно создать и хранить, а потом уничтожить.

А еще одна твоя тема про грязь - это оттуда же? Не после RichEdit пошла?

Это я к тому, что, если это те же окошки, что в посте про грязь, то использование рич-эдита - это, прямо скажем, из пушки по воробьям. Круче разве что ActiveX туда подсунуть. smile

Автор: Dreamer_0x01 4.12.2005, 22:44
Цитата(Earnest @ 4.12.2005, 22:33)
А еще одна твоя тема про грязь - это оттуда же? Не после RichEdit пошла?


Да, это те же самые окошки,но вот как ни странно, RichEdit такой болезнью не страдает.

Автор: Earnest 4.12.2005, 22:50
Цитата(JoyEx @ 4.12.2005, 22:02)
CFont'вский деструктор удаляет шрифт, а EDIT потом рисует текст системным фонтом и свой курсор забывает уменьшить

Может, это ответ?

Автор: Dreamer_0x01 4.12.2005, 23:03
скорее всего.

Автор: Finalist 14.6.2006, 13:00
 smile 
вопрос.....
мне надо в эдите сменить шрифт текста который будет вводится далее,
а тот что уже введен должен остаться неизменным.. ну вобщем как в любом редакторе...
или например сменить шрифт только выделенного текста...
а у меня получается поменять только весь текст...  

Автор: Coocky 14.6.2006, 15:04
Цитата(Dreamer_0x01 @  4.12.2005,  14:44 Найти цитируемый пост)
Мне нужно сделать достаточно крупный СEdit и в нем - крупные цифры.
Пытаюсь использовать для этого SetFont - меняется только тип шрифта, но не его размер. Более того, если шрифт делать маленьким, то он выводится все равно такого же размера, но какой-то "обрезанный".

Угу smile  Эх... Гибнут С++ програмисты гибнут smile 
 Все, неверное локально создаем smile smile  используем и тут же уничтажаем. И все это, 100% еще и в OnInitDialog  smile  smile 
Цитата(Dray @  4.12.2005,  15:26 Найти цитируемый пост)
Если использовать вместо CEdit'a CRichEdit то вот этот код работает:


Цитата(Guest @  4.12.2005,  19:37 Найти цитируемый пост)
Кромк того есть Microsoft form 2.0 editbox(ActiveX идет со студио стандартной комплектации) там он "очень похож" на edit box и там можна поставить и размер и цвет шрифта.

 smile 
А может вообще опустить и перейти на Delphi ? smile  А может скачать дополнительные библиотеки? 
А может вообще сделать свой блокнот размером в 500Мб ради одного шрифта? smile 
Писал 100 раз 100 топиков про локальные обьекты в
 OnInitDialog()-нет, все по барабану!!! smile 
И потом и битмапы не грузятся и шрифты не устанавливаются.. smile 


Цитата(Earnest @  4.12.2005,  22:33 Найти цитируемый пост)
А вообще-то поменять фонт можно еще в обработчике сообщении WM_CTLCOLOR. Один из параметро - это hDC, вот ему и вставляется новый фонт. Правда, не совсем уверена, что именно для эдита это срабатывает. Тоже, фонт нужно создать и хранить, а потом уничтожить.

 

Earnest,  ну если и ты туда же... smile  smile 
Впрочем, может я не прав, а потому даю пример со шрифтом а ля 50 и подчеркнутым и жирным smile  smile

Добавлено @ 15:06 
Цитата(Finalist @  14.6.2006,  13:00 Найти цитируемый пост)
или например сменить шрифт только выделенного текста...
а у меня получается поменять только весь текст...


Только CRichEdit ! Он специально для форматирования текста!
Пример-Блокнот- CEdit
WordPad- CRichEdit 

Автор: Earnest 14.6.2006, 16:01
Coocky, ну чего ты разбушевался?  smile  smile  smile 
На любые пироги существует больше одного рецепта...
Темка-то старая довольно.
 

Автор: Coocky 14.6.2006, 16:24
Цитата(Earnest @  14.6.2006,  16:01 Найти цитируемый пост)
Coocky, ну чего ты разбушевался?

 smile 
Дык пишу...пишу... smile  Все зря. smile 
Яж мзду не беру! Мне за державу обидно smile

Добавлено @ 16:26 
 smile 
Цитата(Earnest @  14.6.2006,  16:01 Найти цитируемый пост)
Темка-то старая довольно

Да не глянул я на дату smile 
Старею smile 
 

Автор: Finalist 14.6.2006, 23:57
Цитата(Coocky @  14.6.2006,  15:04 Найти цитируемый пост)
Только CRichEdit ! Он специально для форматирования текста!
Пример-Блокнот- CEdit
WordPad- CRichEdit


ты хочешь сказать, что с CEdit у меня не получится? 

Автор: Earnest 15.6.2006, 06:47
У тебя уже не получилось, не правда ли? smile  

Автор: Finalist 15.6.2006, 16:14
да оно то правда...
а вообще это реально? или ваще никак? 

Автор: Dray 15.6.2006, 16:32
Цитата(Coocky @  14.6.2006,  15:04 Найти цитируемый пост)
Только CRichEdit ! Он специально для форматирования текста!

Ну дык понятно же  smile  

Автор: Earnest 15.6.2006, 18:08
Цитата(Finalist @  15.6.2006,  17:14 Найти цитируемый пост)
а вообще это реально? или ваще никак?  

Прочти еще раз, что написал Coocky и попробуй добиться частичного изменения шрифта в Notepad. Если получится, смело берись за Edit  smile  

Автор: Finalist 15.6.2006, 18:46
Цитата(Earnest @  15.6.2006,  18:08 Найти цитируемый пост)
смело берись за Edit  smile  


Разве что перегрузить OnPaint... 

Автор: Dray 15.6.2006, 18:50
Цитата(Finalist @  15.6.2006,  18:46 Найти цитируемый пост)
Разве что перегрузить OnPaint...  

Ну конечно! Реализовать свою отрисовку гораздо проще чем использовать ричэдит! Особенно это оценит конечный пользователь. smile  

Автор: Finalist 15.6.2006, 22:48
да, дело совсем не в ричедите, мне нужно было узнать возможно ли это с CEdit..
нет так нет, я же не против... а про OnPaint, просто пошутил, но ведь, это возможно!!
А мнения конечныХ пользователей о моем едите, меня пока не интересуют  smile  

Автор: Dreamer_0x01 21.6.2006, 13:33
Да, это знамение. Я только решил вернуться на форум - и увидел поднятую свою декабрскую тему. Приятно ;)
Сорри за офтоп, больше не буду. 

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