求救求救。。 我用MFC编一个画图程序,为什么颜色那一块有问题?就是我开始画的时候和鼠标移动的时候颜色是对的,而当我再次点鼠标(画完图形后),颜色又变成黑的了?怎么回事? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CMyView::OnLButtonDown(UINT nFlags, CPoint point) //lbottondown处理信息{ CClientDC dc(this); // TODO: Add your message handler code here and/or call default CreatePen(PS_SOLID,0,m_color); CBrush *CBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); dc.SelectObject(CBrush);//.... if(DrawType==1) { if(m_step==0) { m_startx=point.x; m_starty=point.y; m_step++; } else { dc.MoveTo(m_startx,m_starty); dc.LineTo(point.x,point.y); Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_ptrarray.Add(pgraph); //添加图形到动态数组中 CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_step=0; m_startx=m_starty=0; m_endx=m_endy=0; } } if(DrawType==2) { if(m_step==0) { m_startx=point.x; m_starty=point.y; m_step++; } else { dc.Rectangle(m_startx,m_starty,point.x,point.y); Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_ptrarray.Add(pgraph); CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_step=0; m_startx=m_starty=0; m_endx=m_endy=0; } } if(DrawType==3) { if(m_step==0) { m_startx=point.x; m_starty=point.y; m_step++; } else { dc.Ellipse(m_startx,m_starty,point.x,point.y); Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_ptrarray.Add(pgraph); CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_step=0; m_startx=m_starty=0; m_endx=m_endy=0; } } if(DrawType==4) { if(m_step==0) { m_startx=point.x; m_starty=point.y; m_step++; } else { dc.MoveTo(m_startx,m_starty); dc.LineTo(point.x,point.y); Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_ptrarray.Add(pgraph); CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color); m_step=0; m_startx=m_starty=0; m_endx=m_endy=0; } } CView::OnLButtonDown(nFlags, point);}void CMyView::OnLButtonUp(UINT nFlags, CPoint point) //lbottonup处理信息{ // TODO: Add your message handler code here and/or call default CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); CClientDC dc(this); CPen newPen; newPen.CreatePen(PS_SOLID,0,m_color); CBrush *CBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); dc.SelectObject(CBrush); dc.SelectObject(&newPen); switch(DrawType) { case 1: break; case 2: break; case 3: break; case 4: break; case 5: if(m_dragging) { m_dragging=false; ReleaseCapture(); } break; } CView::OnLButtonUp(nFlags, point);} OnLButtonUp 里没画图要这段代码干嘛? 出了这个函数newPen 没了 当然还原为默认画笔啦 CPen newPen; newPen.CreatePen(PS_SOLID,0,m_color); CBrush *CBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); dc.SelectObject(CBrush); dc.SelectObject(&newPen); OnLButtonDown 函数里反而没 SelectObject(&newPen) 不是在OnLButtonDown 里画吗?逻辑真乱 要记住一点,绘图代码必须放在OnPaint或者会被OnPaint调用到的函数里面,否则只要窗口一重绘或者被其他窗口覆盖后移开,那么所有努力都将白费。绘图放在OnLButtonDown里面本身就是一个设计错误。 我这个印刷品质量检测的课题该怎么做呀,手里有一款商业的图像处理SDK和OpenCV 关于文件问题 请问在VC控制台程序中main函数的函数argc 和argv分别表示什么意思?(一般情况下) 高分求助!求CT图像特征提取的源代码(VC实现) 如何把CFormView中所有的控件一次性删除? Release版本时出错! 请问VC6.0版本编译,中文版英文版问题? 求大家看看问题在哪,点击对话框中的OK,view区域并无反应 如何用代码实现这个界面,并解释原理 AfxMessageBox和MessageBox有什么区别 这段时间机器在做什么?来不及调度? 用VC怎样调出IE查找的功能
{
CClientDC dc(this);
// TODO: Add your message handler code here and/or call default
CreatePen(PS_SOLID,0,m_color);
CBrush *CBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(CBrush);//....
if(DrawType==1)
{
if(m_step==0)
{
m_startx=point.x;
m_starty=point.y;
m_step++;
}
else
{
dc.MoveTo(m_startx,m_starty);
dc.LineTo(point.x,point.y);
Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_ptrarray.Add(pgraph); //添加图形到动态数组中
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_step=0;
m_startx=m_starty=0;
m_endx=m_endy=0;
}
}
if(DrawType==2)
{
if(m_step==0)
{
m_startx=point.x;
m_starty=point.y;
m_step++;
}
else
{
dc.Rectangle(m_startx,m_starty,point.x,point.y);
Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_ptrarray.Add(pgraph);
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_step=0;
m_startx=m_starty=0;
m_endx=m_endy=0;
}
}
if(DrawType==3)
{
if(m_step==0)
{
m_startx=point.x;
m_starty=point.y;
m_step++;
}
else
{
dc.Ellipse(m_startx,m_starty,point.x,point.y);
Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_ptrarray.Add(pgraph);
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_step=0;
m_startx=m_starty=0;
m_endx=m_endy=0;
}
}
if(DrawType==4)
{ if(m_step==0)
{
m_startx=point.x;
m_starty=point.y;
m_step++;
}
else
{
dc.MoveTo(m_startx,m_starty);
dc.LineTo(point.x,point.y);
Cgraph *pgraph=new Cgraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_ptrarray.Add(pgraph);
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->AddGraph(DrawType,m_startx,m_starty,point.x,point.y,m_color);
m_step=0;
m_startx=m_starty=0;
m_endx=m_endy=0;
}
}
CView::OnLButtonDown(nFlags, point);
}void CMyView::OnLButtonUp(UINT nFlags, CPoint point) //lbottonup处理信息
{
// TODO: Add your message handler code here and/or call default
CMyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
CClientDC dc(this);
CPen newPen;
newPen.CreatePen(PS_SOLID,0,m_color);
CBrush *CBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(CBrush);
dc.SelectObject(&newPen);
switch(DrawType)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
if(m_dragging)
{
m_dragging=false;
ReleaseCapture();
}
break;
}
CView::OnLButtonUp(nFlags, point);
}
CPen newPen;
newPen.CreatePen(PS_SOLID,0,m_color);
CBrush *CBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(CBrush);
dc.SelectObject(&newPen);
逻辑真乱
绘图放在OnLButtonDown里面本身就是一个设计错误。