CreateGridPatterentBrush的ID2D1RenderTarget* pRenderTarget调用CreateCompatibleRenderTarget 出现this 是 nullptr怎么解决?

SUN 20 信誉分
2024-08-23T08:10:36.4766667+00:00

屏幕截图 2024-08-23 160835

ID2D1RenderTarget* m_pRenderTarget;

ID2D1RenderTarget* pRenderTarget;

ID2D1BitmapBrush** ppBitmapBrush;

ID2D1BitmapRenderTarget* pCompatibleRenderTarget;

ID2D1Bitmap* pBitmap;

HRESULT CreateGridPatterentBrush(ID2D1RenderTarget* pRenderTarget,ID2D1BitmapBrush** ppBitmapBrush);

HRESULT CMainWindow::CreateGridPatterentBrush(ID2D1RenderTarget* pRenderTarget, ID2D1BitmapBrush** ppBitmapBrush)

{

//ID2D1BitmapRenderTarget *pCompatibleRenderTarget = NULL;

HRESULT hr = pRenderTarget->CreateCompatibleRenderTarget(D2D1::SizeF(10.0f, 10.0f),&pCompatibleRenderTarget);

if (SUCCEEDED(hr))

{

    // Draw a pattern.

    ID2D1SolidColorBrush *pGridBrush = NULL;

    hr = pCompatibleRenderTarget->CreateSolidColorBrush(

        D2D1::ColorF(D2D1::ColorF(0.93f, 0.94f, 0.96f, 1.0f)),

        &pGridBrush

        );

    if (SUCCEEDED(hr))

    {

        pCompatibleRenderTarget->BeginDraw();

        pCompatibleRenderTarget->FillRectangle(D2D1::RectF(0.0f, 0.0f, 10.0f, 1.0f), pGridBrush);

        pCompatibleRenderTarget->FillRectangle(D2D1::RectF(0.0f, 0.1f, 1.0f, 10.0f), pGridBrush);

        pCompatibleRenderTarget->EndDraw();

        // Retrieve the bitmap from the render target.

        ID2D1Bitmap *pGridBitmap = NULL;

        hr = pCompatibleRenderTarget->GetBitmap(&pGridBitmap);

        if (SUCCEEDED(hr))

        {

            // Choose the tiling mode for the bitmap brush.

            D2D1_BITMAP_BRUSH_PROPERTIES brushProperties =

                D2D1::BitmapBrushProperties(D2D1_EXTEND_MODE_WRAP, D2D1_EXTEND_MODE_WRAP);

            // Create the bitmap brush.

            hr = m_pRenderTarget->CreateBitmapBrush(pGridBitmap, brushProperties, ppBitmapBrush);        

            pGridBitmap->Release();

        }

        pGridBrush->Release();

    }

    pCompatibleRenderTarget->Release();

}

return hr;

return E_NOTIMPL;
```}
void CMainWindow::OnPaint()

{

    CPaintDC dc(this); 

    

    this->CreateGridPatterentBrush(pRenderTarget,ppBitmapBrush);

    

}
C++
C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
148 个问题
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Minxin Yu 12,251 信誉分 Microsoft 供应商
    2024-08-28T01:10:13.6066667+00:00

    您好,

    示例中使用的是

    HRESULT DemoApp::CreateGridPatternBrush(

    ID2D1RenderTarget *pRenderTarget,
    
    ID2D1BitmapBrush **ppBitmapBrush
    
    )
    {
    
    
    HRESULT hr = S_OK;
    
    // Create a compatible render target.
    
    ID2D1BitmapRenderTarget *pCompatibleRenderTarget = NULL;
    
    hr = pRenderTarget->CreateCompatibleRenderTarget(
    
        D2D1::SizeF(10.0f, 10.0f),
    
        &pCompatibleRenderTarget
    
        );  
    

    没有hr变量,if (SUCCEEDED(hr))为什么没有提示编译错误?


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。


你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。