我是在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);
}           求大神请教啊,感激不尽。

解决方案 »

  1.   

    m_Clr = dlg.GetColor();
    InvalidateRect(NULL); //刷新另外最好 在OnMouseMove中修改坐标,把绘制部分放到WM_PAINT响应中
      

  2.   

    m_Clr = dlg.GetColor();
    InvalidateRect(NULL); //刷新
    试过了,还是没用唉。。
    还有你说绘制的部分是哪些啊,是switch吗?放到WM_PAINT中还有没有橡皮筋那种效果啊?
      

  3.   

    自定义一个菜单按钮,在它的消息响应函数中添加如下代码:
    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);
      

  4.   

    看起来从对话框获取的颜色值是没有错的。你是不是在别的地方有代码修改了m_Clr的值?如果不确定问题是不是出在 
    if(dlg.DoModal()==IDOK)
    {
      m_Clr=dlg.GetColor();

    建议你在这里TRACE1("颜色值 = %d", m_Clr);
    调试看下调试窗口每次是不是输出不同的值,如果这里做不同的选择输出不同的值,问题肯定出在别的地方。