【问题标题】:How to get Win32 to use Windows XP style fonts如何让 Win32 使用 Windows XP 风格的字体
【发布时间】:2010-06-12 17:47:40
【问题描述】:

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

【问题讨论】:

    标签: winapi fonts coding-style


    【解决方案1】:

    您可以使用SystemParametersInfoSPI_GETNONCLIENTMETRICS 参数来检索当前字体。 SystemParametersInfo 将考虑当前主题并为标题、菜单和消息对话框提供字体信息。 (参见GetStockObjecthttp://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 参数,则如何在窗口/控件中创建和设置字体的示例参见change the default window font in a win32 windows project 的示例末尾,但使用do LOGFONT 不是来自GetStockObject(DEFAULT_GUI_FONT),而是返回由SystemParametersInfoSPI_GETNONCLIENTMETRICS 参数代替。

    【讨论】:

    • 关于您提供的链接的另一个问题:是否可以将主窗口创建为资源(如 WinAPI 表单)?如果是,那么也许没有必要从代码中执行此操作。
    • 您可以将对话框用作主窗口并将其保存在资源中。然后你只需要为对话框选择字体。如果您的程序可以组织为基于对话框,那么您的字体就没有问题了。
    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2010-11-16
    • 2011-07-08
    相关资源
    最近更新 更多