MFC界面刷新问题

jacinths 2007-06-11 10:32:48
一个画图程序,问题是这样的:
我再CDrawEditorDoc中加了一个变量 CTypedPtrArray<CObArray, CMyobj *> m_arr;并在每画完图时把图存进m_arr中,在OnDraw()显示,OnDraw()函数如下:
void CDrawEditorView::OnDraw(CDC* pDC)
{
CDrawEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);


// TODO: add draw code for native data here
for (int i=0; i<pDoc->m_arr.GetSize(); i++)
pDoc->m_arr[i]->Draw(pDC);

switch (Curshape)
{
case Rshape :
{

pDC->Rectangle(m_pnts.x,m_pnts.y,m_pnte.x,m_pnte.y);
}
break;
case Lshape:
{
pDC->MoveTo(m_pnts);
pDC->LineTo(m_pnte);
}
break;
case Rdshape:

pDC->Ellipse(m_pnts.x,m_pnts.y,m_pnte.x,m_pnte.y);
break;
}

问题就是出现在删除图形那里~~
void CDrawEditorView::OnEditDelete()
{
// TODO: Add your command handler code here
CDrawEditorDoc* pDoc = GetDocument();
pDoc->m_arr.RemoveAt(Chioced,1);

// Invalidate();
RedrawWindow();
}

其中Chioced是我选中的要删除的那个图形在m_arr的序号~~
运行时~通过调试可以知道Chioced的这个图形在m_arr中确实已经删除~~
但在运行界面上却仍然显示有这个图形~~我用Invalidate()和RedrawWindow()函数都不行~~怎么办啊?
...全文
1511 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacinths 2007-07-04
  • 打赏
  • 举报
回复
问题解决了,原因是OnDraw()上,实质上删除了,但那个switch使图形再画了一次
stonehe 2007-06-12
  • 打赏
  • 举报
回复
设断点看看吧!
livedeal 2007-06-12
  • 打赏
  • 举报
回复
Invalidate();这里设个断点,到了这里的时候再到ondraw里设个断点看看,问题是出在哪里````````
jacinths 2007-06-12
  • 打赏
  • 举报
回复
"在RemoveAt之后或之前还需要销毁这个对象,否则有内存泄漏"如何销毁?delete pDoc->m_arr[Chioced]?好像不行~`
jacinths 2007-06-12
  • 打赏
  • 举报
回复
Mackz:
删除前后的m_arr的元素数量没有问题,删除的图形在m_arr中确实删除了~~但在界面还是画了出来~
数组里的元素是指针
菜牛 2007-06-11
  • 打赏
  • 举报
回复
你仔细比较一下删除前后的元素数量,检查Chioced是否正确,从你的代码看应该是删除不对。另外删除后用Invalidate()是对的。再试试在绘图时填充一下背景。

还有,你数组中的元素是指针,在RemoveAt之后或之前还需要销毁这个对象,否则有内存泄漏。
IMGGTOO 2007-06-11
  • 打赏
  • 举报
回复
你是在什么地方把图形数据加进列表去的?看看那个地方是不是又把你删除的图形加进去了!

实在不行,你就只搞一个图形,一个元素,全程跟踪m_arr出现的所有地方!肯定能找出来
jacinths 2007-06-11
  • 打赏
  • 举报
回复
switch (Curshape)是属于OnDraw(CDC* pDC) 的~~最后忘记了复制了一个}号~~
"hua2136()"的方法也不行~~跟pDoc->m_arr.RemoveAt(Chioced,1); 的效果一样~~
删除不了~~
hua2136 2007-06-11
  • 打赏
  • 举报
回复
m_pnts.x,m_pnts.y,m_pnte.x,m_pnte.y
把这些数据重新初始为0就可以了,由于pDC存在,会始终绘图。
引力场变动源 2007-06-11
  • 打赏
  • 举报
回复
switch (Curshape)那段是在OnDraw()里面还是在m_arr[i]->Draw(pDC)里面?如果m_arr[i]->Draw(pDC)的实现里面包含有绘图功能的话,似乎绘制了两遍?

16,466

社区成员

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

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

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