MFC单文档里面关于图片拖动的有关问题
MFC单文档里面关于图片拖动的问题
本人是mfc初学者,查阅资料说是鼠标拖动要响应三个鼠标消息OnLButtonDown OnLButtonUp,OnMouseMove,为此,设三个类变量:
CPoint pt;// 保存图片起始坐标
BOOL bcapture; //图片是否捕获
CSize offsetsize; //鼠标与图片起始点的偏移量
然后响应的代码如下:
------解决方案--------------------
这个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(
}
手打的 !
本人是mfc初学者,查阅资料说是鼠标拖动要响应三个鼠标消息OnLButtonDown OnLButtonUp,OnMouseMove,为此,设三个类变量:
CPoint pt;// 保存图片起始坐标
BOOL bcapture; //图片是否捕获
CSize offsetsize; //鼠标与图片起始点的偏移量
然后响应的代码如下:
然后编译出现error C2065: 'size' : undeclared identifier,请问在哪里申明这个size ,怎么申明?
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);
}
------解决方案--------------------
这个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(
}
手打的 !