一: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);
CBrush brush(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消息处理,使对话框背景色为黑色:
然后在OnPaint函数中添加代码: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; }
运行结果:CPaintDC dc(this); CBrush brush1(RGB(255, 0, 0)); CBrush brush2(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)); CBrush brush2(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函数时,要进行背景色的设置。因为它会进行颜色融合,而不是单纯的颜色覆盖。