MFC画图程序调用CColorDialog,颜色还是改不了。。

hjm5098720 2012-06-17 05:37:20
我是在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);
} 求大神请教啊,感激不尽。。。。。。。
...全文
293 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjm5098720 2012-07-03
  • 打赏
  • 举报
回复
我知道问题在哪了,是我自己画图模式跳错了
开水 2012-07-01
  • 打赏
  • 举报
回复
看起来从对话框获取的颜色值是没有错的。你是不是在别的地方有代码修改了m_Clr的值?如果不确定问题是不是出在
if(dlg.DoModal()==IDOK)
{
m_Clr=dlg.GetColor();
}
建议你在这里TRACE1("颜色值 = %d", m_Clr);
调试看下调试窗口每次是不是输出不同的值,如果这里做不同的选择输出不同的值,问题肯定出在别的地方。
Y_panda 2012-06-19
  • 打赏
  • 举报
回复
自定义一个菜单按钮,在它的消息响应函数中添加如下代码:
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);
hjm5098720 2012-06-17
  • 打赏
  • 举报
回复
m_Clr = dlg.GetColor();
InvalidateRect(NULL); //刷新
试过了,还是没用唉。。
还有你说绘制的部分是哪些啊,是switch吗?放到WM_PAINT中还有没有橡皮筋那种效果啊?
zgl7903 2012-06-17
  • 打赏
  • 举报
回复
m_Clr = dlg.GetColor();
InvalidateRect(NULL); //刷新

另外最好 在OnMouseMove中修改坐标,把绘制部分放到WM_PAINT响应中

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧