我正在构建一个 MFC c++ 程序。
该程序包含一个名为 faceTracking 的类。这个类通常只有一个绘图作业,因此我只传递了它需要绘制到的 MFC 对象。这工作得很好。
最近程序发生了一些变化,现在我需要这个类不仅可以绘制图片,还可以在屏幕上绘制一些文本。所以我改变了一些东西,现在我传递了完整的 MFC 对象,并在创建渲染目标时使用 getDlgItem 将正确的 hwnd 传递给 Direct2D:
D2D1_RENDER_TARGET_PROPERTIES rtProps = D2D1::RenderTargetProperties();
rtProps.pixelFormat = D2D1::PixelFormat( DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE);
rtProps.usage = D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE;
hr = d2DFactory->CreateHwndRenderTarget(
rtProps,
D2D1::HwndRenderTargetProperties(GetDlgItem(hWnd,1010), size),
&renderTarget
);
在我看来,这没有任何改变。因为通常在制作 FaceTracker 对象时,我会这样做:
faceTracker = new FaceTracking(getDlgItem(hWnd,1010), d2DFactory);
我把它改成这样:
faceTracker = new FaceTracking(hWnd, d2DFactory);
所以应该没什么区别。但确实如此:程序总是运行良好,现在启动它会出现以下错误:
如果我按忽略程序运行正常。没有更多的错误,这只是一个断言失败。错误发生在此语句中:
hr = d2DFactory->CreateHwndRenderTarget(
rtProps,
D2D1::HwndRenderTargetProperties(GetDlgItem(hWnd,1010), size),
&renderTarget
);
并被扔在这里:
CWnd* CWnd::GetDlgItem(int nID) const
{
ASSERT(::IsWindow(m_hWnd));
if (m_pCtrlCont == NULL)
return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));
else
return m_pCtrlCont->GetDlgItem(nID);
}
所以,我的实际问题是:为什么断言失败,为什么似乎没有实际错误?