回 帖 发 新 帖 刷新版面

主题:怎么在VISUAL C++ 中找错误啊

比如这个就是错误的要怎么样才可以找到错误的地方呢?
// dsadfdsView.cpp : implementation of the CDsadfdsView class
//

#include "stdafx.h"
#include "dsadfds.h"

#include "dsadfdsDoc.h"
#include "dsadfdsView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDsadfdsView

IMPLEMENT_DYNCREATE(CDsadfdsView, CScrollView)

BEGIN_MESSAGE_MAP(CDsadfdsView, CScrollView)
    //{{AFX_MSG_MAP(CDsadfdsView)
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONUP()
    ON_WM_MOUSEMOVE()
    //}}AFX_MSG_MAP
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDsadfdsView construction/destruction

CDsadfdsView::CDsadfdsView():m_sizeellipse(100,-100),
                             m_sizeoffset(0,0),
                             m_pointtopleft(0,0)
{
    m_bcapture=FALSE;

}

CDsadfdsView::~CDsadfdsView()
{
}

BOOL CDsadfdsView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDsadfdsView drawing

void CDsadfdsView::OnDraw(CDC* pDC)
{
CBrush brushhatch(HS_DIAGCROSS,RGB(255,0,0);
CPoint point(0,0);
pDC->LPtoDP(&point);
pDC->SetBrushOrg(point);
pDC->SelectObject(&brushhatch);
pDC->Ellipse(CRect(m_pointtopleft,m_sizeellipse);
pDC->SelectStockObject(BLACK_BRUSH);
pDC->Rectangle(100,-100,200,-200);
}


void CDsadfdsView::OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();

    CSize sizeTotal(800,1500);
    CSize sizepage(sizeTotal.cx/2,sizeTotal.cy/2);
    CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);

    SetScrollSizes(MM_LOENGLISH, sizeTotal,sizepage,sizeLine);
}

/////////////////////////////////////////////////////////////////////////////
// CDsadfdsView printing

BOOL CDsadfdsView::OnPreparePrinting(CPrintInfo* pInfo)
{
    // default preparation
    return DoPreparePrinting(pInfo);
}

void CDsadfdsView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add extra initialization before printing
}

void CDsadfdsView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CDsadfdsView diagnostics

#ifdef _DEBUG
void CDsadfdsView::AssertValid() const
{
    CScrollView::AssertValid();
}

void CDsadfdsView::Dump(CDumpContext& dc) const
{
    CScrollView::Dump(dc);
}

CDsadfdsDoc* CDsadfdsView::GetDocument() // non-debug version is inline
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDsadfdsDoc)));
    return (CDsadfdsDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDsadfdsView message handlers

void CDsadfdsView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    CRect rectellipse(m_pointtopleft,m_sizeellipse);
    CRgn circle;
    CClientDC dc(this);
    OnPrepareDC(&dc);
    dc.LPtoDP(rectellipse);
    circle.CreateEllipticRgnIndirect(rectellipse);
    if(circle.PtInRegion(point)){
        SetCapture();
        m_bcapture=TURE;
        CPoint pointtopleft(m_pointtopleft);
        dc.LPtoDP(&pointtopleft);
        m_sizeoffset=point-pointtopleft;
        ::SetCursor(::LoadCursor(NULL,IDC_CROSS);
}

void CDsadfdsView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    if(m_bcapture){
        ::ReleaseCapture();
        m_bcapture=FALSE;
    }
}

void CDsadfdsView::OnMouseMove(UINT nFlags, CPoint point) 
{
    if(m_bcapture){
        CClientDC dc(this);
        OnPrepare(&dc);
        CRect rectold(m_pointtopleft,m_sizeellipse);
        dc.LPtoDP(rectold);
        InvalidateRect(rectold,TRUE);
        m_pointtopleft=point-m_sizeoffset;
        dc.DPtoLP(&m_pointtopleft);
        CRect rectnew(m_pointtopleft,m_sizeellipse);
        dc.LPtoDP(rectnew);
        InvalidateRect(rectnew,TRUE);

}

回复列表 (共4个回复)

沙发

按 F11 跟踪调试

板凳

首先根据错误提示,感性判断,然后排除低级错误;如果是运行时错误,它弹出对话框,你不要点终止,你点击中断,或者调试,可以根据调用堆栈(就是函数的调用顺序)找到出错的函数。(非常感谢教我C++的一位培训讲师高老师,是他教会我了解了C/C++很多排除错误的方法)。

3 楼

根据错误提示慢慢的找~~这个貌似没有一个标准的模式啊

4 楼


现在关键地方,设置断点,然后在进行编译。
单步执行,找到出错地方!

我来回复

您尚未登录,请登录后再回复。点此登录或注册