这是一段用CPen画线的代码,请大家帮我看看问题出在那里了?非常感谢!!

时间:2021-08-17 21:50:23
这是一段用CPen画直线的代码:
         CPen pen(nLineStyle,nWidth,crColor);
CClientDC dc(this); //请尤其注意这里!!
CPen * pOldPen = dc.SelectObject(&pen);
dc.MoveTo(startPoint);
dc.LineTo(endPoint);
dc.SelectObject(pOldPen);

将上面这段代码放在CView类的OnLButtonUp函数里,测试,完全通过!能够画出线条出来.现在,我自己写了一个类,将上面代码封装起来,放在下面这个函数里,在然后到CView类的OnLButtonUp函数里调用我自己写的这个函数,可是我刚把我的类写好,还没有放到CView类的OnLButtonUp函数里,测试就意外出现了错误:


bool CMyLine::drawLine()  //这里是我自己编写的一个类和画线的成员函数,
{
CPen pen(nLineStyle,nWidth,crColor);
CClientDC dc(this);//主要就是这一行:错误信息是:
         //CClientDC::CClientDC :cannot convert parameter 1 from 'class CMyLine *const ' to 'class CWnd*'

CPen * pOldPen = dc.SelectObject(&pen);
dc.MoveTo(startPoint);
dc.LineTo(endPoint);
dc.SelectObject(pOldPen);

}


请大家帮我分析一下这是什么意思:
         CClientDC dc(this);//主要就是这一行:错误信息是:
         //CClientDC::CClientDC :cannot convert parameter 1 from 'class CMyLine *const ' to 'class CWnd*'

再次表示感谢!!!

8 个解决方案

#1


大家快帮帮我啊,555555555

#2


CClientDC dc(this)当然出错了,这里this指什么呢?在CView中this指CView类的实例,是可以的,而在你自己的类中,this指的是你自己这个类的实例,当然不行了。

#3


CClientDC 是MFC定义一个类,它的构造函数需要一个参数,参数是CWnd型指针。所以你的做法出错了。

#4


CClientDC dc(this)当然出错了,这里this指什么呢?在CView中this指CView类的实例,是可以的,而在你自己的类中,this指的是你自己这个类的实例,当然不行了。
==============================================
楼上说的对啊
你可以这样实现
在你的函数里设个参数
bool CMyLine::drawLine(CDC* pDC)
在调用的时候这样用
CDC*pDC=GetDC()
myline.drawline(pDC);

#5


楼上的兄弟,我按照你说的修改了,可是还是有这样的错误:
bool MyLine::drawLine(CDC *pdc)
{
....
CClientDC dc(pDC);////CClientDC::CClientDC :cannot convert parameter 1 from 'class CMyLine *const ' to 'class CWnd*'
...
}

我估计是因为CClientDC的构造函数里的参数是因为需要CWnd指针,而不是CDC类指针,所以发生了错误,各位大虾快帮我啊!怎么将CDC类指针转化为CWnd指针?

#6


你的MyLine 不是从CWnd继承下来的,
bool MyLine::drawLine(CDC *pdc)传入 pdc ,

已经得到画图dc了,  还要再定义一个CClientDC dc做什么?
直接用得到的pdc开始画,pdc->LineTo(...).....

#7


楼上真是高手,佩服!
一修改,就通过!
听君一席话,胜读十年书!
谢谢!

#8


楼上的兄弟,我按照你说的修改了,可是还是有这样的错误:
bool MyLine::drawLine(CDC *pdc)
{
....
CClientDC dc(pDC);////CClientDC::CClientDC :cannot convert parameter 1 from 'class CMyLine *const ' to 'class CWnd*'
...
}

我估计是因为CClientDC的构造函数里的参数是因为需要CWnd指针,而不是CDC类指针,所以发生了错误,各位大虾快帮我啊!怎么将CDC类指针转化为CWnd指针?
======================================
是我没说明白    seu07201213解答很详细了
我所说的调用是你调用该drawline函数的时候,比如在lbuttonup里边。

#1


大家快帮帮我啊,555555555

#2


CClientDC dc(this)当然出错了,这里this指什么呢?在CView中this指CView类的实例,是可以的,而在你自己的类中,this指的是你自己这个类的实例,当然不行了。

#3


CClientDC 是MFC定义一个类,它的构造函数需要一个参数,参数是CWnd型指针。所以你的做法出错了。

#4


CClientDC dc(this)当然出错了,这里this指什么呢?在CView中this指CView类的实例,是可以的,而在你自己的类中,this指的是你自己这个类的实例,当然不行了。
==============================================
楼上说的对啊
你可以这样实现
在你的函数里设个参数
bool CMyLine::drawLine(CDC* pDC)
在调用的时候这样用
CDC*pDC=GetDC()
myline.drawline(pDC);

#5


楼上的兄弟,我按照你说的修改了,可是还是有这样的错误:
bool MyLine::drawLine(CDC *pdc)
{
....
CClientDC dc(pDC);////CClientDC::CClientDC :cannot convert parameter 1 from 'class CMyLine *const ' to 'class CWnd*'
...
}

我估计是因为CClientDC的构造函数里的参数是因为需要CWnd指针,而不是CDC类指针,所以发生了错误,各位大虾快帮我啊!怎么将CDC类指针转化为CWnd指针?

#6


你的MyLine 不是从CWnd继承下来的,
bool MyLine::drawLine(CDC *pdc)传入 pdc ,

已经得到画图dc了,  还要再定义一个CClientDC dc做什么?
直接用得到的pdc开始画,pdc->LineTo(...).....

#7


楼上真是高手,佩服!
一修改,就通过!
听君一席话,胜读十年书!
谢谢!

#8


楼上的兄弟,我按照你说的修改了,可是还是有这样的错误:
bool MyLine::drawLine(CDC *pdc)
{
....
CClientDC dc(pDC);////CClientDC::CClientDC :cannot convert parameter 1 from 'class CMyLine *const ' to 'class CWnd*'
...
}

我估计是因为CClientDC的构造函数里的参数是因为需要CWnd指针,而不是CDC类指针,所以发生了错误,各位大虾快帮我啊!怎么将CDC类指针转化为CWnd指针?
======================================
是我没说明白    seu07201213解答很详细了
我所说的调用是你调用该drawline函数的时候,比如在lbuttonup里边。