这是将一个类的私有 HWND 分配给另一个类的正确方法吗?
Is this the correct way to assign a class' private HWND to another class?
我有一个Game类,它在某些时候会有它的私有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,我不知道。
那么,上面的代码是否有效(渲染目标是否会向游戏对象发出m_hWnd的命令)?如果行不通,解决办法是什么?谢谢。
是一样的。可以将HWND看作是指向底层操作系统资源的"指针"。当你复制一个HWND时,你复制的是指向资源的"指针",而不是资源本身。
相关文章:
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 如何在 c++ 中将小数点后两位数的浮点数分配给另一个浮点数
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 将指针分配给另一个指针时会发生什么情况?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- C++将一个指针分配给另一个指针时执行的类型检查
- 关于字符数组,我正在尝试将数组中的每个字符分配给另一个值
- 使用动态分配将 char* 复制到另一个字符**
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 将字符从一个字符串简单分配到另一个字符串不起作用
- 将 void 指针分配给另一个 void 指针
- 在 c++ 中,同一类的一个对象如何分配给同一类的另一个对象?
- 如何在C++中将类的实例完全重新分配给同一类的另一个实例(然后删除原始对象)?
- 如何为一个变量分配另一个类的值
- 在C++中,一个线程中的new可以分配另一个线程删除的内存吗