Windows 我可以从GetDC(NULL)中选择一种字体到DC中吗?

Windows 我可以从GetDC(NULL)中选择一种字体到DC中吗?,windows,winapi,Windows,Winapi,GetDC(hwnd)和GetDC(NULL)之间有什么区别?我知道后者在整个(虚拟)屏幕上都有一个DC,但我不确定这实际上意味着什么 我想根据使用的字体设置初始窗口的大小。我使用CreateFontIndirect创建字体句柄,但在我看来,只有在将该字体选择为DC时,才能使用GetTextMetrics计算实际使用的高度,而不是指定的高度。我假设它们可能不一样 我通常会使用GetDC(hwnd)来获取一个DC,并在其中选择字体。但是,考虑到我还没有hwnd,我可以在从GetDC返回的DC中选择

GetDC(hwnd)和GetDC(NULL)之间有什么区别?我知道后者在整个(虚拟)屏幕上都有一个DC,但我不确定这实际上意味着什么

我想根据使用的字体设置初始窗口的大小。我使用CreateFontIndirect创建字体句柄,但在我看来,只有在将该字体选择为DC时,才能使用GetTextMetrics计算实际使用的高度,而不是指定的高度。我假设它们可能不一样

我通常会使用GetDC(hwnd)来获取一个DC,并在其中选择字体。但是,考虑到我还没有hwnd,我可以在从GetDC返回的DC中选择字体(NULL)吗


编辑:相关。我想这可能没什么区别

您不拥有屏幕DC,不应在其中选择对象。您可以使用
CreateCompatibleDC
,通过屏幕DC,获得一个DC,您可以在其中执行文本度量计算。

啊,麻烦了。我想我可以用它来获取信息(例如:GetDeviceCaps)。我想在屏幕DC中选择对象可能会很糟糕。谢谢这个很好用。我发现有趣的是(对于Segoe UI,9pt),logfont lfHeight是12,而textmetrics tmHeight是15。我想TextMetrics是应该使用的!这两个数字可比吗?他们代表的是同一件事吗?起初我以为是,但我显然错了。从MSDN中-(LOGFONT)lfHeight是“以逻辑单位表示的字体字符单元格或字符的高度,”(TEXTMETRIC)tmHeight是“以字符表示的高度(上升+下降)”(也以逻辑单位表示)。我相信区别在于血统。@DavidHeffernan您知道关于该限制的任何文档/参考资料吗?我正在浏览Delphi VCL源代码,有许多地方使用GetDC(null)后跟SelectObject来获取文本度量(例如TCustomLabel.AdjustBounds)。这些都应该使用CreateCompatibleDC(null)还是CreateCompatibleDC(ScreenDC)?