Как динамически изменять системный шрифт ?
От: Live Россия  
Дата: 23.11.02 13:30
Оценка:
Подскажите пожалуйста как мне изменить шрифт , который использует моё приложение.
Просто когда изменяю размер окна размер шрифта остаётся прежним получается некрасиво
Re: Как динамически изменять системный шрифт ?
От: Desperado Украина  
Дата: 23.11.02 15:58
Оценка:
Здравствуйте, Live.

В обработчик события OnSize() необходимо добавить следующий код:

LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = необходимая высота шрифта;
HFONT hfont = ::CreateFontIndirect(&lf);
CFont* pfont = CFont::FromHandle(hfont);
//здесь нужно установить этот самый шрифт для CView или CWnd,
//вобщем, командой типа .(->)SetFont(pfont);
//здесь ОнСайз()
::DeleteObject(hfont);
Типа усё
г. Киев, КЦ ПИБ
инженер-программист
Re[2]: Как динамически изменять системный шрифт ?
От: Live Россия  
Дата: 23.11.02 16:52
Оценка:
Здравствуйте, Desperado, Вы писали:

        LOGFONT lf; 
    memset(&lf, 0, sizeof(LOGFONT)); 
    lf.lfHeight = 10; 
    HFONT hfont = ::CreateFontIndirect(&lf); 
    CFont* pfont = CFont::FromHandle(hfont); 
    this->SetFont(pfont,TRUE);


Это я написал в OnSize CChildMDI и шрифт не меняется , может я что то не так сделал
Re: Как динамически изменять системный шрифт ?
От: Ken Keray Россия  
Дата: 24.11.02 17:11
Оценка:
Здравствуйте, Live, Вы писали:

L>Подскажите пожалуйста как мне изменить шрифт , который использует моё приложение.

L>Просто когда изменяю размер окна размер шрифта остаётся прежним получается некрасиво

А какое приложение, из чего состоит?
Каждый элемент недиалогового приложения имеет свой шрифт.
Keray
Re[3]: Как динамически изменять системный шрифт ?
От: Patalog Россия  
Дата: 25.11.02 08:56
Оценка:
Здравствуйте, Live, Вы писали:

L>Здравствуйте, Desperado, Вы писали:


L>
L>        LOGFONT lf; 
L>    memset(&lf, 0, sizeof(LOGFONT)); 
L>    lf.lfHeight = 10; 
L>    HFONT hfont = ::CreateFontIndirect(&lf); 
L>    CFont* pfont = CFont::FromHandle(hfont); 
L>    this->SetFont(pfont,TRUE);

L>


L>Это я написал в OnSize CChildMDI и шрифт не меняется , может я что то не так сделал


Ну, ежели ты действительно делаешь ::DeleteObject(hfont); как тебе посоветовал предыдущий оратор, то ничего удивительного нет.
Почетный кавалер ордена Совка.
Re[4]: Как динамически изменять системный шрифт ?
От: Live Россия  
Дата: 25.11.02 16:25
Оценка:
Здравствуйте, Patalog, Вы писали:

P>Здравствуйте, Live, Вы писали:


L>>Здравствуйте, Desperado, Вы писали:


L>>
L>>        LOGFONT lf; 
L>>    memset(&lf, 0, sizeof(LOGFONT)); 
L>>    lf.lfHeight = 10; 
L>>    HFONT hfont = ::CreateFontIndirect(&lf); 
L>>    CFont* pfont = CFont::FromHandle(hfont); 
L>>    this->SetFont(pfont,TRUE);

L>>


L>>Это я написал в OnSize CChildMDI и шрифт не меняется , может я что то не так сделал


P>Ну, ежели ты действительно делаешь ::DeleteObject(hfont); как тебе посоветовал предыдущий оратор, то ничего удивительного нет.


Я и так и этак пробовал всё равно не получается.
Re[2]: Как динамически изменять системный шрифт ?
От: Live Россия  
Дата: 25.11.02 16:32
Оценка:
Здравствуйте, Ken Keray, Вы писали:

KK>Здравствуйте, Live, Вы писали:


L>>Подскажите пожалуйста как мне изменить шрифт , который использует моё приложение.

L>>Просто когда изменяю размер окна размер шрифта остаётся прежним получается некрасиво

KK>А какое приложение, из чего состоит?

KK>Каждый элемент недиалогового приложения имеет свой шрифт.

MDI приложение. Менять шрифт надо для каждого Child окна и всех элементов которые в нём находятся.
Re[2]: Как динамически изменять системный шрифт ?
От: Live Россия  
Дата: 25.11.02 16:48
Оценка:
Здравствуйте, Ken Keray, Вы писали:

KK>Здравствуйте, Live, Вы писали:


L>>Подскажите пожалуйста как мне изменить шрифт , который использует моё приложение.

L>>Просто когда изменяю размер окна размер шрифта остаётся прежним получается некрасиво

KK>А какое приложение, из чего состоит?

KK>Каждый элемент недиалогового приложения имеет свой шрифт.

Мои поиски на эту тему в MSDN остановились на Stock Font Property которое используется в ActiveX, но до конца я так и не разобрался. Может кто нибудь сможет мне в кратце объяснить что такое ActveX и зачем он нужен, ну или хотя бы ссылочку какую-нибудь подкинет
Re[3]: Как динамически изменять системный шрифт ?
От: Ken Keray Россия  
Дата: 27.11.02 19:27
Оценка:
Здравствуйте, Live, Вы писали:

L>Здравствуйте, Ken Keray, Вы писали:


KK>>Здравствуйте, Live, Вы писали:


L>>>Подскажите пожалуйста как мне изменить шрифт , который использует моё приложение.

L>>>Просто когда изменяю размер окна размер шрифта остаётся прежним получается некрасиво

KK>>А какое приложение, из чего состоит?

KK>>Каждый элемент недиалогового приложения имеет свой шрифт.

L>Мои поиски на эту тему в MSDN остановились на Stock Font Property которое используется в ActiveX, но до конца я так и не разобрался. Может кто нибудь сможет мне в кратце объяснить что такое ActveX и зачем он нужен, ну или хотя бы ссылочку какую-нибудь подкинет


ActiveX — тема отдельная. Смотри про COM, ATL, WTL (сам не знаю пока)

Ты можешь так сделать. Берёшь GetWindow() для первого child-а MDI frame, GetNextWindow() — для всех след. И для каждого вызываешь SetFont(CFont *) подобно тому, как уже писалось выше. Надо только иметь ввиду, что каждое окно может по-разному использовать указатель фонта: одно делает копию объекта по нему, другое хранит лишь указатель, и надеется, что пока оно живо, фонт, на который ссылается оный указатель, не исчезнет в хаосе heap-кучи, третье (плохой случай, я думаю, стандартные окошки таких гадостей не делают) решит, что объект под этим указателем создан специально для него, и, соответственно, только оно имеет право распоряжаться его жизнью и смертью. Так что лучше сначала заведи перенную-фонт в объекте класса фрейма (главного, наверное), инициализируй в конструкторе и показывай её всем дочерним окнам.
Keray
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.