Windows 假设调用GetDC(hWnd)作为WM_CREATE上的第一条指令,对于窗口hWnd,GetDC()是否可能返回NULL?

Windows 假设调用GetDC(hWnd)作为WM_CREATE上的第一条指令,对于窗口hWnd,GetDC()是否可能返回NULL?,windows,winapi,Windows,Winapi,假设GetDC(hWnd)被调用为WM\u CREATE上的第一条指令,对于窗口hWnd,GetDC()是否可能返回NULL 我担心GetDC()由于缺乏资源而失败的可能性。发生这种情况时,我应该检查错误吗?如果呼叫失败,我该怎么办?Win32 API函数引发异常还是我应该引发异常?GetDC()确实会失败,无论何时何地调用它。在处理API时,您应该采取相当悲观的观点,并为任何API函数的失败做好准备。正如您所建议的,失败的一个可能原因是系统资源耗尽,例如内核句柄、GDI对象等 所以你应该经常检

假设
GetDC(hWnd)
被调用为
WM\u CREATE
上的第一条指令,对于窗口
hWnd
GetDC()
是否可能返回
NULL

我担心
GetDC()
由于缺乏资源而失败的可能性。发生这种情况时,我应该检查错误吗?如果呼叫失败,我该怎么办?Win32 API函数引发异常还是我应该引发异常?

GetDC()
确实会失败,无论何时何地调用它。在处理API时,您应该采取相当悲观的观点,并为任何API函数的失败做好准备。正如您所建议的,失败的一个可能原因是系统资源耗尽,例如内核句柄、GDI对象等

所以你应该经常检查错误。不仅仅是
GetDC()
,对API函数的每次调用都应该检查其返回值

Windows API不会通过引发异常来发出错误信号。相反,错误总是通过API函数返回的值发出信号。您需要查阅文档以了解每个函数如何报告错误

如果您在GDI函数中遇到故障,如
GetDC()
,那么您就无能为力了。在您描述的场景中,我将记录错误或向用户报告,然后终止执行。通常无法从
GetDC()
的故障中恢复


每次调用API函数时检查错误的痛苦是我们有这么多框架包装低级API的原因之一。一个好的框架将为您执行错误检查,并将任何错误转换为异常。使用一个好的框架可以让你专注于正常的执行流程,而不是在处理异常情况下的代码时乱丢代码。

很难用
getDC
getWindowDc
为任务栏充实一个hdc,没有骰子。事实证明,这不是必需的,但在这里提到的关键词上出现了:不是为结核病设计的!