Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Установка шрифта по умолчанию для элементов управления

7
26 апреля 2010 года
@pixo $oft
3.4K / / 20.09.2006
Пытаюсь назначить другой шрифт создаваемым элементам управления следующим образом
 
Код:
Invoke CreateFont,0,0,0,0,0,0,0,0,0,Out_TT_Only_Precis,0,ClearType_Quality,0,0
Затем устанавливаю его для каждого нового элемента управления так
 
Код:
Invoke SendMessage,hWnd,WM_SetFont,hFont,1
Но шрифт не меняется,так и остаётся дурацким точечным,несмотря на то,что CreateFont отрабатывает без ошибки(т.е. возвращает дескриптор шрифта).Указание гарнитуры шрифта(Tahoma) к положительному эффекту не привело

Отсюда следующие вопросы:
0)С какими параметрами вызвать CreateFont,чтобы задать тот шрифт,что я хочу(по идее,это шрифт,заданный в теме)?ЧЯДНТ?
1)Как установить всем элементам управления заданный по умолчанию шрифт?(подразумеваются более простые способы типа иной функции или установки шрифта всем сразу,а не по отдельности)
14
27 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Чета у тебя слишком много нулей. Сделай ChooseFont() и сформируй нормальную структуру.
7
27 апреля 2010 года
@pixo $oft
3.4K / / 20.09.2006
Нули потому,что я хочу всё умолчанное,кроме разве что гарнитуры

Я так понял,этим самым я посмотрю на те флаги,которые надо задать в своей программе?
8.4K
27 апреля 2010 года
z0rch
275 / / 02.09.2008
хм, ну я открыл мсдн, скопировал оттуда пример кода, чуть только подправив
Код:
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
HFONT hFont;
...
case WM_PAINT:
{
...
    hdc = BeginPaint(hWnd, &ps);
    GetClientRect(hWnd,&rect);
    hFont = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
    SelectObject(hdc, hFont);
    DrawText(hDC, TEXT("Drawing Text with Impact"), -1,&rc, DT_NOCLIP);
...
}


это правда для рисования текста, но что-то мне подсказывает, что особых различий не должно быть :)

upd: может это?
7
27 апреля 2010 года
@pixo $oft
3.4K / / 20.09.2006
В процессе работы было выяснено следующее–функция не работает в WM_Create.Если поместить это дело,допустим,в WM_LButtonUp,то это всё очень даже работает
В чём дело и как можно установить шрифт именно на том этапе?
14
28 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Все должно работать (и работает в общем) и там, и там. Смотри возможные ошибки.
7
28 апреля 2010 года
@pixo $oft
3.4K / / 20.09.2006
Уж не знаю,что я делал нет так(а ведь так зачастую и бывает!:)),но заработало
Что странно–почему-то возвращается 1 при установке шрифта для текстового поля,но 0 при установке шрифта для кнопки.При этом шрифт ставится без проблем.Отсюда вопрос–что за …?(с тем учётом,что "This message does not return a value")

P.S.Шрифт создаю до создания главного окна вот так
 
Код:
Invoke CreateFont,-14,0,0,0,0,0,0,0,0,0,0,0,0,Addr szFontFace
,а устанавливаю при обработке WM_Create после создания элементов
14
28 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Ну, коли
Цитата:

This message does not return a value.


значит возвращаемое значение следует игнорировать, что бы там ни было. А аргументы я бы все же изменил...

7
28 апреля 2010 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Phodopus
А аргументы я бы все же изменил...

Почему и как?:)

P.S.И всё-таки,как использовать шрифт,заданный в теме?Для этого есть какая-то функция или надо умело подобрать параметры?

14
28 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Почему - потому что маппинг шрифтов штука такая непростая и чем больше ты ей информации скормишь тем лучше она работать будет. Где-то была скупая инфа по этому поводу, найти не могу... Думаю у Юань Фень найти можно. Но про шрифты не читал.
По поводу шрифта в теме. Возможно есть спец. функции из uxtheme, а так - есть стоковый шрифт и есть шрифт для элементов окна в какой-то функции из информации о системе.
7
03 мая 2010 года
@pixo $oft
3.4K / / 20.09.2006
Спасибо за объяснение.Но мне пока хватило того,что уже есть:)
Цитата: Phodopus
а так - есть стоковый шрифт и есть шрифт для элементов окна в какой-то функции из информации о системе.

Что за стоковый шрифт?[SIZE="2"](1)[/SIZE]

Я тут у себя отрыл такое дело–GetStockObject(Default_GUI_Font).И всё бы хорошо,если бы не одно НО.Я делаю так:

Код:
;Процедура создания CheckBox'ов с текстом [ESP+4] по заданным координатам [ESP+8],[ESP+12]
CreateChkBox:
    Invoke lStrLen,[ESP+4]
    Invoke GetTextExtentPoint,hDC,[ESP+12],EAX,Addr dwWidth
    Mov EBP,dwHeight
    Invoke CreateWindowEx,EBX,Addr szClsBtn,[ESP+40],WS_Child Or WS_TabStop Or WS_Visible Or BS_AutoCheckBox,[ESP+36],[ESP+36],dwWidth,EBP,hWnd,EBX,hInst,EBX
    Invoke SendMessage,EAX,WM_SetFont,hFont,EBX
Ret 12

;В обработчике WM_Create окна пишу
Invoke GetStockObject,Default_GUI_Font
Mov hFont,EAX
Invoke SendMessage,hWnd,WM_SetFont,hFont,EBX
Invoke GetDC,hWnd
Mov hDC,EAX

;И далее–создание CheckBox'ов
Push EDI    ;Здесь координата y
Push 4
Push Offset szChkAltLink
Почему-то CheckBox создаётся гораздо большей ширины,чем запланировано.Такое ощущение,что у окна старый шрифт(MS sans serif или какой там по умолчанию,большой такой)

Почему окну не ставится новый шрифт или почему GetTextExtentPoint не отрабатывает так,как надо?[SIZE="2"](2)[/SIZE] Ведь окно появляется с заданным мной шрифтом(т.е. тем,который в теме по умолчанию)
14
04 мая 2010 года
Phodopus
3.3K / / 19.06.2008
1. Это и есть стоковый шрифт
2. Ширина ему задается в CreateWindow() же..
7
04 мая 2010 года
@pixo $oft
3.4K / / 20.09.2006
Что-то я не совсем понял тебя:)
Допустим,я понял,что Default_GUI_Font и есть стоковый.А вот насчёт того,что ширина задаётся в CreateWindow–так она задаётся на основе вычисленной длины текста(т.е. по идее должна быть меньше).Вишь там в процедурке dwWidth?Это она и есть,GetTextExtentPoint'ом вычисляется (=
14
05 мая 2010 года
Phodopus
3.3K / / 19.06.2008
А кто сказал что шрифт не надо выбирать с помощью SelectObject() при подсчете GetTextExtentPoint()-ом ?
7
05 мая 2010 года
@pixo $oft
3.4K / / 20.09.2006
Хм,я думал,что WM_SetFont исправит эту проблему…
Стало быть,надо SelectObject(hDC,hFont)/GetTextExtentPoint(…),и будет мне щастье?:)
14
06 мая 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: @pixo $oft

Стало быть,надо SelectObject(hDC,hFont)/GetTextExtentPoint(…),и будет мне щастье?:)


ну ты попробуй.... :rolleyes:

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог