ある時点でプライベートHWNDメンバーm_hWndに値を取得させるGameクラスがあります。
m_hWnd=CreateWindowEx(NULL,
"Window Class",
"Game", // Replace with gameName
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInst,
this);
後で、ゲームのm_hWndを渡す必要があるD2DResourcesオブジェクトが作成されます。
void Game::CreateRessources(HINSTANCE hInst)
{
CreateWindowClass(hInst); //m_hWnd gains its value it this function
pMessageLog=CreateMessageLog();
pD2DResources=CreateD2DResources(m_hWnd);
pD2DResources->Initialize(m_hWnd);
pWinsock=CreateWinsock();
}
すぐにpD2DResources->Initialize(m_hWnd)にRenderTargetが作成されます。
HRESULT D2DResources::Initialize(HWND hwnd)
{
HRESULT hr;
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory); // Create factory
RECT rc;
GetClientRect(hwnd,&rc);
if(SUCCEEDED(hr)) // Creates render target
{
pD2DFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(
hwnd,
D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top)),
&pRT);
}
最も重要なのはこの行です。
pD2DFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(
hwnd,
D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top)),
&pRT);
HwndRenderTargetPropertiesの最初の引数であるHWNDは、レンダリングターゲットが描画コマンドからの出力を発行するHWNDになります。上記の私のコードでは、レンダリングターゲットは、ゲームオブジェクトに作成されたものとまったく同じHWNDに順序を発行しますか、それともコピーですか?いくつかのバグがありますが、おそらくそれは注文が間違ったHWNDに発行されたためです。わかりません。
それで、上記のコードは機能しますか(レンダリングターゲットはゲームオブジェクトにm_hWndの順序を発行しますか)?それが機能しない場合、解決策は何ですか?ありがとう。