绘制直线,画笔和画刷操作,绘制矩形,绘制扇形
2012-04-25 16:59
267 查看
看了资料,做了点总结,下面详细介绍绘制直线,画笔和画刷操作,绘制矩形,绘制扇形等操作:
需要定义的变量
private:
CPoint m_ptOld;
BOOL m_Draw;
CPoint m_ptOrigin;
\\初始化
CTest1View::CTest1View()
{
m_ptOrigin=m_ptOld=0;
m_Draw=FALSE;
// TODO: add construction code here
}
绘制直线
第一种方法:利用API函数
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
第二种方法:利用CDC
CDC *pDc = GetDC();
pDc->MoveTo(m_ptOrigin);
pDc->LineTo(point);
ReleaseDC(pDc);
第三种方法:利用cclientDc(可以不用调用ReleaseDC,因为会自动调用)
\\CClientDC dc(GetParent());
\\可以获得父窗口的hdc
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
第三种方法:利用CWindowDC
\\CWindowDC dc(GetParent());\\能在非客户区域作图
\\CWindowDC dc(GetDesktopWindow());\\能在整个区域作图
CWindowDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
设置画笔
CPen pen(PS_SOLID,1,RGB(255,0,0));
CClientDC dc(this);
CPen *pOldPen = dc.SelectObject(&pen);\\进行转化
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);\\转化回来
设置画刷
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
设置位图画刷
打开Insert->resource->选择bitmap->新建位图
CBitmap bitMap;
bitMap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitMap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
绘制矩形(所画矩形将会被填充)
CClientDC dc(this);
dc.Rectangle(CRect(m_ptOrigin,point));
绘制透明矩形
CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(pOldBrush);
绘制连续的图案
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_Draw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point;
}
dc.SelectObject(pOldPen);
绘制无边界的扇形
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_Draw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOld);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOld=point;
}
dc.SelectObject(pOldPen);
绘制有边界的扇形
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_Draw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOld);
//dc.MoveTo(m_ptOrigin);
dc.MoveTo(m_ptOld);
dc.LineTo(point);
m_ptOld=point;
}
dc.SelectObject(pOldPen);
扩展:
\\dc.SetROP2(R2_MERGENOTPEN);设置绘画模式
需要定义的变量
private:
CPoint m_ptOld;
BOOL m_Draw;
CPoint m_ptOrigin;
\\初始化
CTest1View::CTest1View()
{
m_ptOrigin=m_ptOld=0;
m_Draw=FALSE;
// TODO: add construction code here
}
绘制直线
第一种方法:利用API函数
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
第二种方法:利用CDC
CDC *pDc = GetDC();
pDc->MoveTo(m_ptOrigin);
pDc->LineTo(point);
ReleaseDC(pDc);
第三种方法:利用cclientDc(可以不用调用ReleaseDC,因为会自动调用)
\\CClientDC dc(GetParent());
\\可以获得父窗口的hdc
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
第三种方法:利用CWindowDC
\\CWindowDC dc(GetParent());\\能在非客户区域作图
\\CWindowDC dc(GetDesktopWindow());\\能在整个区域作图
CWindowDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
设置画笔
CPen pen(PS_SOLID,1,RGB(255,0,0));
CClientDC dc(this);
CPen *pOldPen = dc.SelectObject(&pen);\\进行转化
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);\\转化回来
设置画刷
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
设置位图画刷
打开Insert->resource->选择bitmap->新建位图
CBitmap bitMap;
bitMap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitMap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
绘制矩形(所画矩形将会被填充)
CClientDC dc(this);
dc.Rectangle(CRect(m_ptOrigin,point));
绘制透明矩形
CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(pOldBrush);
绘制连续的图案
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_Draw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point;
}
dc.SelectObject(pOldPen);
绘制无边界的扇形
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_Draw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOld);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOld=point;
}
dc.SelectObject(pOldPen);
绘制有边界的扇形
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_Draw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOld);
//dc.MoveTo(m_ptOrigin);
dc.MoveTo(m_ptOld);
dc.LineTo(point);
m_ptOld=point;
}
dc.SelectObject(pOldPen);
扩展:
\\dc.SetROP2(R2_MERGENOTPEN);设置绘画模式
相关文章推荐
- iOS开发UI篇—Quartz2D简单图形绘制(二)直线,三角形,矩形,扇形,弧,圆
- IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
- Quartz 2d 用CGContextRef 绘制各种图形 (文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角形、贝塞尔曲线、图片)
- 用 GDI 操作 EMF 文件[8]: 绘制图元文件时改变画笔与画刷
- IOS开发—IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
- IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
- IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
- IOS绘制圆,直线,弧线,矩形,扇形,三角形,贝塞尔等图形
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- Silverlight实现对图片的涂鸦、绘制矩形、圆形、直线、文本,并且能够移动
- Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- Java绘图: 使用Graphics类绘制线段、矩形、椭圆/圆弧/扇形、图片、文本
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)