1.笔记
1.1绘制矩形
1.1.1函数原型:
BOOL CDC::Rectangle(int x1,int y1,int x2,int y2);
BOOL CDC::Rectangle(LPCRECT lpRect);
调用成功返回非零,否则返回零。
绘制的矩形不包括右边界和下边界,宽度为x2-x1,高度为y2-y1。矩形由左上角和右下角唯一确定。
1.1.2默认设置
绘制矩形包括绘制矩形边框和填充矩形内部,绘制边框使用画笔CPen,填充内部使用画刷CBrush。默认情况下画笔的属性为实线、1像素宽、黑色,画刷的属性为白色实体画刷。
1.2创建画刷
有三种画刷。
1.2.1实体画刷
函数原型:
BOOL CBrush::CreateSolidBrush(COLORREF crColor);
将整个封闭空间填充为指定颜色。调用成功返回非零,否则返回零。
1.2.2阴影画刷
函数原型:
BOOL CBrush::CreathHatchBrush(int nIndex,COLORREF crColor);
调用成功返回非零,否则返回零。
1.2.3图案画刷
函数原型:
BOOL CBrush::CreatePatternBrush(CBitmap* pBitmap);
调用成功返回非零,否则返回零。
1.3选入设备上下文
函数原型:
CBrush* CDC::SelectObject(CBrush* pBrush);
调用成功则返回正在被替换对象的指针,否则返回NULL。
2.使用练习
2.1将客户区矩形左右边界各收缩100个像素,上下边界各收缩50个像素,得到一个新矩形,使用3像素宽的绿实线绘制边界线,使用蓝色填充矩形内部。
题意即将矩形向中心缩小,MFC已经封装好了矩形向中心收缩的函数,矩形向中心收缩无所谓坐标系,可按个人意愿选择是否自建坐标系。
2.1.1矩形向中心收缩函数
函数原型:
void CRect::DeflateRect(int x,int y);
x代表左右边框向内缩小的宽度,y代表上下边框向内缩小的高度。
2.1.2编程实现
void CExample1View::OnDraw(CDC* pDC)
{
CExample1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CRect rect;
GetClientRect(rect);
rect.DeflateRect(100, 50);//矩形向中心收缩
CPen NewPen, * pOldPen;
NewPen.CreatePen(PS_SOLID, 3, RGB(0, 255, 0));
pOldPen = pDC->SelectObject(&NewPen);
CBrush NewBrush, * pOldBrush;
NewBrush.CreateSolidBrush(0xFF0000);//创建画刷
pOldBrush = pDC->SelectObject(&NewBrush);//选择画刷,保存原来画刷
pDC->Rectangle(rect);
pDC->SelectObject(pOldPen);//恢复设备上下文
pDC->SelectObject(pOldBrush);
}