在MFC窗口重绘中(孙鑫视频11讲),书上是将graph设为指针变量,而我是将graph设为view类的数据成员

在MFC窗口重绘中(孙鑫视频11讲),书上是将graph设为指针变量,而我是将graph设为view类的数据成员,可是发生重绘时候,只显示最后一个图像,求高手解答!!![... 在MFC窗口重绘中(孙鑫视频11讲),书上是将graph设为指针变量,而我是将graph设为view类的数据成员,可是发生重绘时候,只显示最后一个图像,求高手解答!!!
[code=c]void CGraphic11View::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CClientDC dc(this); CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); dc.SelectObject(pBrush); switch (m_nDrawType)

{ case 1: dc.SetPixel(point,RGB(255,0,0)); break; case 2: dc.MoveTo(m_OriginPoint); dc.LineTo(point); break; case 3: dc.Rectangle(CRect(m_OriginPoint,point)); break; case 4: dc.Ellipse(CRect(m_OriginPoint,point)); break; } graph.m_nDrawType=m_nDrawType; graph.m_ptOrigin=m_OriginPoint; graph.m_ptEnd=point; m_ptrArray.Add(&graph); CView::OnLButtonUp(nFlags, point);}[/code]
[code=c]void CGraphic11View::OnDraw(CDC* pDC){ CGraphic11Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here for (int i=0;i<m_ptrArray.GetSize();i++) { switch (((CGraph*)(m_ptrArray.GetAt(i)))->m_nDrawType) { case 1: pDC->SetPixel(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd,RGB(255,0,0)); break; case 2: pDC->MoveTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin); pDC->LineTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd); break; case 3: pDC->Rectangle(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin, ((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd)); break; case 4: pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin, ((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd)); break; } }}[/code]
展开
 我来答
bhtzu
2013-06-06 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4187万
展开全部
问题应该出在这里:m_ptrArray.Add(&graph);
graph是类成员函数,它的地址是固定的,那么每次指针数组Add的时候,每个元素得到的都是同一个指针地址,也就是指向了同一个graph,这样当最后一个赋值的时候,数组内所有成员的数值都被赋值为同一个,当然只画一个了。
使用graph指针,应该是每次都重新new的吧,这样才能让数组每一个成员都是不同的内存地址。
xz宏定义
2013-06-06 · TA获得超过1029个赞
知道小有建树答主
回答量:1621
采纳率:100%
帮助的人:226万
展开全部
graph是类成员函数,它的地址是固定的,那么每次指针数组Add的时候,每个元素得到的都是同一个指针地址,也就是指向了同一个graph,这样当最后一个赋值的时候,数组内所有成员的数值都被赋值为同一个,当然只画一个了。
使用graph指针,应该是每次都重新new的吧,这样才能让数组每一个成员都是不同的内存地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式