如何让 Win32 使用 Windows XP 样式字体

发布于 2024-09-05 22:45:36 字数 154 浏览 4 评论 0原文

我正在使用纯 C 和 WinAPI 编写 Win32 应用程序。不允许使用 MFC 或 C++。为了让控件使用适当的样式进行绘制,我使用了清单,如相应的 MSDN 文章中所述。一切都很好,当我更改系统样式时,我的应用程序也会更改样式。但使用的字体实在是太丑了。如何强制应用程序使用标准系统字体?

I'm writing a Win32 application using plain C and WinAPI. No MFC or C++ is allowed. To get the controls to draw using the appropriate style, I use a manifest, as described in the corresponding MSDN article. Everything is fine, and when I change the system style, my application changes style as well. But the font used is just ugly. How do I force the application to use the standard system font?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

长发绾君心 2024-09-12 22:45:36

您可以将 SystemParametersInfoSPI_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 参数,请参阅窗口/控件中的字体 更改 win32 windows 项目中的默认窗口字体,但使用 do LOGFONT 而不是来自 GetStockObject (DEFAULT_GUI_FONT),但由 SystemParametersInfo 使用 SPI_GETNONCLIENTMETRICS 参数返回。

You can use SystemParametersInfo with SPI_GETNONCLIENTMETRICS parameter to retrieve the current font. SystemParametersInfo will take into account the current theme and provides font information for captions, menus, and message dialogs. (See remark to GetStockObject http://msdn.microsoft.com/en-us/library/dd144925(VS.85).aspx). The function will retrieve NONCLIENTMETRICS structure (see http://msdn.microsoft.com/en-us/library/ff729175(v=VS.85).aspx) which contains all information you needs:

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;

An example how to create and a set font in a window/control if you knows LOGFONT parameter see at the end of the example from change the default window font in a win32 windows project, but use do LOGFONT not from GetStockObject(DEFAULT_GUI_FONT), but returned by SystemParametersInfo with SPI_GETNONCLIENTMETRICS parameter instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文