VC.NET + MFC 使用 GDI+ DrawLines 画线

VC.NET MFC GDI+ 画线


最近做一个项目 需要 使用GDI+ 的 DrawLines 画线 

MSDN 上给出的实例:

public:
   void DrawLinesPoint( PaintEventArgs^ e )
   {
      // Create pen.
      Pen^ pen = gcnew Pen( Color::Black,3.0f );


      // Create array of points that define lines to draw.
      array<Point>^ points = {Point(10,10),Point(10,100),Point(200,50),Point(250,300)};


      //Draw lines to screen.
      e->Graphics->DrawLines( pen, points );
   }



但是如何动态的添加 Point 数组呢。


这里使用 STL 中的 vector 来存储点,代码如下:


#include <vector>
using namespace std;


vector<PointF*> posVec;


void GISPolyline::AddPoint(CPoint pos)
{
    PointF * posF = new PointF(pos.x,pos.y);
    posVec.push_back(posF);
}


void CXXX::Draw( Graphics& Gr,CRect rect )
{
   Pen m_Pen(Color::Red,2.0f);

if (posVec.size() > 1)
{
int number = posVec.size();
PointF* points = new PointF[number];
int i = 0;

std::vector<PointF*>::iterator ipos = posVec.begin();
for( ; ipos != posVec.end(); ipos++ )
{
points[i].X = (*ipos)->X;
points[i].Y= (*ipos)->Y;
i++;
}

// Draw lines to screen.
Gr.DrawLines(&m_Pen, points, number);

delete[] points;
}
}
MFC(Microsoft Foundation Classes)是微软提供的一种用于开发Windows应用程序的基础框架,而GDI+(Graphics Device Interface Plus)是.NET Framework的一部分,提供了高级的图形功能。如果你想在MFC应用中使用GDI+绘制网格背景、正方形图案以及执行缩放、旋转和平移操作,你需要按照以下步骤进行: 1. **包含头文件**: 首先,确保在你的源文件中包含了必要的GDI+库和MFC相关的头文件: ```cpp #include "afxwin.h" #include <windows.gdiplus.h> using namespace Gdiplus; ``` 2. **创建Graphics对象**: 创建一个`Graphics`对象,它会在指定的窗口DC上工作: ```cpp CBitmap bitmap; // 图形上下文 Graphics graphics(hdc, &bitmap); ``` 这里的`hdc`是你的设备上下文(Device Context),通常来自于窗口。 3. **绘制网格**: 使用`DrawLines`或`DrawRectangle`方法,你可以画出网格线,但GDI+本身没有内置的网格绘制方法,可能需要自己计算并绘制。 4. **正方形图案**: 创建一个`SolidBrush`用颜色填充正方形,然后用`FillRectangle`或`Rectangle`方法来绘制正方形。如果要绘制图案,可以使用`Pen`配合`DrawRectangles`。 5. **缩放和旋转**: 使用`ScaleTransform`和`RotateTransform`方法对图形进行变换。例如: ```cpp Matrix matrix; matrix.Scale(scaleFactor, scaleFactor); // 缩放比例因子 graphics.Transform(matrix); matrix.Rotate(degreesToRadians(rotateDegree)); // 角度转弧度 graphics.Transform(matrix); ``` 6. **平移**: 使用`TranslateTransform`方法: ```cpp matrix.Translate(dx, dy); // 平移距离 (x, y) graphics.Transform(matrix); ``` 7. **保存结果**: 完成所有绘制后,记得调用`Graphics::Flush`来确保所有绘图都完成到屏幕上,然后释放资源: ```cpp bitmap.Save("output.png", &SaveOptions[0]); graphics.Release(); ``` 8. **事件处理和更新**: 如果你想根据用户的交互动态改变这些效果,你可能需要在消息循环中监听鼠标的移动和按键,然后相应地调整图形的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值