代码之家  ›  专栏  ›  技术社区  ›  Machiel

如何使win32 api窗口看起来更现代?

  •  9
  • Machiel  · 技术社区  · 14 年前

    几天前,我订购了Windows第五版的编程,并开始使用它。

    但是,我开始学习win32 API,我有一个问题。Windows看起来根本不像现代的WinXP/Win Vista/Win 7样式。我该怎么解决这个问题?

    它目前看起来是这样的,垃圾字体和所有。

    事先谢谢!

    < Machiel >带着它。

    不过,我开始学习win32 API,但有一个问题。Windows看起来根本不像现代的WinXP/Win Vista/Win 7样式。我该怎么解决这个问题?

    它现在看起来像这样,垃圾字体和所有。

    enter image description here

    事先谢谢!

    马歇尔

    5 回复  |  直到 10 年前
        1
  •  11
  •   StackedCrooked    11 年前

    要使字体正确,您应该在 CreateWindow(Ex) :

    NONCLIENTMETRICS ncm;
    ncm.cbSize = sizeof(NONCLIENTMETRICS);
    ::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);
    HFONT hFont = ::CreateFontIndirect(&ncm.lfMessageFont);
    ::SendMessage(hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
    
        2
  •  4
  •   Billy ONeal IS4    14 年前

    显然,你没有真正读过这本书。你在找 WM_SETFONT . 有一个原因是,共同的控制不是书中的第一件事。

        3
  •  2
  •   Anders    14 年前

    需要为每个控件设置字体 WM_SETFONT ,通过传递创建字体 NONCLIENTMETRICS .lfmessageFONT到 CreateFontIndirect (使用) SystemParametersInfo (SPI获取非客户度量,…)获取非客户度量)

    为了 dialog boxes ,使用伪字体“ MS Shell Dlg “在<vista上为@8pt,在>=vista上为”segoe ui“@9pt”

        4
  •  2
  •   Brook Miles    14 年前

    你可能想查一下 GetThemeSysFont 填满 LOGFONT 使用适当的系统字体创建 CreateFontIndirect WM_SETFONT 将其分配给您创建的每个控件。

    据我所知,无法为应用程序中新创建的窗口设置不同的默认值。也没有一种方法可以设置您已经在一个步骤中创建的所有窗口(即,不只是循环访问所有窗口,或单独分配)。例外情况是对话框,当从资源创建时,该对话框允许资源指定用于对话框上所有控件的字体。

        5
  •  0
  •   DevinEllingson    14 年前

    你可能想要发布一些关于你所说的差异的屏幕截图,这将有助于找出你需要改变的地方。

    一般来说,我会说你可能需要在你的应用程序中包含一个合适的清单,这样你的应用程序就可以使用最新的公共控件。

    而且,现在大多数的用户界面都不是用sdk风格的代码开发的,这很难编程/维护,而是使用某种类型的用户界面库,至少是MFC。