7 颜色填充功能
油漆桶功能主要应用了FloodFill函数,该函数的功能是用当前刷从点(x, y)开始向四周填充到颜色为crColor的边界。其中形参m_PointBegin.x和m_PointBegin.y记录了鼠标单击时的位置,m_PenColor记录了之前绘制图形所用的铅笔颜色,这样FloodFill函数就会从鼠标单击时的位置开始如同漫水一样漫向四周,直到之前的铅笔颜色为止。这样就实现了颜色填充功能。
具体实现代码如下:
在OnLButtonUp() 中添加如下代码:
case DrawType::Fill:
{
CClientDC dc(this);
CBrush newBrush(m_BrushColor);
oldBrush = dc.SelectObject(&newBrush);
dc.SelectObject(newBrush);
dc.FloodFill(m_PointBegin.x, m_PointBegin.y, m_PenColor);
dc.SelectObject(oldBrush);
}
实现效果:
8 选择画笔颜色
在设置画笔颜色的时候我们首先要定义一个CColorDialog对象,这是一个对话框,包含系统定义的颜色的列表,如图所示。当dlg.DoModal()==IDOK时,也就是说对话框弹出来了,并且你点击了对话框上的OK按钮,然后就执行m_PenColor=dlg.GetColor(),将画笔的颜色设置为你选择的颜色。
具体实现如下:
void CMFC_PAINTView::OnMenucolor()
{
CColorDialog dlg;
if (IDOK == dlg.DoModal()) //弹出对话框
{
m_PenColor = dlg.GetColor();//得到颜色
}
}
//在OnMouseMove()中和OnLButtonUp()中都需要添加以下代码:
CPen newPen, *oldPen;
newPen.CreatePen(PS_SOLID, m_PenSize, m_PenColor);
oldPen = dc.SelectObject(&newPen);
//因为是局部变量,所以可以同名。
//在函数最后加dc.SelectObject(oldPen);
效果如下: