三九宝宝网宝宝绘画儿童画

用MFC实现对打开图片的拖动效果

02月12日 编辑 39baobao.com

你需要定义几个标志变量用来表示鼠标左键按下,鼠标当前位置

比如:

BOOL m_leftMouseDown; // 左键是否按下的标准变量

BOOL m_isMouseInBitmapRound; // 鼠标在当前位图范围内吗

CPoint m_oldMousePosition; // 上一次鼠标所在位置

CPoint m_currentMousePosition; // 当前鼠标所在位置

CPoint m_bmpStartPosition; // 位图起始位置

UINT m_bmpWidth; // 位图宽度

UINT m_bmpHeight; // 位图高度

CBitmap m_bitmap; // 在对话框构造函数中LoadBitmap()加载位图,以后程序中就可以随便引用了

// 在鼠标左键按下的消息响应函数中设置标志粘贴

void OnLeftMouseDown(CPoint pt)

{

m_leftMouseDown = TRUE;

m_isMouseInBitmapRound = IsMouseInBitmapRound(pt);

}

// 在鼠标左键弹起的消息响应函数中设置标志

void OnLeftMouseUp()

{

m_leftMouseDown = FALSE;

}

// 在鼠标左键移动的消息响应函数中编写代码

void OnLeftMouseMove(CPoint pt)

{

// 鼠标在位图上按下左键

if(m_leftMouseDown & m_isMouseInBitmapRound)

{

m_currentMousePosition = pt;

// 计算移动的距离

int offsetX = m_currentMousePosition.x - m_oldMousePosition.x;

int offsetY = m_currentMousePosition.y - m_oldMousePosition.y;

// 更新位图显示的起始位置

int m_bmpStartPosition.x += offsetX;

int m_bmpStartPosition.y += offsetY;

// 调用BitBlt 复制位图 或者Invalidate(TRUE) 然后在OnDraw()中BitBlt,参数是更新后的起始位置

// 将当前位置置为旧, 否则不能连续拖动好几次

m_oldMousePosition = m_currentMousePosition;

// 大概就是这样

}

}

BOOL IsMouseInBitmapRound(CPoint mousePoint)

{

int x = mousePoint.x;

int y = mousePoint.y;

int bmp_x = m_bmpStartPosition.x;

int bmp_y = m_bmpStartPosition.y;

if( x >bmp_x & x bmp_y & y {

return TRUE;

}

return FALSE;

}

推荐阅读
图文推荐