对于directd2d接口,我完全被MFC包装器搞糊涂了。例如,请查看以下内容: -
BOOL CreateCompatibleRenderTarget(
CBitmapRenderTarget& bitmapTarget,
CD2DSizeF sizeDesired = CD2DSizeF(0.,
0.),
CD2DSizeU sizePixelDesired = CD2DSizeU(0,
0),
D2D1_PIXEL_FORMAT* desiredFormat = NULL,
D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options = D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE
);
bitmapTarget当此方法返回时,包含a的地址 指向新位图渲染目标的指针。传递此参数 初始化。
我对应该传递给函数的内容感到十分困惑。与文档相反,它接收对象而不是Directd2d IDL中未初始化的指针。并且必须初始化对象。
现在可以看出CBitmapRenderTarget是使用默认contstructor创建的对象。但是,这不适用于CBitmapRenderTarget的GetBimap成员,该成员也遵循文档中相同的模式: -
BOOL GetBitmap(
CD2DBitmap& bitmap
);
bitmap此方法返回时,包含此有效位图 渲染目标。该位图可用于绘图操作。
但是CD2DBitmap没有默认的ctor,所以我无法首先创建对象。问题是如何正确调用CBitmapRenderTarget API的GetBitmap。如何创建未初始化的CD2DBitmap对象???
答案 0 :(得分:0)
我遇到了同样的问题。看看CD2DBitmap的实现,没有没有参数的构造函数,还有一个只有父CRenderTarget *和一个参数的构造函数,但它受到保护,所以不能从外部使用。所以显然唯一的方法是使用3个公共构造函数中的一个,它们只从现有资源(来自句柄,资源ID或文件路径)创建Bitmap。
在我的情况下,作为一种解决方法,因为我的意图是用新的替换这个bitbap(GetBitmap),我从存储在我的资源上的PNG文件中创建了Bitamp:
CD2DBitmap bitmap(GetRenderTarget(), (UINT)IDB_LOGO_PETIT, _T("PNG"));
m_pTraceRenderTarget->GetBitmap(bitmap);
但您可以使用任何其他CD2DBitmap构造函数:
CD2DBitmap(CRenderTarget* pParentTarget, UINT uiResID, LPCTSTR lpszType = NULL, CD2DSizeU sizeDest = CD2DSizeU(0, 0), BOOL bAutoDestroy = TRUE);
CD2DBitmap(CRenderTarget* pParentTarget, LPCTSTR lpszPath, CD2DSizeU sizeDest = CD2DSizeU(0, 0), BOOL bAutoDestroy = TRUE);
CD2DBitmap(CRenderTarget* pParentTarget, HBITMAP hbmpSrc, CD2DSizeU sizeDest = CD2DSizeU(0, 0), BOOL bAutoDestroy = TRUE);