gpt4 book ai didi

c++ - 这是将一个类的私有(private) HWND 分配给另一个类的正确方法吗?

转载 作者:可可西里 更新时间:2023-11-01 11:34:16 24 4
gpt4 key购买 nike

我有一个 Game 类,在某个时候它的私有(private) HWND 成员 m_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->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 发出了命令,我不知道。

那么,上面的代码是否可以工作(渲染目标是否会向 Game 对象发出 m_hWnd 命令)?如果它不起作用,解决方案是什么?谢谢。

最佳答案

其实是一样的。将 HWND 视为指向底层操作系统资源的“指针”。当您复制 HWND 时,您复制的是指向资源的“指针”,而不是资源本身。

关于c++ - 这是将一个类的私有(private) HWND 分配给另一个类的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com