zoukankan      html  css  js  c++  java
  • MFC:绘图基础

    2.2 用GDI绘图

    2.2.1 画直线和曲线

    CPaintDC dc(this);
     
    //画线,(0,0)为屏幕左上角
    dc.MoveTo(0,0);      //起点
    dc.LineTo(0,100);    //终点
     
    //画方框
    POINT aPoint[5]={0,0, 0,100, 100,100, 100,0, 0,0};
    dc.Polyline(aPoint,5);
     
     
    dc.MoveTo(0,0);
    POINT aPoint[4]={0,100, 100,100, 100,0, 0,0};
    dc.PolylineTo(aPoint,4);
     
    //画弧形
    CRect rect(0,0,200,100);
    CPoint point1(0,100);
    CPoint point2(200,100);
    dc.Arc(rect,point1,point2);
     
    //画贝塞尔曲线
    POINT aPoint1[4]={120,100, 120,200, 250,150, 500,40};
    dc.PolyBezier(aPoint1,4);
     
    

    2.2.2 画椭圆/多边形/其他形状

    //画椭圆
    dc.Ellipse(0,0,100,100);
     
    CRect rect(0,0,100,100);
    dc.Ellipse(rect);
     
    //画矩形
    dc.Rectangle(0,0,800,400);
    

    2.2.3 GDI画笔和CPen类

    默认画笔是一个像素点宽的黑色实线,如果需要创建一个GDI画笔,就必须CDC::SelectObject()将它选入设备描述表

    CPen pen(PS_SOLID,1,RGB(255,0,0));
     
    //画笔样式:PS_SOLID PS_DASH PS_DOT PS_DASHDOT PS_DASHDOTDOT PS_NULL PS_INSIDEFRAME
    CPen pen;
    pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
     
    //RGB主要颜色
    黑色(0,0,0) 白色(255,255,255)  红色(192,0,0) 黄色(192,192,0) 绿色(0,192,0)  青色(0,192,192)
    蓝色(0,0,192)
    

    2.2.4 GDI画刷和CBrush类

    默认下画出的封闭图形填充着是白色像素点,通过创建GDI画刷并将它选入设备描述表,就可以改变图形的填充颜色

    CBrush brush(RGB(255,0,0));
     
    CBrush brush;
    brush.CreateSolidBrush(RGB(255,0,0));
     
    //画刷样式:HS_BDIAGONAL HS_FDIAGONAL HS_CROSS HS_HORIZONTAL HS_DIAGCROSS HS_VERTICAL
    CBrush brush(HS_DIAGCROSS,RGB(255,255,255));
    

    2.2.5 画文本

    //画文本在屏幕中央
    CRect rect;
    GetClientRect(&rect);
     
    dc.DrawText(_T("Hello,MFC"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
    dc.TextOut(0,0,CString(_T("Hello MFC")));
     
    //改变文本属性
    dc.SetTextAlign(TA_RIGHT);
    dc.SetTextColor()/dc.SetBkColor()
    

    2.2.6 GDI字体和CFont类

    CFont font;
    font.CreatePointFont(120,_T("Times New Roman"));
     
    CPaintDC dc(this);
    dc.SelectObject(&font);
    

    2.2.7 光栅字体与TrueType字体

    TrueType字体能够任意缩放尺寸:Times New Roman/Arial/Courier New/Symbol

    2.2.8 旋转字体

    2.2.9 备用对象

    windows内部有一些现成备用的对象(如画笔/画刷/字体等),这样就不用我们自己创建了

    2.2.10 删除GDI对象

    与CGdiObject相关联的GDI对象可以通过调用CGdiObject::DeleteObject显式删除

    //源.cpp
     
    //第一行添加
    #ifdef _DEBUG
     
    #define new DEBUG_NEW
     
    #undef THIS_FILE
     
    static char THIS_FILE[] = __FILE__;
     
    #endif
     
     
    //在函数结尾添加
    _CrtDumpMemoryLeaks();
     
    //检查VS调试信息,里面会有文件第几行有内存泄漏
    

    2.2.11 取消对GDI对象的选定

    在我们要删除GDI对象的时候,最好把该GDI对象从DC环境里面选出,以免发生崩溃,最好的办法就是用备用对象来替换我们需要删除的对象

    //用备用对象来替换目标对象
    CPen pen(PS_SOLID,1,RGB(255,0,0));
    dc.SelectObject(&pen);
    CBrush brush(RGB(0,0,255));
    dc.SelectObject(&brush);
    ...
    dc.SelectStockObject(BLACK_PEN);
    dc.SelectStockObject(WHITE_BRUSH);
     
    delete pen;
    delete brush;
    
  • 相关阅读:
    随笔1
    随笔
    shared_ptr<> reset
    c++模板库(简介)
    rockmongo用法
    随笔
    TEXT宏,TCHAR类型
    sprintf
    基于SOA的银行系统架构
    大纲6 信息化规划与管理
  • 原文地址:https://www.cnblogs.com/k5bg/p/11130409.html
Copyright © 2011-2022 走看看