图片拖动后,上面文字出现偏移的问题
各位大神,求助啊。
小弟目前遇到一个问题,
需求描述如下:
制作了一个类似地图功能的控件,图片可以放大,缩小,拖动。而且图片上会标有文字,但是图片放大缩小拖动后文字大小不变,文字相对于图片的位置也不变
我的思路是:
先描画出缩小或放大后的图片,然后通过文字在图片上的位置,计算出文字在屏幕上显示的位置,描画再描画出文字
问题是:我将图片放大四倍左右后,再拖动图片,文字的相对于图片的位置会有1像素左右的偏差
代码如下:
CBitmap BkMap;
BkMap.CreateCompatibleBitmap(&dc, m_rect.Width(), m_rect.Height());
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&BkMap);
//SetStretchBltMode(memDC.m_hDC,HALFTONE);
//此处描画缩小或放大的图片
memDC.StretchBlt(0,0,m_rect.Width(), m_rect.Height(),
&m_memDC, m_bmpLeft, m_bmpTop, m_bmp.bmWidth/m_size, m_bmp.bmHeight/m_size,
SRCCOPY);
//此处计算通过文字在图片上的位置,计算出应该在控件上显示的位置
//m_txtX-文字在图片上的位置
//m_bmpLeft控件左上角显示图片的位置
//m_size图片放大的倍数
//m_Xtimes图片与控件的宽度比
//Y轴相关变量同X轴
CRect TheRect;
TheRect.left = (m_txtX - m_bmpLeft)*float(m_size)/float(m_Xtimes) - 200;
TheRect.top = (m_txtY - m_bmpTop)*float(m_size)/float(m_Ytimes);
TheRect.bottom = TheRect.top + 200;
TheRect.right = TheRect.left + 400;
if (m_size > 1)
{
CFont signFont;
signFont.CreatePointFont(500, L"微软雅黑");
memDC.SetBkMode(TRANSPARENT);
memDC.SelectObject(signFont);
//显示文字
memDC.DrawText(L"test",TheRect,DT_CENTER|DT_EXPANDTABS|DT_NOPREFIX);
signFont.DeleteObject();
}
dc.BitBlt(0,0,m_rect.Width(),m_rect.Height(), &memDC, 0, 0, SRCCOPY);
BkMap.DeleteObject();
memDC.DeleteDC();
this->ReleaseDC(&dc);
请诸位帮一下忙啊