我有一个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);
我做错了什么?
答案 0 :(得分:0)
为什么MS不得不如此艰难是一个谜。截至2020年12月,以下内容在VS2019中对我有用:在CView派生的类中声明一个成员变量
_AFX_D2D_STATE* m_pD2DState = nullptr;
在构造函数中,对其进行初始化
EnableD2DSupport();
m_pD2DState = AfxGetD2DState();
最后-获取工厂并将其用于创建笔触样式
ID2D1Factory *pFactory = m_pD2DState->GetDirect2dFactory();
pFactory->CreateStrokeStyle(...);