【发布时间】:2019-11-02 12:35:08
【问题描述】:
我将以下代码从基于 MFC 对话框的项目移至 MFC 库 dll:
CWnd dummyWnd;
standard = new Gdiplus::Font(dummyWnd.GetDC()->GetSafeHdc(), &logfont); //GetDC() returns null, which did not happen in an MFC dialog-based app
我需要一个临时 DC 来创建 gdiplus 字体、测量字符串和其他实用程序功能。
我的问题:
- 是否可以像我在基于对话框的应用程序中所做的那样使用 CWnd?
- 或者我可以通过其他方式简单地为此目的获得 DC 吗?
【问题讨论】:
-
请仔细检查您的原始代码:
CWnd dummyWnd;创建一个未附加的(无窗口)CWnd对象;然后dummyWnd.GetDC();尝试获取没有附加窗口的客户区设备上下文。这应该失败。请参阅:docs.microsoft.com/en-us/cpp/mfc/reference/… 和 docs.microsoft.com/en-us/cpp/mfc/reference/… -
感谢您的回复。我现在想知道为什么代码在基于对话框的项目中确实有效。我也没有在那里创建()它。
-
@RichardCritten 将代码更新为我使用的确切代码。为什么这在基于对话框的 mfc 应用程序中起作用?
-
CDC::GetSafeHdc: 文档中的奇怪评论 "...此成员函数也适用于空指针..." 您对这意味着什么的猜测是和我一样好。来源:docs.microsoft.com/en-us/cpp/mfc/reference/… -
使用
CClientDC dc(NULL)获取桌面dc,后跟CreateCompatibleDC...见example