Как заставить Win32 использовать шрифты в стиле Windows XP - PullRequest
3 голосов
/ 12 июня 2010

Я пишу приложение Win32, используя простой C и WinAPI.MFC или C ++ не допускаются.Чтобы заставить элементы управления рисовать, используя соответствующий стиль, я использую манифест, как описано в соответствующей статье MSDN.Все хорошо, и когда я меняю стиль системы, мое приложение также меняет стиль.Но используемый шрифт просто ужасен.Как заставить приложение использовать стандартный системный шрифт?

1 Ответ

5 голосов
/ 12 июня 2010

Вы можете использовать SystemParametersInfo с параметром SPI_GETNONCLIENTMETRICS для получения текущего шрифта. SystemParametersInfo будет учитывать текущую тему и предоставляет информацию о шрифтах для заголовков, меню и диалогов сообщений. (См. Примечание к GetStockObject http://msdn.microsoft.com/en-us/library/dd144925(VS.85).aspx). Функция извлечет структуру NONCLIENTMETRICS (см. http://msdn.microsoft.com/en-us/library/ff729175(v=VS.85).aspx), которая содержит всю необходимую информацию:

typedef struct tagNONCLIENTMETRICS {
  UINT    cbSize;
  int     iBorderWidth;
  int     iScrollWidth;
  int     iScrollHeight;
  int     iCaptionWidth;
  int     iCaptionHeight;
  LOGFONT lfCaptionFont;
  int     iSmCaptionWidth;
  int     iSmCaptionHeight;
  LOGFONT lfSmCaptionFont;
  int     iMenuWidth;
  int     iMenuHeight;
  LOGFONT lfMenuFont;
  LOGFONT lfStatusFont;
  LOGFONT lfMessageFont;
#if (WINVER >= 0x0600)
  int     iPaddedBorderWidth;
#endif 
} NONCLIENTMETRICS, *PNONCLIENTMETRICS, *LPNONCLIENTMETRICS;

Пример того, как создать и установить шрифт в окне / элементе управления, если вам известен параметр LOGFONT, см. В конце примера из изменение шрифта окна по умолчанию в проекте windows win32 , но используйте do LOGFONT не из GetStockObject(DEFAULT_GUI_FONT), а вместо SystemParametersInfo с параметром SPI_GETNONCLIENTMETRICS.

...