一:填充区域函数
BOOL FloodFill(int x,int y, COLORREF crColor);
理解:从坐标点(x,y)出开始填充,只要没有遇到crColor颜色,就用画刷填充。直到所以边界都为crColor颜色则停止填充。
实验一(在OnPaint函数中添加代码):
CClientDC dc(this);
CBrush brush1(RGB(0,0,255));
CBrush brush2(RGB(0,255,0));
CBrush brush3(RGB(255,0,0));
CBrush brush4(RGB(0,255,255));
CBrush brush5(HS_CROSS,RGB(255,0,0));
CBrush* pOldBrush=dc.SelectObject(&brush1);
dc.Rectangle(100,100,200,200);
dc.SelectObject(brush2);
dc.Rectangle(250,100,350,200);
dc.SelectObject(brush3);
dc.Rectangle(50,20,450,80);
dc.SelectObject(brush4);
dc.Ellipse(50,220,150,320);
// dc.SelectObject(brush5);
// dc.FloodFill(2,2,RGB(255,0,0));
dc.SelectObject(pOldBrush);
(未填充前的图像)运行结果为:
取消注释行后,(填充之后)运行结果为:
实验二(在OnPaint函数中添加代码):
CClientDC dc(this);
CBrush brush1(RGB(255,0,0));
dc.DrawDragRect(CRect(0,0,400,300),CSize(20,20),NULL,CSize(20,20),&brush1,&brush1);
CBrush brush2(HS_CROSS,RGB(0,0,255));
CBrush* pOldBrush=dc.SelectObject(&brush2);
//dc.FloodFill(200,200,RGB(255,0,0));
dc.SelectObject(pOldBrush);
未填充前的运行结果:
取消注释,填充后的运行结果:
二:BOOL ExtFloodFill(int x,int y,COLORREF crColor,UINT nFillType)
当参数nFillType的值为FLOODFILLBORDER时,填充到颜色为crColor的边界,效果与FloodFill函数相同。
当参数nFillType的值为FLOODFILLSURFACE时,填充所有颜色为crColor的点,直到碰到非crColor颜色的点为止。当然点(x,y)的颜色也必须为crColor。
三:字体创建
实验源码,背景色为黑色,在OnPaint函数中添加代码:
CClientDC dc(this);
LOGFONT lf;
CFont font;
CFont* pOldFont;
for (int i=0;i<5;++i)
{
dc.SetTextColor(RGB(50*i,50*i,250-50*i));
dc.GetCurrentFont()->GetLogFont(&lf);
lf.lfHeight=20+i*10;
lf.lfWidth=lf.lfHeight/2;
lf.lfWeight=500;
lf.lfItalic=i%2;
lf.lfUnderline=(i+1)%2;
lf.lfStrikeOut=i%2;
StrCpyW(lf.lfFaceName,L"隶书");
font.CreateFontIndirectW(&lf);
pOldFont=dc.SelectObject(&font);
dc.SetBkMode(TRANSPARENT);
dc.TextOutW(10,10+lf.lfHeight*(i),L"CFont字体输出!!!!");
font.DeleteObject();
}
dc.SelectObject(pOldFont);
运行结果:
若注释掉dc.SetBkMode(TRANSPARENT);,则运行结果为:
即会用默认的画刷(白色画刷)作为文字的背景色。