CClientDCとCWnd::GetDCの間に違いがあるかどうか知りたいのですが。リソースの割り当てとセマンティックの事実にもかかわらず、両方の動作はかなり等しいようです。
例:
CClientDC dc(this); // "this" is sub-classed object of CWnd
CGdiObject* oldObj = dc.SelectStockObject(WHITE_BRUSH);
... do some with dc ...
dc.SelectObject(oldObj);
// Device object is stack object, ReleaseDC called automaticly
また
CDC* dc = this->GetDC(); // "this" is sub-classed object of CWnd
CGdiObject* oldObj = dc->SelectStockObject(WHITE_BRUSH);
... do some with dc ...
dc->SelectObject(oldObj);
// Device context belongs to a window class no need to call ReleaseDC
// I don't allocate dc, so I don't delete it
両方のコードスニペットは、セマンティクスが異なることを除けば同じように見えますが、違いがある場合はどこにありますか?そして、私はそれらの使用法について何を心配する必要がありますか。
GetDC()はCClientDC(this)の単なるショートカットですか?私は少し混乱しています。
編集:CClientDC()によって返されるデバイスコンテキストは、特定の状況下では、GetDC()によって返されるデバイスコンテキストとは異なる動作をします。その理由を知りたいと思います。
例:
HRC hRC = wglCreateContext(GetDC()->m_hDC); // work's as expected.
しかし
ClientDC dc(this)
HRC hRC = wglCreateContext(dc.m_hDC); // does not work as expected, output in
// clients device context not screen visible.
したがって、同じウィンドウ上の両方のクライアントデバイスコンテキスト間に微妙な違いがあるはずですが、MSDNはそれに関する情報を提供しません。CClientDCおよびGetDCについては、MSDNの関数の説明を参照してください。