设置不同线宽、颜色后,画2个椭圆,窗口大小改变后,怎么使先前画的图颜色不变显示出来?
在OnLButtonUp(UINT nFlags, CPoint point) 中将画的图保存起来:
CGraphic *pGraphic=new CGraphic(m_nDrawType,m_ptOrigin,point,m_clr);
m_ptrArray.Add(pGraphic);在OnDraw(CDC* pDC)中重画,窗口改变后,两个椭圆都变成了最后设置的颜色,怎么解决啊?请教了
在OnLButtonUp(UINT nFlags, CPoint point) 中将画的图保存起来:
CGraphic *pGraphic=new CGraphic(m_nDrawType,m_ptOrigin,point,m_clr);
m_ptrArray.Add(pGraphic);在OnDraw(CDC* pDC)中重画,窗口改变后,两个椭圆都变成了最后设置的颜色,怎么解决啊?请教了
解决方案 »
- 散零头分
- 文件映射关于内存不足的问题
- CStatic类中关于Create函数的一个疑问
- 大家帮个忙,一个关于数据库连接的问题,急,在线等待!!!!
- 万分紧急 !!!!急急急!!!VC先调用API函数进行简繁体的转换问题
- 我在unicode环境下,用CStdioFile的ReadString读取一个Ansi的文本文件中的一行,读取的内容错误?请看源码
- CTreeCtrl 第二次点击时就不见了?????
- 请问大家谁知道这个按钮类库的下载网址?
- 在程序中如何设置对话框的Caption!
- WH_GETMESSAGE钩子的问题[SDK]刚才那个不知道为什么打不开!
- 大家把“代码注释” 转换成 “帮助文档”都用的什么工具?
- 各位虾哥虾姐们,救命啊!怎样定义一个CStatic?怎样在View或Dialog、CWnd派生对象等上面显示它啊?
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
pDC->SelectObject(pBrush);CPen pen(m_nLineStyle,m_nLineWidth,m_redrawClr);
pDC->SelectObject(&pen);pDC->Ellipse(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin,
((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd));
你这里使用了当前的线型和颜色等参数,自然按照当前的参数进行绘制了。
要保留之前的参数,那么你除了要在鼠标事件中记录点坐标外,这些参数你也要保留才行啊。
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this); //画笔
CPen pen(m_nLineStyle,m_nLineWidth,m_clr);
dc.SelectObject(&pen); //透明画刷
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //画刷
CBrush brush(HS_DIAGCROSS,RGB(255,1,1));// dc.SelectObject(&brush);
dc.SelectObject(pBrush); switch(m_nDrawType)
{
case 1:
dc.SetPixel(point,m_clr);
break;
case 2:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
break;
case 3:
dc.Rectangle(CRect(m_ptOrigin,point));
break;
case 4:
dc.Ellipse(CRect(m_ptOrigin,point));
break;
}
CGraphic *pGraphic=new CGraphic(m_nDrawType,m_ptOrigin,point,m_clr);
m_ptrArray.Add(pGraphic);
CView::OnLButtonUp(nFlags, point);
}void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
pDC->SelectObject(pBrush); CPen pen(m_nLineStyle,m_nLineWidth,m_clr);
pDC->SelectObject(&pen); for (int i=0;i<m_ptrArray.GetSize();i++)
{
switch(((CGraphic*)m_ptrArray.GetAt(i))->m_nDrawType)
{
case 1:
pDC->SetPixel(((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd,m_clr);
break;
case 2:
pDC->MoveTo(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin);
pDC->LineTo(((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd);
break;
case 3:
pDC->Rectangle(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin,
((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd));
break;
case 4:
pDC->Ellipse(CRect(((CGraphic*)m_ptrArray.GetAt(i))->m_ptOrigin,
((CGraphic*)m_ptrArray.GetAt(i))->m_ptEnd));
break;
} }}
你仔细看看吧,你OnDraw时固定使用了这个m_clr。这个m_clr就是最后一次产生的颜色。而你每个图形记录的颜色在你的CGraphic类中,你并没有使用啊。
for (int i=0;i<m_ptrArray.GetSize();i++)
{
CGraphic *pGraphic = m_ptrArray.GetAt(i);
CPen pen(m_nLineStyle,m_nLineWidth,pGraphic->m_clr);
pDC->SelectObject(&pen);
switch(pGraphic->m_nDrawType)
......