SOS!关于VC ,OnDraw,对话框,重画,不显示啊?!!!

noble_guang 2009-12-17 05:33:37
我的程序是这样的:
单文档窗口,在一开始创建一个对话框,在这个对话框上画线,我打算当窗口变化或被遮挡后,在这个对话框上重新显示刚刚画的线。

我首先这样做的::
对话框类里添加OnPaint消息处理函数。
但是这样会造成死循环!CPU100%使用率,而且移动对话框的时候,会在主窗口的工具栏上留下刮痕。我还设置断点调试,发现一直在OnPaint函数里面运行~~~画面上的线条一直在闪动~~~~不知道问题在哪

后来有这样:
在对话框类定义一个与重画相关的普通函数,用view类的OnDraw函数通过对话框对象,调用那个重画函数。
问题是:这样对话框上不立即显示重画的内容啊?!!当我在拖动一下这个对话框,重画操作才有效!!这是为什么??怎么解决啊??我分别试了Invalidate()和UpdateWindow(),还是不行,高手帮帮忙啊?!!

请教高手赐教啊~~~谢谢,感激不尽!~
...全文
304 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
noble_guang 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 oldn_cc_bird 的回复:]
很明显你把CPaintDC dc给删掉了。
[/Quote]已经解决了,我现在没用那个onpaint那种解决途径,而是用我在二楼写的那种方法,只不过在重绘之前调用一下updatewindow(),就解决了····

你说的可能有用!我确实注释掉CPaintDC dc 了,没用它,呵呵
其他人的回答感觉没有什么用~~~
oldn123 2009-12-18
  • 打赏
  • 举报
回复
很明显你把CPaintDC dc给删掉了。
fleer 2009-12-18
  • 打赏
  • 举报
回复
你拖动一下对话框,View才会OnDraw啊,然后才调用你对话框的MDraw的。
CPU占用高,你不会是在DrawOBJ里面有Invalidate之类的函数吧:-D
子曰小玖 2009-12-17
  • 打赏
  • 举报
回复
保存之后,在画线
noble_guang 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 a746027209 的回复:]
你这样绕来绕去太麻烦了!直接在对话框的OnPaint函数中重画一下线就可以了,死循环可能是你某个地方没处理好,就像这while(L-1>index++)...就很有可能,建议你在多调试调试。
[/Quote]
那个没问题的,因为我按照 我在二楼写的那样就不会出问题,而按照三楼写的那样就有问题。
noble_guang 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 schlafenhamster 的回复:]
while(L-1>index++)
{//L--;//??否则死循环
pDoc->GetOBJ(index)->DrawOBJ(dc);//我把在对话框上画的线存到Doc类了,这
}
[/Quote]
那个没问题的,因为我按照 我在二楼写的那样就不会出问题,而按照三楼写的那样就有问题。
noble_guang 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 noble_guang 的回复:]
二楼和三楼分别是我使用的两种方法,都不行,问题见原帖···
[/Quote]
那个没问题的,因为我按照 我在二楼写的那样就不会出问题,而按照三楼写的那样就有问题。
a746027209 2009-12-17
  • 打赏
  • 举报
回复
你这样绕来绕去太麻烦了!直接在对话框的OnPaint函数中重画一下线就可以了,死循环可能是你某个地方没处理好,就像这while(L-1>index++)...就很有可能,建议你在多调试调试。
  • 打赏
  • 举报
回复
保存的代码不要在OnPaint中
schlafenhamster 2009-12-17
  • 打赏
  • 举报
回复
while(L-1>index++)
{//L--;//??否则死循环
pDoc->GetOBJ(index)->DrawOBJ(dc);//我把在对话框上画的线存到Doc类了,这
}
noble_guang 2009-12-17
  • 打赏
  • 举报
回复
二楼和三楼分别是我使用的两种方法,都不行,问题见原帖···
noble_guang 2009-12-17
  • 打赏
  • 举报
回复
原来使用OnPaint方法的代码是这样的:
void CMdlg::OnPaint()
{
MDraw(((CCADView *)pView)->GetDocument());
}
//////下面这一段和前一种方法有一个共同的操作函数
void CMdlg::MDraw(CCADDoc * pDoc)
{
CClientDC dc(this);
int index=-1,L;
L=pDoc->GetLen();//我把在对话框上画的线存到Doc类了,这方面没有问题
while(L-1>index++)
{
pDoc->GetOBJ(index)->DrawOBJ(dc);//我把在对话框上画的线存到Doc类了,这
} //方面没有问题,DrawOBJ是我自己实现的
//线类COBJ的成员函数,吧自己输出的
}
noble_guang 2009-12-17
  • 打赏
  • 举报
回复
部分代码如下:
void CCADView::OnDraw(CDC* pDC)
{
CCADDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

m_mdlg.MDraw(pDoc);//m_mdlg是那个对话框,而且是view的成员
}
void CMdlg::MDraw(CCADDoc * pDoc)
{
CClientDC dc(this);
int index=-1,L;
L=pDoc->GetLen();//我把在对话框上画的线存到Doc类了,这方面没有问题
while(L-1>index++)
{
pDoc->GetOBJ(index)->DrawOBJ(dc);//我把在对话框上画的线存到Doc类了,这
} //方面没有问题,DrawOBJ是我自己实现的
//线类COBJ的成员函数,吧自己输出的

}
xiang_yun 2009-12-17
  • 打赏
  • 举报
回复
把OnPaint中画图的代码贴出来
一般对话框,可以在OnPaint里面做绘图的操作,不会有问题的,可能还是你的代码的问题。
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅中英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧