Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как установить фонт, принятый в системе по умолчан


Автор: Ibragim 2.8.2005, 00:37
Ночи доброй.
Есть HDC PaintDC;
По команде TextOut(PaintDC, 0, i*20, "Это текст", 4) фраза "Это текст" выводится явно увеличенным по сравнению с обычным (в других приложениях) шрифтом.
SDK советует создавать свой шрифт функцией HFONT MyFont = HFONT CreateFont(...)
и использовать его (CreateObject(PaintDC, MyFont)).
Но мне нужен системный по умолчанию - тот к которому привык пользователь.
А если это он и есть (чем-то оно же все-таки рисует), то как его уменьшить?

Спасибо за внимание.

Автор: rsm 2.8.2005, 20:08
Шрифты - штука достаточно сложная, с кучей параметров для отображения. Подробнее см. справку по функции CreateFont. Можно не создавать шрифт с нуля, а изменить шрифт по-умолчанию. Приведенный ниже код создает на базе стандартного шрифта новый шрифт (Comic Sans MS, жирный, подчеркнутый). И в дополнение раскрашивает его зеленым цветом.
Код

HDC hDC;
LOGFONT lfFont;
HANDLE hFont;

case WM_LBUTTONUP:
    hDC = GetDC(hwnd);
    hFont = (HANDLE) SendMessage(hwnd, WM_GETFONT, 0, 0);
    GetObject(hFont, sizeof(LOGFONT), (void*) &lfFont);
    lfFont.lfWeight = FW_BOLD;
    lfFont.lfUnderline = 1;
    lstrcpy((LPSTR) lfFont.lfFaceName, "Comic Sans MS");
    SelectObject(hDC, CreateFontIndirect(&lfFont));
    SetTextColor(hDC, RGB(0, 255, 0));
    TextOut(hDC, LOWORD(lParam), HIWORD(lParam), "Rules!", 6);
    ReleaseDC(hwnd, hDC);
    break;

Автор: Earnest 3.8.2005, 07:08
Среди stock-объектов GDI есть готовый фонт. Может даже не один, не помню. Но один из них точно тебе подходит. Второй вариант - если это у тебя контрол в диалоге - тогда спроси фонт у диалога и установи своему контролу. На API не помню как пишется, а c MFC примерно так:
Код

pCtrl->SetFont(GetParent(pCtrl)->GetFont())

Windows, видимо, еще со времен 3.х системным по-умолчанию считает как раз этот черный жирный фонт, хотя во всех окнах-диалогах используется другой...
Сейчас вот сомневаюсь, может не среди сток-объектов есть нужный фонт, а где-то среди capabilities. MSDN под рукой, к сожалению, нет...

Автор: Ibragim 3.8.2005, 12:50
rsm спасибо, вполне подошло smile так и делаю, нормально получается

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