MFC单文档里面关于图片拖动的有关问题

MFC单文档里面关于图片拖动的问题
本帖最后由 VisualEleven 于 2014-04-29 20:38:40 编辑
本人是mfc初学者,查阅资料说是鼠标拖动要响应三个鼠标消息OnLButtonDown OnLButtonUp,OnMouseMove,为此,设三个类变量:
CPoint pt;//  保存图片起始坐标
BOOL bcapture; //图片是否捕获
CSize offsetsize;  //鼠标与图片起始点的偏移量
 
然后响应的代码如下:

void abc::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
//add extra code by Richard20140428
CRect selrc(pt,size);   //add extra code by Richard
    CClientDC dc(this);  
    OnPrepareDC(&dc);  
    CRgn rgn;  
    rgn.CreateRectRgnIndirect(&selrc);  
    if(rgn.PtInRegion(point))  
    {  
        SetCapture();  
        bcapture=TRUE;  
        CPoint rcpt(pt);  
        offsetsize=point-rcpt;  
        SetCursor(LoadCursor(NULL,IDC_CROSS)); 
}

CView::OnLButtonDown(nFlags, point);
}
然后编译出现error C2065: 'size' : undeclared identifier,请问在哪里申明这个size ,怎么申明?
------解决方案--------------------
这个size应该是根据上下文内容计算出来的,
如果你当前图片大小固定100*200,可以暂时按照下面顺序

SIZE size = {100,200};
CRect selrc(pt,size);   //add extra code by Richard

------解决方案--------------------
pDC->BitBlt(0, 0, bmp.bmWidth, bmp.bmHeight, &dcMem, 0, 0, SRCCOPY);//绘制位图
红的 00 应该是新的 位置
------解决方案--------------------
//.h 
CBitmap m_bmp;
int m_width;
int m_height;
int m_NewX;
int m_NewY;
////
//.cpp
// ctors
m_bmp.LoadBitMap(IDB_BITMAP1);// 小于 对话框
BITMAP bm;
m_Bitmap.GetBitmap(&bm);
m_width=bm.Width;
m_height=bm.Height;
m_NewX=-1;
m_NewY=-1;
// onpaint
{
    CPaintDC dc(this);
   CDC memDC;
   memDC.CreateCompatibleDC(&dc);
   memDC.SelectObject(m_bmp.m_hObject);
  dc.BitBlt(0,0, m_wiidth,m_height, &dcMem, 0, 0, SRCCOPY),// 原始 图
  if ((m_New >= 0) 
------解决方案--------------------
 (m_newY >=0))
        dc.BitBlt(n_NewX, m_NewY, bmp.bmWidth, bmp.bmHeight, &dcMem, 0, 0, SRCCOPY),
// do not call 对话框 Onpaint()
}
// OnLButtonDown
   m_newX=point.x;
   m_newY=point.y;
   Invalidate();
   CDialod::OnLButtonDown(
}
 手打的 !