MFC EnableD2DSupport尝试使用StrokeStyle不起作用

时间:2015-03-24 09:58:10

标签: c++ mfc direct2d

我有一个MFC应用程序绘图线,文本,不同颜色的矩形等没有任何问题。但我想绘制点和虚线,我没有找到任何方法去做!随着我的下面的例子被发现进入互联网,结果是最后的空图:所有的窗口,不仅仅是有罪的DrawLine(),而且没有任何错误或不良状态。

以下是我的代码的一些示例:

在构造函数中:

// Enable D2D support for this window:
EnableD2DSupport();

HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory);

// Dash array for dashStyle D2D1_DASH_STYLE_CUSTOM
float dashes[] = {1.0f, 2.0f, 2.0f, 3.0f, 2.0f, 2.0f};

// Stroke Style with Dash Style -- Custom
if (SUCCEEDED(hr))
{
        hr = m_pD2DFactory->CreateStrokeStyle(
                D2D1::StrokeStyleProperties(
                        D2D1_CAP_STYLE_FLAT,
                        D2D1_CAP_STYLE_FLAT,
                        D2D1_CAP_STYLE_ROUND,
                        D2D1_LINE_JOIN_MITER,
                        10.0f,
                        D2D1_DASH_STYLE_DASH_DOT,//D2D1_DASH_STYLE_CUSTOM,
                        0.0f),
                0,//dashes,
                0,//ARRAYSIZE(dashes),
                &m_strokeStyle
                );
}

进入OnDraw2d(WPARAM wParam,LPARAM lParam):

    pRenderTarget->DrawLine(CPoint(rectGraph.left,rect.bottom), CPoint(rectGraph.right,rect.bottom), m_pBlackBrush, 1.0, m_strokeStyle);

但没有StrokeStyle的同一行正常工作:

    pRenderTarget->DrawLine(CPoint(rectGraph.left,rect.bottom), CPoint(rectGraph.right,rect.bottom), m_pBlackBrush, 1.0, NULL);

我做错了什么?

1 个答案:

答案 0 :(得分:0)

为什么MS不得不如此艰难是一个谜。截至2020年12月,以下内容在VS2019中对我有用:在CView派生的类中声明一个成员变量

_AFX_D2D_STATE* m_pD2DState = nullptr;

在构造函数中,对其进行初始化

EnableD2DSupport();
m_pD2DState = AfxGetD2DState();

最后-获取工厂并将其用于创建笔触样式

ID2D1Factory *pFactory = m_pD2DState->GetDirect2dFactory();
pFactory->CreateStrokeStyle(...);