GDI绘制填充图二

一:填充区域函数

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


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


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值