一个拉线绘图的程序,原来使用CView是好着的,后来想改为CScrollView就直接查找替换后,在原来的MyView中添加了
afx_msg int OnCreate(LPCREATESTRUCT lpcs);
并添加到消息映射中
ON_WM_CREATE()
下面是OnCreate函数
int MyView::OnCreate(LPCREATESTRUCT lpcs)
{
CScrollView::OnCreate(lpcs);
SetScrollSizes(MM_TEXT,CSize(4096,4096));
return 0;
}
保存线段的时候也使用了GetScrollPosition()进行坐标变换,问题在于运行时候出现如下错误:error LNK2019: 无法解析的外部符号 "protected: virtual void __thiscall CScrollView::OnDraw(class CDC *)" (?OnDraw@CScrollView@@MAEXPAVCDC@@@Z),该符号在函数 "public: virtual void __thiscall MyView::OnDraw(class CDC *)" (?OnDraw@MyView@@UAEXPAVCDC@@@Z) 中被引用
1>D:\VCcode\MFC\Debug\linedraw.exe : fatal error LNK1120: 1 个无法解析的外部命令采用在MyView中添加void OnInitialUpdate();
void MyView::OnInitialUpdate()
//{
// CScrollView::OnInitialUpdate();
// SetScrollSizes(MM_TEXT,CSize(4096,4096));
//}
出现同样的错误附上OnDraw函数
void MyView::OnDraw(CDC *pDC)
{
CScrollView::OnDraw(pDC);
MyDocument *doc = (MyDocument*)GetDocument();
POSITION pos;
LineSegment line;//LineSegment是可以串行化的线段类,里面存储线段的起点和终点坐标
pos = doc->LineList.GetHeadPosition();
        //LineList是一个CList的实现,用于添加LineSegment对象
while(pos != NULL)
{
line = doc->LineList.GetNext(pos);
pDC->MoveTo(line.StartX,line.StartY);
pDC->LineTo(line.EndX,line.EndY);
}}各位大侠帮帮忙,委实不知是啥原因,我都快晕了。

解决方案 »

  1.   

    删除就好了,可是为什么呢?CView::OnDraw(pDC)就可以,不是一般都要先调用父类的函数吗?
      

  2.   

    虽然结贴了,不过我终于找到问题了,感谢KB。程序:
    #include <stdio.h>
    #include <stdlib.h>class View
    {
    public:
        virtual int OnDraw() = 0;
    protected:
    private:
    };//int View::OnDraw()
    //{
    //    printf("View\n");
    //    return 0;
    //}class VView : public View
    {
    public:
        virtual int OnDraw() = 0;
    protected:
    private:
    };class CMyView : public VView
    {
    public:
        virtual int OnDraw()
        {
            //VView::OnDraw();
    View::OnDraw();
            printf("CMyView\n");
            return 0;
        }
    protected:
    private:
    };int main()
    {
        CMyView my;
        my.OnDraw();
    }发现使用如果在CmyView中使用View::OnDraw()没有问题,使用VView::OnDraw();就会出现无法解析的外部符号的问题。View里面的OnDraw没有实现,在CMyView中使用View::OnDraw();也会出现类似的问题。所以据此可以推测可能是CView中实现了OnDraw,而CScrollView中没有。