GDI绘制填充图二

来源:互联网 发布:java分布式缓存技术 编辑:程序博客网 时间:2024/06/02 05:30

一:填充区域函数

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);,则运行结果为:


即会用默认的画刷(白色画刷)作为文字的背景色。


0 0
原创粉丝点击