1

ある時点でプライベート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の順序を発行しますか)?それが機能しない場合、解決策は何ですか?ありがとう。

4

1 に答える 1

3

まったく同じです。HWNDは、基盤となるOSリソースへの「ポインター」と考えてください。HWNDをコピーすると、リソース自体ではなく、リソースに「ポインタ」がコピーされます。

于 2013-03-17T23:19:20.630 に答える