我是在MouseMove函数里画图的然后在CView类添加了一个公有的COLORREF类型的变量m_Clr来存储画图时画笔的颜色,然后我通过CColorDialog调用调色板,然后添加如下代码CColorDialog dlg;
dlg.m_cc.Flags|=CC_RGBINIT;
dlg.m_cc.rgbResult=m_Clr;
if(IDOK==dlg.DoModal())
{
m_Clr=dlg.m_cc.rgbResult;
} 运行后颜色还是不变化,然后我重新写了这个代码换成CColorDialog dlg;
if(dlg.DoModal()==IDOK)
{
m_Clr=dlg.GetColor();
} 结果还是没用不知道我哪里错了,大神们帮帮忙啊。。
下面附上画图的代码void CTest2View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPen *pOldPen,NewPen;
if((m_ptEnd!=point)&&(nFlags))
{
CClientDC dc(this);
dc.SetBkMode(TRANSPARENT);
NewPen.CreatePen(PS_SOLID,m_Width,m_Clr);
pOldPen=dc.SelectObject(&NewPen);
switch(m_nDrawType)
{
case 0:
if(m_bDragging)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
m_ptOrigin=point;
}
case 1:
dc.SetROP2(R2_NOT);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
m_ptEnd=point;
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);break;
case 2:
dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_ptOrigin);
dc.Ellipse(CRect(m_ptOrigin,m_ptEnd));
m_ptEnd=point;
dc.MoveTo(m_ptOrigin);
dc.Ellipse(CRect(m_ptOrigin,point));
break; case 3:
dc.SetROP2(R2_NOT);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOrigin.x,m_ptEnd.y);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd.x,m_ptOrigin.y);
dc.MoveTo(m_ptOrigin.x,m_ptEnd.y);
dc.LineTo(m_ptEnd);
dc.MoveTo(m_ptEnd.x,m_ptOrigin.y);
dc.LineTo(m_ptEnd);
m_ptEnd=point;
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOrigin.x,point.y);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point.x,m_ptOrigin.y);
dc.MoveTo(m_ptOrigin.x,point.y);
dc.LineTo(point);
dc.MoveTo(point.x,m_ptOrigin.y);
dc.LineTo(point);break; default:
break;
}
dc.SelectObject(pOldPen);
NewPen.DeleteObject();
ReleaseDC(&dc);
}
CView::OnMouseMove(nFlags, point);
} 求大神请教啊,感激不尽。
dlg.m_cc.Flags|=CC_RGBINIT;
dlg.m_cc.rgbResult=m_Clr;
if(IDOK==dlg.DoModal())
{
m_Clr=dlg.m_cc.rgbResult;
} 运行后颜色还是不变化,然后我重新写了这个代码换成CColorDialog dlg;
if(dlg.DoModal()==IDOK)
{
m_Clr=dlg.GetColor();
} 结果还是没用不知道我哪里错了,大神们帮帮忙啊。。
下面附上画图的代码void CTest2View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPen *pOldPen,NewPen;
if((m_ptEnd!=point)&&(nFlags))
{
CClientDC dc(this);
dc.SetBkMode(TRANSPARENT);
NewPen.CreatePen(PS_SOLID,m_Width,m_Clr);
pOldPen=dc.SelectObject(&NewPen);
switch(m_nDrawType)
{
case 0:
if(m_bDragging)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
m_ptOrigin=point;
}
case 1:
dc.SetROP2(R2_NOT);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
m_ptEnd=point;
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);break;
case 2:
dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_ptOrigin);
dc.Ellipse(CRect(m_ptOrigin,m_ptEnd));
m_ptEnd=point;
dc.MoveTo(m_ptOrigin);
dc.Ellipse(CRect(m_ptOrigin,point));
break; case 3:
dc.SetROP2(R2_NOT);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOrigin.x,m_ptEnd.y);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd.x,m_ptOrigin.y);
dc.MoveTo(m_ptOrigin.x,m_ptEnd.y);
dc.LineTo(m_ptEnd);
dc.MoveTo(m_ptEnd.x,m_ptOrigin.y);
dc.LineTo(m_ptEnd);
m_ptEnd=point;
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOrigin.x,point.y);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point.x,m_ptOrigin.y);
dc.MoveTo(m_ptOrigin.x,point.y);
dc.LineTo(point);
dc.MoveTo(point.x,m_ptOrigin.y);
dc.LineTo(point);break; default:
break;
}
dc.SelectObject(pOldPen);
NewPen.DeleteObject();
ReleaseDC(&dc);
}
CView::OnMouseMove(nFlags, point);
} 求大神请教啊,感激不尽。
InvalidateRect(NULL); //刷新另外最好 在OnMouseMove中修改坐标,把绘制部分放到WM_PAINT响应中
InvalidateRect(NULL); //刷新
试过了,还是没用唉。。
还有你说绘制的部分是哪些啊,是switch吗?放到WM_PAINT中还有没有橡皮筋那种效果啊?
void CGraphicView::OnColor()
{
// TODO: Add your command handler code here
CColorDialog dlg;
dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN;
dlg.m_cc.rgbResult=m_clr;
if(IDOK==dlg.DoModal())
{
m_clr=dlg.m_cc.rgbResult;
}
}
然后在MouseMove函数选择颜色画笔(m_clr即为颜色)
CClientDC dc(this);
CPen pen(m_nLineStyle,m_nLineWidth,m_clr);
dc.SelectObject(&pen);
if(dlg.DoModal()==IDOK)
{
m_Clr=dlg.GetColor();
}
建议你在这里TRACE1("颜色值 = %d", m_Clr);
调试看下调试窗口每次是不是输出不同的值,如果这里做不同的选择输出不同的值,问题肯定出在别的地方。