基本绘图函数:
基类:CDC
派生类:
CClientDC:显示客户区设备上下文
CMetaFileDC:Window图元文件设备上下文类
CPaintDC:该类在WM_PAINT消息下使用,其映射函数为OnPaint(),使用时会覆盖OnDraw函数。
CWindowDC:整个屏幕显示区的设备上下文类
简单数据类型包括:CPoint、CRect、CSize、CString、CTime、CTimeSpan。
绘图工具类:
基类:CGdiObject,不可定义对象
派生类:CBitmap、CBrush、CFont、CPalette、CPen、CRgn。
设备坐标与逻辑坐标:(示例)
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_ANISOTROPIC);//设置映射模式
pDC->SetWindowExt(rect.Width(),rect.Height());//设置窗口
pDC->SetViewportExt(rect.Width(),-rect.Height());//设置视区:x轴水平向右,y轴垂直向上
pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);//客户区中心为坐标系原点
rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);//客户区矩形校正
绘图成员函数:
1. 绘制像素点颜色:
COLORREF SetPixel(int x,int y,COLORREF crColor );
BOOL SetPixelV(int x, int y, COLORREF crColor);
2. 获取像素点颜色:
COLORREF GetPixel(int x,int y)const;
3. 画直线段:
CPoint MoveTo( int x, int y );
BOOL LineTo( int x, int y );
4. 画矩形:
BOOL Rectangle( int x1, int y1, int x2, int y2 ); (直角矩形)
BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 ); (圆角矩形)
void FillRect(LPCRECT lpRect,CBrush *pBrush); (画刷填充)
void FillSolidRect( LPCRECT lpRect, COLORREF clr );
void FillSolidRect( int x, int y, int cx, int cy, COLORREF clr ); (颜色填充)
5. 绘制椭圆:
BOOL Ellipse( int x1, int y1, int x2, int y2 );
6. 绘制椭圆弧:
BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );
int SetArcDirection( int nArcDirection ); (设置圆弧顺逆时针)
AD_COUNTERCLOCKWISE(逆时针)和AD_CLOCKWISE(顺时针);
7. 绘制扇形:
BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );
8. 绘制多边形:
BOOL Polygon(LPPOINT lpPoints,int nCount);
pDC->SetPolyFillMode(WINDING); //设置填充模式
ALTERNATE:交替模式(GDI 填充每条扫描线从多边形的奇数边到偶数边之间的区域)
WINDING:螺旋模式(GDI 填充所有能够一笔完成的多边形)
9. 路径层函数:
⑴打开路径层 BOOL BeginPath(); ⑵关闭路径图层 BOOL EndPath(); ⑶填充路径层 BOOL FillPath()(不显示边界),StrokeAndFillPath()(显示黑色边界);
CPoint p[7]; //定义顶点数组
p[0]=CPoint(-160,20);p[1]=CPoint(-240,100);
p[2]=CPoint(-280,0);p[3]=CPoint(-240,-100);
p[4]=CPoint(-180,-40);p[5]=CPoint(-140,-100);p[6]=CPoint(-60,40);
CBrush NewBrush;
NewBrush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush=pDC->SelectObject(&NewBrush);
pDC->BeginPath();
pDC->MoveTo(p[0]);//绘制左侧多边形
for(int i=0;i<7;i++)
pDC->LineTo(p[i]);
pDC->LineTo(p[0]);
pDC->EndPath();
pDC->FillPath();//FillPath填充路径层
10. 绘制Bezier曲线函数
BOOL PolyBezier(const POINT* lpPoints, int nCount );
11. 位图操作函数
(1)创建位图函数 BOOL CreateCompatibleBitmap( CDC* pDC, int nWidth, int nHeight );
(2)导入位图函数 BOOL LoadBitmap( UINT nIDResource );
(3)创建与指定设备兼容的内存设备上下文函数 virtual BOOL CreateCompatibleDC( CDC* pDC );
(4)传送位图函数 BOOL BitBlt( int x, int y, int nWidth, int Height, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );
示例:
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_ANISOTROPIC);//显示DC自定义坐标系
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);
CDC memDC;//声明一个内存DC
memDC.CreateCompatibleDC(pDC);//创建一个与显示DC兼容的内存DC
CBitmap NewBitmap,*pOldBitmap;
NewBitmap.LoadBitmap(IDB_ABOUT);//从资源中导入位图
BITMAP bmpInfo; //声明bmpInfo结构体
NewBitmap.GetBitmap(&bmpInfo);//获取位图信息
pOldBitmap=memDC.SelectObject(&NewBitmap);//将位图选入内存DC
memDC.SetMapMode(MM_ANISOTROPIC);//内存DC自定义坐标系
memDC.SetWindowExt(bmpInfo.bmWidth,bmpInfo.bmHeight);
memDC.SetViewportExt(bmpInfo.bmWidth,-bmpInfo.bmHeight);
memDC.SetViewportOrg(bmpInfo.bmWidth/2,bmpInfo.bmHeight/2);
int nX=rect.left+(rect.Width()-bmpInfo.bmWidth)/2;//计算位图在客户区的中心点
int nY=rect.top+(rect.Height()-bmpInfo.bmHeight)/2;
pDC->BitBlt(nX,nY,rect.Width(),rect.Height(),&memDC,-bmpInfo.bmWidth/2,-bmpInfo.bmHeight/2,SRCCOPY);//将内存DC中的位图拷贝到设备DC
// pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,-bmpInfo.bmWidth/2,-bmpInfo.bmHeight/2,SRCCOPY);//将内存DC的位图拷贝到设备DC
// pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memDC,-bmpInfo.bmWidth/2,-bmpInfo.bmHeight/2,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);//拉伸位图
memDC.SelectObject(pOldBitmap);//从内存DC中释放位图
12. 图形文本函数:
(1)设置文本颜色函数 virtual COLORREF SetTextColor(COLORREF crColor);
(2)设置文本背景模式函数 int SetBkMode( int nBkMode );OPAQUE文本背景用当前背景颜色填充,这是默认的文本背景模式; TRANSPARENT文本背景透明。
(3)设置文本背景颜色函数 virtual COLORREF SetBkColor(COLORREF crColor);
(4)输出文本函数 BOOL TextOut( int x, int y, const CString& str );
(5)设置文本格式函数 void Format( LPCTSTR lpszFormat, ... );
计算几何随笔(第二章)
最新推荐文章于 2025-02-24 08:00:00 发布