+ -
当前位置:首页 → 问答吧 → ATL制作ActiveX时,自绘出问题。

ATL制作ActiveX时,自绘出问题。

时间:2011-12-01

来源:互联网

我用VS2010,在ATL下新建立了一个ActiveX的工程,添加了一个ATL control,然后将其OnDraw方法从开始的头文件移到源文件,再在其中new了一个GraphicsPath *path = new GraphicsPath();
调试的时候发现path的值为空,请问这是为什么?

作者: koko200147   发布时间: 2011-12-01

那你不用new,直接用GraphicsPath path能操作吗
你在绘图里面,就尽可能少用new了

作者: fishion   发布时间: 2011-12-01

引用 1 楼 fishion 的回复:
那你不用new,直接用GraphicsPath path能操作吗
你在绘图里面,就尽可能少用new了


fishion老兄,不用new是可以的,path不再是空值了,但是我仿照下面的C# GDI+写的
Graphics g = this.CreateGraphics();
//环形;
GraphicsPath path = new GraphicsPath();
path.AddEllipse(0, 0, 100, 100);
path.AddEllipse(25, 25, 50, 50);
//径向渐变刷
PathGradientBrush brush = new PathGradientBrush(path); 
//using System.Drawing.Drawing2D;
//中心颜色;
brush.CenterColor = Color.Red;
//边缘颜色;
brush.SurroundColors = new Color[] { Color.White };
g.FillPath(brush, path); 

activeX并没有显示出任何图像,这是怎么回事?

C++代码如下:

OnDraw(ATL_DRAWINFO& di)中:

HDC dc = di.hdcDraw;
Graphics g(dc);
GraphicsPath path;
path.AddEllipse(0, 0, 100, 100);
path.AddEllipse(25, 25, 50, 50);
PathGradientBrush brush(&path);
brush.SetCenterColor(Color::Red);
Color clr[] = {Color::Green};
INT i = 1;
brush.SetSurroundColors(clr,&i);
g.FillPath(&brush,&path);
请教一下为什么啊?

作者: koko200147   发布时间: 2011-12-01

在08中,创建的MFC ActiveX都选择默认的话,里面的ondraw是
void CXXCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
跟LZ的不一样

作者: fishion   发布时间: 2011-12-01

引用 3 楼 fishion 的回复:
在08中,创建的MFC ActiveX都选择默认的话,里面的ondraw是
void CXXCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
跟LZ的不一样


老大,

我用的是VS2010但这个还不是问题,问题是,我用的是ATL,跟MFC没关系。

作者: koko200147   发布时间: 2011-12-01

单步调试

作者: WaistCoat06   发布时间: 2011-12-01