![](/img/trans.png)
[英]How can I open and close a popup menu when I click on a window in win32 api?
[英]How can I make the Win32 API window more modern looking?
我几天前订购了Programming Windows Fifth Edition,并开始使用它。
我开始学习win32 api,但是,我有一个问题。 窗户看起来并不像现代的winxp / win vista / win 7风格。 我该如何解决?
它目前看起来像这样,废话字体和所有。
提前致谢!
Machiel
要获得正确的字体,您应该在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));
显然,你没有真正读过这本书。 您正在寻找WM_SETFONT 。 有一个原因,共同控制不是本书所涵盖的第一件事。
您可能需要检查GetThemeSysFont
以填充适当系统字体的LOGFONT
,使用CreateFontIndirect
创建它,并使用WM_SETFONT
将其分配给您创建的每个控件。
据我所知,无法为应用程序中新创建的窗口设置不同的默认值。 也没有办法设置你已经在一个步骤中创建的所有窗口(即,而不是仅仅循环遍历所有窗口,或单独分配)。 例外是对话框,当从资源创建时,允许资源指定用于对话框上所有控件的字体。
您需要使用WM_SETFONT为每个控件设置字体,您可以通过将NONCLIENTMETRICS .lfMessageFont传递给CreateFontIndirect来创建字体(使用SystemParametersInfo (SPI_GETNONCLIENTMETRICS,...)来获取NONCLIENTMETRICS)
对于对话框 ,在<Vista上使用伪字体“ MS Shell Dlg ”@ 8pt,在= = Vista上使用“Segoe UI”@ 9pt
您可能希望发布一些关于您正在谈论的确切差异的屏幕截图,这有助于确定您需要更改的内容。
一般情况下,我会说您可能需要在应用程序中包含一个approprite清单,以便您的应用程序使用最新的常用控件。
此外,现在大多数UI都不是使用SDK样式代码开发的,这很难编程/维护,而是至少使用某种UI库,MFC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.