// DrawView.cpp : CDrawView 类的实现
//#include "stdafx.h"
#include "Draw.h"#include "DrawDoc.h"
#include "DrawView.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CDrawViewIMPLEMENT_DYNCREATE(CDrawView, CView)BEGIN_MESSAGE_MAP(CDrawView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()// CDrawView 构造/析构CDrawView::CDrawView()
: m_ptOrigin(0)
{
// TODO: 在此处添加构造代码
   m_ptOrigin=0;
}CDrawView::~CDrawView()
{
}BOOL CDrawView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
//  CREATESTRUCT cs 来修改窗口类或样式 return CView::PreCreateWindow(cs);
}// CDrawView 绘制void CDrawView::OnDraw(CDC* /*pDC*/)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
}
// CDrawView 打印BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}void CDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}void CDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清除过程
}
// CDrawView 诊断#ifdef _DEBUG
void CDrawView::AssertValid() const
{
CView::AssertValid();
}void CDrawView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}CDrawDoc* CDrawView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
return (CDrawDoc*)m_pDocument;
}
#endif //_DEBUG
// CDrawView 消息处理程序void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptOrigin=point;
// TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnLButtonDown(nFlags, point);
}void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 /*  HDC hdc;
   hdc=::GetDC(m_hWnd);
   MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
   LineTo(hdc,point.x,point.y);
   ::ReleaseDC(m_hWnd,hdc);  
*/
/*
   CDC *pDC=GetDC();
   pDC->MoveTo(m_ptOrigin);
   pDC->LineTo(point);
   ReleaseDC(pDC);
*/
  // CClientDC dc(this);
  
/* CClientDC dc(GetParent());
   dc.MoveTo(m_ptOrigin);
   dc.LineTo(point);
   */   //CWindowDC dc(this);
   //CWindowDC dc(GetParent());
     
   /*
CWindowDC dc(GetDesktopWindow());
   dc.MoveTo(m_ptOrigin);
   dc.LineTo(point);
*/

CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
    CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);
  
 CView::OnLButtonUp(nFlags, point);
   }运行之后为什么会报错:
1>------ 已启动生成: 项目: Draw, 配置: Debug Win32 ------
1>正在编译...
1>DrawView.cpp
1>c:\users\starrain\documents\visual studio 2005\projects\draw\draw\drawview.cpp(25) : error C2440: “static_cast”: 无法从“void (__cdecl *)(UINT,CPoint)”转换为“void (__thiscall CWnd::* )(UINT,CPoint)”
1>        没有使该转换得以执行的上下文
1>c:\users\starrain\documents\visual studio 2005\projects\draw\draw\drawview.cpp(148) : error C2671: “CDrawView::OnLButtonUp”: 静态成员函数没有“this”指针
1>c:\users\starrain\documents\visual studio 2005\projects\draw\draw\drawview.cpp(150) : error C2597: 对非静态成员“CDrawView::m_ptOrigin”的非法引用
1>c:\users\starrain\documents\visual studio 2005\projects\draw\draw\drawview.cpp(154) : error C2352: “CWnd::OnLButtonUp”: 非静态成员函数的非法调用
1>        f:\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(2645) : 参见“CWnd::OnLButtonUp”的声明
1>生成日志保存在“file://c:\Users\StarRain\Documents\Visual Studio 2005\Projects\Draw\Draw\Debug\BuildLog.htm”
1>Draw - 4 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
在vc2005中的时候
关键是
1>c:\users\starrain\documents\visual studio 2005\projects\draw\draw\drawview.cpp(25) : error C2440: “static_cast”: 无法从“void (__cdecl *)(UINT,CPoint)”转换为“void (__thiscall CWnd::* )(UINT,CPoint)”
这句是什么问题?