• Windows编程学习笔记(三)


    本章主要学习了最基本的windows GDI的使用,和很多GDI的基础必要的知识,更多高级的知识本章是没有讲述的,仅仅有绘直线.、曲线等内容,不过这些东西是高级GDI的基础。

    第三章 图形基础(上)

    /***************************************************************************/

    图形设备接口(GDI,Graphics Device Interface)

    图形的输出设备分为两大类:位映像设备和向量设备,大多数PC的输出设备是位映像设备,这意味着他们以图点构成的数组来表示图像,向量设备使用线来绘制图像,通常局限于绘图机。

    GID函数的呼叫:

    1.    取得和释放设备内容的函数 比如说BeginPaint EndPaint GetDC, ReleaseDC

    2.    取得有关设备内容信息的函数 比如 GetTextMetrics来取得设备内容中目前所选字体的尺寸信息。

    3.    绘图函数   比如TextOut   Polyline

    4.    设定和取得设备内容参数的函数 比如SetTextColor

    5.    使用GDI对象的函数 也就是说这个设备是用什么样的工具来工作,比如绘直线,就会使用的画笔对象,如何定义和创建画笔对象是很重要的。

    GDI基本图形

    1.    直线和曲线

    2.    填入区域 使用当前的画刷对象进行填涂,画刷可以是位图对象。

    3.    位图 是位的矩形数组。

    4.    文字

    /*******************************************************************、

    关于色彩

    一个RGB色彩可以这样表示:#define RGB(r,g,b) ((COLORREF)(((BYTE)(r) | \

           

                       ((WORD)((BYTE)(g)) << 8)) | \

           

                       (((DWORD)(BYTE)(b)) << 16)))

    保存设备内容

    当我们的程序执行ReleaseDC,EndPaint时,对设备属性所做的改变都会被释放掉,那么如何保存我们的设备属性,而不是每次Paint都要重新设定呢?

    1.    可在登陆窗口类别时,将CS_OWNDC旗标纳入窗口类别的一部分:

    wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC ;

    注意,CS_OWNDC只影响GetDC BeginPaint获得的设备内容,不影响其他函数GetWindowsDC获得的设备内容。

    2.    某些情况下,我们可能改变了设备内容属性,让后在恢复,那么我们可以用idSaved = SaveDC(hdc)来保存设备属性,然后用RestoreDC(hdc,idSaved)来回复设备内容属性。

    /*****************************************************************************/

    画点和线

    如果想对一个像素进行着色,可以用SetPixel(hdc,x,y,crColor); 而GetPixel(hdc,x,y)用于获得指定点处的像素的颜色。

    画一条直线,需要用到两个函数:

    MoveToEx(hdc,xBegin,yBegin,null);

    LineTo(hdc,xEnd,yEnd);

    记住:每次画完一条直线,起始点就会默认为上一条直线的终点,也就是(xEnd,yEnd),因此如果画连续的直线,就可以不用每次都调用MoveToEx了,相反,如果画几条不相连的直线,就需要一起调用。

    如果需要把指定的几组点连接起来,有两种方法,那么就可以这样用:

    1.    POINT apt[5] = {1,1,2,2,3,3,4,4,5,5};

    Polyline(hdc,apt,sizeof(apt)/sizeof(apt[0]));

    2.    MoveToEx(hdc,apt[0].x, apt[0].y, NULL);

    PolylineTo(hdc,apt+1,sizeof(apt)/sizeof(apt[0])-1);

    灵活运用这两个函数,就可以画出圆滑的曲线,比如说正选曲线。

    /****************************************************************/

    边界框函数

    这类函数有Rectangle Ellipse RoundRect Chord Pie, 这些函数在画线的同时,还向这些边界框内填入当前的画刷。

    Rectangle(hdc,xLeft,yTop,xRigth,yBottom);

    Ellipse(hdc,xLeft,yTop,xRight,yBottom);

    RoundRect(hdc,xLeft,yTop,xRight,yBotom,xCornerEllipse,yCornerEllipse);

         这个函数的后两个参数是决定矩形的角的圆滑度,很容易理解。

    Arc(hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,xEnd,yEnd);

    Chord(hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,xEnd,yEnd);

    Pie(hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,xEnd,yEnd);

    /**********************************************************************/

    Bezier曲线

    这个曲线很著名,这学期学数值逼近的时候多次碰到他,或许是太偏向工科的缘故,一直没有好感,但是现在我发现我错了,条曲线在生活中的应用远远超过的我的想象,

    使用PolyBezier(hdc,apt,iCount)来绘制Bezier曲线,最简单的情况是只有四个点,第一个与最后一个是控制点,中间两个是起始点和终止点,apt是POINT类型的数组,画完后效果截图如下:

  • 相关阅读:
    node.js的request模块
    PHP实现一个简单url路由功能
    关于seajs
    CodeIgniter集成Smarty
    node.js批量修改图片名
    Node.js创建目录实例
    Bootstrap的表单设计器
    onbeforeunload事件被a链接触发的问题
    Socket.IO + Express实现的跨浏览器、子域的聊天室
    NodeJS获取命令行后面的参数
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662801.html
Copyright © 2020-2023  润新知