• GDI图形、CHDCCDC


    l         GDI图形接口

    l         绘制图形

    l         DC,HDC设备CDC类

    l         绘制矩形

          

    一、了解GDI与GUI

       GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。

       在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。

     GDI:图形设备接口,包括了绘图的所有元素,例如画笔,画刷,线,点,矩形等所有和绘图有关的东西。这些都被MFC封装在CDC类中,这个类包含了所有的绘图函数。
         GUI:图形用户接口,这个是   windows引进一个概念,指的是用户和计算机有一个操作界面,用户在这个界面上的操作都是可见的,不象DOS下只有输入命令,计算机执行。

      区别:

    GUI是程序人机界面,相对于DOS类的字符界面而言;GDI是编程接口,通常所说的就是指Windows下的图形设备编程接口。

    二、DC,HDC与CDC

    DC设备环境(Device Context的缩写,设备描述表,设备上下文都是说的它)是Windows中的一种数据结构,它包含GDI需要的所有关于显示界面情况的描述字段,包括相连的物理设备和各种各样的状态信息。

    HDC是API里的一个数据类型,是DC的句柄。

    CDC是MFC中对DC相关数据及函数的一个封装的类。

    HDC与CDC的关系 就如同HWND与CWnd的关系;

     

    三、绘制矩形

    1、//API 绘制

    BOOL Rectangle(

      HDC hdc,       // 设备描述表句柄 (指定一个用于绘图的地方)

      int nLeftRect,    / /矩形的左上角X坐标

      int nTopRect,    //矩形的左上角Y坐标

      int nRightRect,   //矩形的右下角X坐标

      int nBottomRect  //矩形的左下角Y坐标

    );

    HDC获取

    HDC GetDC(
      HWND
    hWnd   // handle to a window
    );

    HDC GetWindowDC(
      HWND
    hWnd   // handle of window
    );

     

    2、CDC类绘制

    CDC::Rectangle  //类成员函数

    BOOL Rectangle( int x1, int y1, int x2, int y2 );

    BOOL Rectangle( LPCRECT lpRect );

     

    CDC获取

    CWnd::GetDC

    CDC* GetDC( );   

    CWnd::GetWindowDC

    CDC* GetWindowDC( );

     

    //用完后 记得释放掉 不然多占资源 而且容易出错

    int ReleaseDC(
     

      HWND hWnd,  // 窗口句柄

      HDC hDC     // DC设备句柄
    );

    四、在DC绘制矩形代码测试

    void CDialog_Thread_Priority_test::OnBnClickedButton4()

    {

             // TODO: 在此添加控件通知处理程序代码

             HDC dc=::GetDC(m_hWnd);//获取DC

             //HDC dc=::GetWindowDC(m_hWnd);//包含非客户区(标题栏以及菜单栏工具栏)

             ::Rectangle(dc,1,1,101,21);//绘制一个矩形

             ::ReleaseDC(m_hWnd,dc); //释放掉DC

             //CDC版本

     //   CDC* pdc=GetDC();//CWnd

             //pdc->Rectangle(1,1,101,21);

             //ReleaseDC(pdc);

              

    }

  • 相关阅读:
    最新java学习路线:含阶段性java视频教程完整版
    2019最新WEB前端开发小白必看的学习路线(附学习视频教程)
    区块链技术学习路线(全网最新)
    java学习路线之必会的java基础教程
    新手如何学习python(python学习路线图)
    python学习教程,史上最全面的python学习路线图
    机器学习中的误差 Where does error come from?
    主成分分析 Principle Component Analysis
    线性回归 Linear Regression
    MCtalk对话尚德机构:AI讲师,假套路还是真功夫?
  • 原文地址:https://www.cnblogs.com/15157737693zsp/p/3845202.html
Copyright © 2020-2023  润新知