我是菜鸟,有个问题不懂,大家不要笑我哦!第一次发帖子,不懂规矩,不好意思。

mianyang621000 2005-09-22 08:47:56
有一个小问题,希望学长指点,打扰休息,实在抱歉
一个简单得绘图程序
先用MFC AppWizard[exe]建了个SDI的MyDraw。
在CMyDrawView添加
protected:
CPoint m_ptOrigin; //初始点坐标
bool m_bDragging; //拖拽标记
HCURSOR m_hCross; //光标句柄
再构造函数里设置拖拽标记合十字光标。
CMyDrawView::CMyDrawView()
{
// TODO: add construction code here
m_bDragging=false; //初始化拖拽标记
m_hCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS); //获得十字光标句柄
}
自添加消息处理函数
void CMyDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetCapture(); //捕捉鼠标
::SetCursor(m_hCross); //设置十字光标
m_ptOrigin=point;
m_bDragging=true; //设置拖拽标记
// CView::OnLButtonDown(nFlags, point);
}
void CMyDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bDragging)
{
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point); //绘制线段
m_ptOrigin=point; //新的起始点
}
// CView::OnMouseMove(nFlags, point);
}
void CMyDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bDragging)
{
m_bDragging=false; //清拖拽标记
ReleaseCapture(); //释放鼠标,还原鼠标形状
}
// CView::OnLButtonUp(nFlags, point);
}
初始化中设置标题。
BOOL CMyDrawApp::InitInstance()
{
AfxEnableControlContainer();
......
m_pMainWnd->UpdateWindow();
m_pMainWnd->SetWindowText("刘荻给彭茜画的图。"); //设置标题栏
return TRUE;
}
但问题出现再后面,为了再重绘窗口时能显示已绘制的线段。
新建了类CLine:
class CLine //自填加的线段类
{
private:
//定义成员变量,表示一条直线起点的坐标
CPoint m_pt1;
CPoint m_pt2;
public:
CLine();
virtual ~CLine();
CLine(CPoint pt1,CPoint pt2);//定义线段的构造函数
void DrawLine(CDC *pDC); //定义绘制线段的成员函数
};
CLine::CLine(CPoint pt1,CPoint pt2)
{
m_pt1=pt1;
m_pt2=pt2;
}
自定义画线函数
void CLine::DrawLine(CDC*pDC)
{
pDC->MoveTo(m_pt1);
pDC->LineTo(m_pt2);
}
在CMyDrawDoc中定义变量
#include"Line.h"//添加的头文件
#include<afxtempl.h>//
class CMyDrawDoc : public CDocument
{
......
protected:
CTypedPtrArray<CObArray,CLine*> m_LineArray;//存放线段对象指针的动态数组。
public:
CLine*GetLine(int nIndex); //获取指定序号线段对象的指针
void AddLine(CPoint pt1,CPoint pt2);//向动态数组中添加新的线段对象的指针
int GetNumLines(); //获取线段的数量
......
};
在实现文件中编写了
void CMyDrawDoc::AddLine(CPoint pt1, CPoint pt2)
{
CLine *pLine=new CLine(pt1,pt2); //新建一条线段对象
m_LineArray.Add(pLine); //将该线段对象加到动态数组
}
在编译的时候出现了下面的错误报告,我也不知道为什么会这样,Add后面明明该加CLine*类型的,
可是它怎么会说出错呢?而且pLine时该类型啊?你能帮我看看吗?
--------------------Configuration: MyDraw - Win32 Debug--------------------
Compiling...
Line.cpp
MyDraw.cpp
MyDrawDoc.cpp
e:\microsoft visual studio\vc98\mfc\include\afxtempl.h(1539) : error C2664: 'Add' : cannot convert parameter 1 from 'class CLine *' to 'class CObject *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\microsoft visual studio\vc98\mfc\include\afxtempl.h(1539) : while compiling class-template member function 'int __thiscall CTypedPtrArray<class CObArray,class CLine *>::Add(class CLine *)'
MyDrawView.cpp
Generating Code...
Error executing cl.exe.
...全文
139 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cryceo 2005-09-22
  • 打赏
  • 举报
回复
那么长,看到我头晕,我也是要学的,但是我就是不懂,看你写的就象看天书一样,难啊
guosx 2005-09-22
  • 打赏
  • 举报
回复
你加入的线形类CLine应该从CObject继承,这是因为你用了CTypedPtrArray模板类.你没有必要用CTypedPtrArray,可以用CArray就可以了
rageliu 2005-09-22
  • 打赏
  • 举报
回复
这样在前面加(CObject*)强制转化一下
rageliu 2005-09-22
  • 打赏
  • 举报
回复
让你的CLine类继承CObject



up
mianyang621000 2005-09-22
  • 打赏
  • 举报
回复
我想不通的是,明明是用的CLine,怎么会有说不能转换为CObject呢?
mianyang621000 2005-09-22
  • 打赏
  • 举报
回复
还是不对
mianyang621000 2005-09-22
  • 打赏
  • 举报
回复
在定义的时候CLine:public CObject
{.....}吗?我试试
legendhui 2005-09-22
  • 打赏
  • 举报
回复
让你的CLine类继承CObject
huozi19820418 2005-09-22
  • 打赏
  • 举报
回复
CObject 是所有类的基类,一般不会进行这样的转换的,这往往会导致错误。而且你的程序中CLine和CObject两个类没有任何关系。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧