视类为CScrollView时,在OnDraw中用DrawText函数输出文字后,拖动滚动条会花屏?
具体问题是这样的:我的视类是CScrollView,在视类的OnDraw函数中使用DrawText函数输出文字后,拖动滚动条会使输出的文字重叠,导致花屏!我的开发环境是Visual Studio 2005,开发的是Windows Mobile 5.0应用程序。在OnDraw函数中添加的代码是:
int strNum; \\theArray变量的类型是CStringArray,strNum是theArray字符串数组中字符串的个数
int i;
strNum=theArray.GetSize();
RECT rect;
rect.left=0;
rect.right=400;
rect.top=0;
rect.bottom=15;
CFont font;
font.CreatePointFont(100,_T( "宋体 "));
CFont *pOldFont;
pOldFont=pDC-> SelectObject(&font);
for(i=0;i <strNum;i++)
{
pDC-> DrawText(theArray.GetAt(i),theArray.GetAt(i).GetLength(),&rect,DT_LEFT);
rect.top+=15;
rect.bottom+=15;
}
[解决办法]
你需要自己定义DPToLP和LPToDP这两个函数(可能会和系统的重名,那就换个名字,呵呵)。
在这里面实现逻辑坐标和设备坐标之间的转换。每次画图之前,都要把坐标转换成设备坐标。记得画完之后在转换回来!
给你一个我的做法:
void CLayOutView::DPtoLPM(CPoint& point)
{
CPoint pointOrigin = GetScrollPosition();
point += pointOrigin;
}
void CLayOutView::LPtoDPM(CPoint& point)
{
CPoint pointOrigin = GetScrollPosition();
point -= pointOrigin;
}