MFC动态画图

MFC中,在一个对话框中画图,这个图是要动态来实现的,1秒钟画一个点。我写的程序如下:voidChuatu::OnPaint(){CPaintDCdc(this);Get... MFC中,在一个对话框中画图,这个图是要动态来实现的,1秒钟画一个点。我写的程序如下:

void Chuatu::OnPaint()
{
CPaintDC dc(this);

GetDlgItem(IDC_DIAMETER)->GetClientRect(rect);
rect.Width();
rect.Height();

SetTimer(1,1000,NULL);
}

void Chuatu::OnTimer(UINT nIDEvent)
{

huatu();//调用画图函数
CDialog::OnTimer(nIDEvent);
}

void Chuatu::huatu()
{

CWnd *pWnd = GetDlgItem(IDC_DIAMETER);
CDC* pDC = pWnd->GetDC();
CPen* pPenBlack = new CPen; //创建画笔对象
pPenBlack->CreatePen(PS_SOLID, 1, RGB(0,0,0)); //黑色画笔

CGdiObject* pOldPen = pDC->SelectObject(pPenBlack);
int x=40,y=30;
pDC->MoveTo(x,y);
x++;
y++;
pDC->LineTo(x,y);
pWnd->Invalidate();
}
不显示图。我是初学者,麻烦大家帮帮忙了
展开
 我来答
归悦欣cf
2014-03-02 · TA获得超过1444个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1326万
展开全部
CWnd *pWnd = GetDlgItem(IDC_DIAMETER);是获取控件IDC_DIAMETER的窗口对象指针,之后的画图是在控件IDC_DIAMETER的窗口里面画的,之后调用 pWnd->Invalidate();是使得控件IDC_DIAMETER窗口客户区域无效引起重绘。如果想通过Invalidate()函数在窗口绘画,那么先在某处调用Invalidate()函数,然后再在对话框的OnPaint函数这画图,显然在你的OnPaint函数里面没有画图的代码。而且为什么在OnPaint函数里面启动定时器,定时器启动可以在别的地方启动,启动后除非主动把他关掉,他就会不断起作用了。要定时绘图,可以在对话框初始化函数里面启动定时器,在定时器函数里面调用Invalidate()函数,这就相当于定时调用OnPaint函数,然后把画图代码放在OnPaint函数里面就可以了。
更多追问追答
追问

追答
要把每次画线都要保存,在每次画新线条的时候,先根据以前保存下来的数据画出以前画的线,最后画新线条。因为Invalidate()会引起整个窗口重绘,重绘的过程就是先刷新背景然后再调用OnPaint函数,如果做类比的话,就比如在黑板上画画,每次先刷黑板再画画一样,既然先刷黑板,那么前面画的东西就没有了,如果每次画新画的时候同时先把前面的也画上去,那不就等于前面画的画不丢失了吗。对于人来说,这样做会很费劲,但是对于计算机来所,太快了,人根本没有感觉不到画新线条的时候同时先画前面的线条,总体感觉就象每次画线的时候,前面画的线条还保留着一样。
AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
大摩摩白羊
2014-03-02
知道答主
回答量:4
采纳率:0%
帮助的人:5494
展开全部
婴孩四逆散 你懂得
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式