1
我有游戏类在某些时候都会有自己的私人HWND成员m_hWnd获得的值:这是将班级的私人HWND分配给其他班级的正确方法吗?
m_hWnd=CreateWindowEx(NULL,
"Window Class",
"Game", // Replace with gameName
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInst,
this);
后来,创建一个D2DResources对象,其中游戏的m_hWnd必须传递。
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->初始化(m_hWnd)一个渲染目标被创建:
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。在我上面的代码中,渲染目标会将其顺序发布到创建到Game对象中的HWND中,还是作为副本?我得到一些错误,也许这是因为命令发给错误的HWND,我不知道。
所以,上面的代码是否会工作(渲染目标是否将它的命令发布到Game对象的m_hWnd中)?如果它不起作用,解决方案是什么?谢谢。