如何使用 D2D 和类 CD2DEllipse 在 MFC 上绘制椭圆C++
How to draw an ELLIPSE on C++ MFC using D2D and the class CD2DEllipse
我需要使用 D2D 和类 CD2DEllipse 在 MFC C++上绘制一个椭圆, 我希望如果我更改窗口的大小,椭圆也会更改大小。
我希望对象的指针看到类...所以我把它声明到标题:
//hpp
class CmyclassView : public CView
{
...
CD2DEllipse* pE;
...
}
案例 A:
我每次都必须初始化椭圆对象 CD2DEllipse 我调整了视图的大小...WM_PAINT -> OnDraw2D ...但我把椭圆 在堆上,因为"新"...以及上一个椭圆的去向...
如果我关闭应用程序,d_str必须调用"删除pE; ?
// cpp
afx_msg LRESULT CDXALGOView::OnDraw2D(WPARAM wParam, LPARAM lParam)
{
C_pRT = (CHwndRenderTarget*)lParam;
ASSERT_VALID(C_pRT);
pE = new CD2DEllipse(D2D1::Ellipse(xyC,r,r)); <<-------
return TRUE;
}
案例 B: 或者最好在构造函数中只创建一次对象,更新 ondraw上的参数,当我关闭应用程序时,我删除了 对象 c_str
{
pE = new CD2DEllipse(D2D1::Ellipse(xyC,r,r));
}
afx_msg LRESULT CDXALGOView::OnDraw2D(WPARAM wParam, LPARAM lParam)
{
C_pRT = (CHwndRenderTarget*)lParam;
ASSERT_VALID(C_pRT);
pE.point = xyC; <<-------
pE.radiusX = r;
pE.radiusY = r;
return TRUE;
}
只需在需要时在堆栈上创建对象:
C_pRT->DrawEllipse( CD2DEllipse(D2D1::Ellipse(xyC, r, r)), someBrush, lineWidth );
您可以分解该语句以提高可读性:
CD2DEllipse ellipse( D2D1::Ellipse(xyC, r, r) );
C_pRT->DrawEllipse( ellipse, someBrush, lineWidth );
一般来说,现代C++很少需要new
。大多数情况下,您只需在堆栈上创建对象,并让它们的析构函数自动执行清理。如果实际上必须在堆上分配某些内容,请使用标准库提供的智能指针之一。这些负责自动呼叫delete
。
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 绘制文本问题
- 在 QT C++中绘制/操作多边形
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 在现代OpenGL中,绘制GL_TRIANGLE奇怪的z轴行为的填充圆
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?