GDI绘制填充图一

来源:互联网 发布:淘宝摩托车专卖店 编辑:程序博客网 时间:2024/05/20 23:07

一:void FillRect(LPCRECT lpRect, CBrush* pBrush);用画刷来填充矩形区域

二:void FillSolidRect(LPCRECT lpRect, COLORREF clr);用颜色来填充矩形区域

void FillSolidRect(int x, int y, int cx, int cy, COLORREF clr);

演示代码,在OnPaint函数中添加:

CPaintDC dc(this);CBrush brush1(HS_HORIZONTAL, RGB(255, 0, 0));dc.FillRect(CRect(20, 30, 150, 150), &brush1);CBitmap bmp;bmp.LoadBitmapW(IDB_BITMAP1);CBrush brush2;brush2.CreatePatternBrush(&bmp);dc.FillRect(CRect(180, 30, 310, 150), &brush2);dc.FillSolidRect(CRect(320,30,450,150),RGB(0,255,0));
运行结果:


注意位图加载使用方法。

三:画扇形函数Pie

BOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);

BOOL Pie(LPCRECT lpRect, POINT ptStart, POINT ptEnd);

理解:扇形的绘制过程和圆弧的绘制一样的,只是增加了从圆心到弧起点和终点的两条线段。

演示代码(在OnPaint函数中):

CClientDC dc(this);CBrushbrush(HS_HORIZONTAL,RGB(255,0,0));CBrush* oldBrush=dc.SelectObject(&brush);dc.Pie(CRect(100,100,200,180),CPoint(200,160),CPoint(180,180));dc.SelectObject(oldBrush);
运行结果:


四:DrawDragRect函数理解

void DrawDragRect(LPCRECT lpRect,SIZE size,LPCRECT lpRectLast,SIZE sizeLast,
CBrush* pBrush = NULL, CBrush* pBrushLast = NULL);
理解:lpRect确定一个矩形,size确定这个矩形的边框宽高,边框使用画刷pBrush填充。同理,lpRectLast也确定一个矩形,sizeLast确定这个矩形的边框粗细,pBrushLast填充边框。所以DrawDragRect函数的作用就是画两个矩形。
注意:若矩形中颜色有重叠的话,则颜色会融合,产生新的颜色,而不是单纯的颜色覆盖。
实验1:为了使结果明显,增加WM_CTLCOLOR消息处理,使对话框背景色为黑色:
HBRUSH CaaDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){//HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);HBRUSH brush = CreateSolidBrush(RGB(0,0,0));return brush;}
然后在OnPaint函数中添加代码:
CPaintDC dc(this);CBrush brush1(RGB(255, 0, 0));CBrushbrush2(RGB(0, 0, 255));dc.DrawDragRect(CRect(0,0,200,200),CSize(20,20),CRect(100,100,400,400),\CSize(10,10),&brush1,&brush2);
运行结果:
若不将背景设为黑色,执行效果为:
可以看到矩形边框颜色和背景色融合了,改变了边框想要的花刷颜色。
实验2:将背景色设置为黑色,在OnPaint中添加:
CPaintDC dc(this);CBrush brush1(RGB(255, 0, 0));CBrushbrush2(RGB(0, 255, 255));dc.DrawDragRect(CRect(100, 100, 400, 400), CSize(40, 40), CRect(100, 100, 400, 400), \CSize(40,40),&brush1,&brush2);
运行结果:
理解:背景色为黑色即:RGB(0,0,0)
     矩形一边框色为:RGB(255, 0, 0)     
     矩形一边框色为:RGB(0, 255, 255) 
猜测:矩形颜色相叠加再减轻背景色即为最终颜色。
矩形颜色相加即为:RGB(255,255,255),为白色,减轻背景色RGB(0,0,0)仍为白色。
若不去除背景色,实验结果为:
理解:背景色为白色即:RGB(255,255,255)
     矩形一边框色为:RGB(255, 0, 0)     
     矩形一边框色为:RGB(0, 255, 255) 
矩形颜色相加即为:RGB(255,255,255),减去背景色RGB(255,255,255),最终为RGB(0,0,0),即为黑色
忠告:使用DrawDragRect函数时,要进行背景色的设置。因为它会进行颜色融合,而不是单纯的颜色覆盖。

0 0
原创粉丝点击