标签:库画 椭圆 画刷 int MFC 矩形 pDC rect
1.笔记
1.1绘制椭圆
函数原型:
BOOL CDC::Ellipse(int x1,int y1,int x2,int y2);
BOOL CDC::Ellipse(LPCRECT lpRect);
一个椭圆由一个矩形唯一确定(内切椭圆)。调用成功返回非零,否则返回0。
1.2选入库画刷进行绘图
一些常用的绘图对象的属性,已经在库里预先定义好了,可以直接选入设备上下文调用,不过要借助专用的函数。
1.2.1选入库对象函数
virtual CGdiObject* SelectStockObject(int nIndex);
调用成功返回正在被替代的库对象指针,否则返回NULL。
1.2.2常用的库画刷
库画刷代码 | 宏定义值 | 含义 | 颜色 |
WHITE_BRUSH | 0 | 白色的实心画刷 | RGB(255,255,255) |
LTGRAY_BRUSH | 1 | 浅灰色的实心画刷 | RGB(192,192,192) |
GRAY_BRUSH | 2 | 灰色的实心画刷 | RGB(128,128,128) |
DKGRAY_BRUSH | 3 | 暗灰色实心画刷 | RGB(64,64,64) |
BLACK_BRUSH | 4 | 黑色实心画刷 | RGB(0,0,0) |
HOLLOW_BRUSH | 5 | 空心画刷 | |
NULL_BRUSH | 5 | 透明画刷 |
2.使用练习
2.1将客户区矩形上下左右边界各向中心缩小100个像素,依次绘制矩形内切圆、矩形内切椭圆和矩形。椭圆、圆、矩形的边界线均为1像素宽黑线,图形内部全部用透明画刷填充,在自定义坐标系中实现。
在声明内切圆的外切正方形时,可以看到矩形不再由左上角和右下角确定,这是因为坐标系变换的缘故,其实矩形构造函数该用哪些点,要看x2-x1、y2-y1何时为正。
void CExample1View::OnDraw(CDC* pDC)
{
CExample1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CRect rect;
GetClientRect(rect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(rect.Width(), rect.Height());
pDC->SetViewportExt(rect.Width(), -rect.Height());
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
rect.DeflateRect(100, 100);
int r = rect.Height() / 2;
CRect rect1(CPoint(-r, -r), CPoint(r, r));//内切圆的外切正方形
CBrush* pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);//选入库画刷
pDC->Ellipse(rect1);//绘制内切圆
pDC->Ellipse(rect);//绘制内切椭圆
pDC->Rectangle(rect);
pDC->SelectObject(pOldBrush);
}
标签:库画,椭圆,画刷,int,MFC,矩形,pDC,rect 来源: https://blog.csdn.net/qq_44643644/article/details/119079964
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。