GetDC(hWnd)がウィンドウhWndのWM_CREATEの最初の命令として呼び出されたと仮定して、GetDC()がNULLを返すことは可能ですか?

ウィンドウ hWnd WM_CREATE 最初の命令として GetDC(hWnd)が呼び出されたとすると、 NULL を返すように GetDC()を使用していますか?

リソース不足のために GetDC()が失敗する可能性が懸念されます。それが起こると、私はエラーをチェックすべきですか?呼び出しが失敗した場合はどうしたらよいですか? Win32 API関数は例外を発生させますか、または例外を発生させる必要がありますか?

2

1 答え

GetDC() can indeed fail, no matter when or where you call it. You ought to take a rather pessimistic view when dealing with the API and be prepared for any API function to fail. As you suggest, one possible reason for failure is exhaustion of system resources, e.g. kernel handles, GDI objects etc.

常にエラーをチェックする必要があります。また、 GetDC()だけでなく、API関数の呼び出しごとに戻り値がチェックされている必要があります。

Windows APIは、例外を発生させてエラーを通知しません。代わりに、エラーは常にAPI関数によって返された値によって通知されます。個々の関数がどのようにエラーを報告するかを理解するために、ドキュメンテーションを参照する必要があります。

GetDC()のようなGDI関数でエラーが発生した場合、できることはあまりありません。あなたが記述したシナリオでは、私はエラーを記録するか、それをユーザーに報告し、実行を終了します。一般的に、 GetDC()の障害からの回復はありません。

API関数が呼び出されるたびにエラーをチェックするという苦労は、低レベルのAPIをラップする非常に多くのフレームワークを持つ理由の1つです。良いフレームワークは、エラーチェックを行い、エラーを例外に変換します。優れたフレームワークを使用すると、通常の実行フローに集中でき、例外的なケースのコードを処理してコードを浪費することはありません。

3
追加された
getDC getWindowDc を使用して、タスクバーのhdcを取り出すのは苦労しました。それが必須ではないことが判明しましたが、ここで言及されているキーワードに織り込まれています: GDI - 結核のためのものではありません!
追加された 著者 Laurie Stearn,