计算几何随笔(第二章)

基本绘图函数:
基类: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, ... );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值