求助MFC大神 重绘的疑问

voidCoutput_textView::OnDraw(CDC*pDC){CSdafsadfasdfDoc*pDoc=GetDocument();ASSERT_VALI... void Coutput_textView::OnDraw(CDC* pDC)
{
CSdafsadfasdfDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

SetTimer(1,100,NULL); //每隔100毫秒输出一个hello
pDC->TextOut(0,y,"hello"); //y的初值为0,在构造函数里面已经定义了

}
/////////////////////////////////////////////////////////////////////////////////////

void Coutput_textView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

y=y+10; //纵坐标改变10
Invalidate(true); //每100毫秒重绘一次

CView::OnTimer(nIDEvent);
}

现在的效果是每隔100毫秒,“hello”就输出一次,每一次的位置都向下面移动一些,但是整个MFC界面就只有1个“hello”了

我想输出一整列的“hello”,类似于下面的效果,每隔100毫秒就多一个hello

hello
hello
hello
hello
hello
hello
hello
hello
……

该怎么做呢?求解
展开
 我来答
bhtzu
2013-05-23 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4456万
展开全部
  1. 首先,SetTimer放到OnDraw中,是错误的,这会造成定时器频繁反复创建,推荐放到初始化函数或者菜单/按钮响应函数中。

  2. 每100m秒多一个hello,等于10秒钟之后,OnDraw要画1000个hello,因此,定制器只是应该做累加(刷新可以优化为局部优化InvalidateRect),而OnDraw里面应该这样:

void Coutput_textView::OnDraw(CDC* pDC)
{
CSdafsadfasdfDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int n=y/10;//这里应该有个初始值记录,假设为y0

for(int i=0;i<n;i++)

pDC->TextOut(0,y0+10+i*10,"hello"); //如果y的初值为0,可以去掉y0了
}

AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式