Установка шрифта по умолчанию для элементов управления
Код:
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
Отсюда следующие вопросы:
0)С какими параметрами вызвать CreateFont,чтобы задать тот шрифт,что я хочу(по идее,это шрифт,заданный в теме)?ЧЯДНТ?
1)Как установить всем элементам управления заданный по умолчанию шрифт?(подразумеваются более простые способы типа иной функции или установки шрифта всем сразу,а не по отдельности)
Чета у тебя слишком много нулей. Сделай ChooseFont() и сформируй нормальную структуру.
Я так понял,этим самым я посмотрю на те флаги,которые надо задать в своей программе?
Код:
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);
...
}
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: может это?
В чём дело и как можно установить шрифт именно на том этапе?
Все должно работать (и работает в общем) и там, и там. Смотри возможные ошибки.
Что странно–почему-то возвращается 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
Цитата:
This message does not return a value.
значит возвращаемое значение следует игнорировать, что бы там ни было. А аргументы я бы все же изменил...
Цитата: Phodopus
А аргументы я бы все же изменил...
Почему и как?:)
P.S.И всё-таки,как использовать шрифт,заданный в теме?Для этого есть какая-то функция или надо умело подобрать параметры?
По поводу шрифта в теме. Возможно есть спец. функции из uxtheme, а так - есть стоковый шрифт и есть шрифт для элементов окна в какой-то функции из информации о системе.
Цитата: 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
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
Почему окну не ставится новый шрифт или почему GetTextExtentPoint не отрабатывает так,как надо?[SIZE="2"](2)[/SIZE] Ведь окно появляется с заданным мной шрифтом(т.е. тем,который в теме по умолчанию)
2. Ширина ему задается в CreateWindow() же..
Допустим,я понял,что Default_GUI_Font и есть стоковый.А вот насчёт того,что ширина задаётся в CreateWindow–так она задаётся на основе вычисленной длины текста(т.е. по идее должна быть меньше).Вишь там в процедурке dwWidth?Это она и есть,GetTextExtentPoint'ом вычисляется (=
А кто сказал что шрифт не надо выбирать с помощью SelectObject() при подсчете GetTextExtentPoint()-ом ?
Стало быть,надо SelectObject(hDC,hFont)/GetTextExtentPoint(…),и будет мне щастье?:)
Цитата: @pixo $oft
Стало быть,надо SelectObject(hDC,hFont)/GetTextExtentPoint(…),и будет мне щастье?:)
ну ты попробуй.... :rolleyes: