首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

视类为CScrollView时,在OnDraw中用DrawText函数输出文字后,拖动滚动条会花屏?该怎么处理

2012-01-13 
视类为CScrollView时,在OnDraw中用DrawText函数输出文字后,拖动滚动条会花屏?具体问题是这样的:我的视类是

视类为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;
}

热点排行