• MFC控件第一讲.DC编程


                MFC控件第一讲.DC编程

    一丶简介

      什么是DC,DC有什么用.

      DC成为设备描述符表. DC的作用就是可以进行绘制. 比如我们的窗口都是绘制出来的.  DC可以简单理解为.没一个窗口程序都有一块内存用于绘制.我们只需要获取这块内存即可.

    MFC 中 的CDC类 就是封装了HDC 跟GDI函数. 并且派生出了四个不同场景下的类.

    注意HDC 则是windows中真正的DC. 配合GDI函数进行操作绘制的. MFC只不过封装了一下.

    派生出来的类常用的有三个.

    1.CPaintDc 用户在窗口的客户区画图. 仅限与OnPaint处理程序.   OnPaint 就是一个消息处理函数.

    2.CClieentDC 用户在窗口客户区画图.除了 OnPaint外的任何处理程序.   除了消息处理函数都可以进行操作

    3.CWindowsDc 用于在窗口内任意地方画图.包括非客户区.                  任何一个地方都可以编写代码操作.

    二丶CPaintDc用法

    比如我们的MFC框架中已经给我们写好了这个处理函数.

    代码如下.

    void CCDCDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // 用于绘制的设备上下文
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // 使图标在工作区矩形中居中
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // 绘制图标
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }

    我们也可以自己写一个.比如使用Win32的知识画一段字.

        HDC hdc = ::GetDC(m_hWnd);              //用于绘制的DC
        PAINTSTRUCT ps;       //保存DC的信息结构体
        ::BeginPaint(m_hWnd, &ps);
    
        ::DrawText(hdc, TEXT("Hello"), wcslen(TEXT("Hello")), CRect(200, 200, 200, 200), DT_SINGLELINE);//单行显示
    
        ::EndPaint(m_hWnd, &ps);

    如果是MFC下.则用CpaIntDc 传入this即可.

    三丶CClientDc用法

     CClientDc则是可以不用再OnPaint中使用.我们可以按钮点击就使用了.

    void CCDCDlg::OnBnClickedButton1()
    {
        CClientDC dc(this);
        dc.Ellipse(0, 0, 100, 100); 画个圆
    }

    上方代码则是我们在客户区画个圆. 在我们点击之后.

    我们的CWindowsDc是一样的.只不过比CClientDc用的更广一点.

    关于GDI函数.我们可以下一个MFC类库详解. 有中文版的.或者你查询MSDN都可以.输入你想用的DC类.则会出现对应函数.

    四丶DC中常见的属性

    常见的属性可以用下图表示.并且有对应的方法

    我们可以通过这些方法设置跟获取.

  • 相关阅读:
    Elementui:选择框
    Cesium之Cesium3DTileStyle
    Cesium粒子系统:雨雪云效果
    Cesium之3dtiles模型选择问题
    3dtiles贴地
    Android ListView异步加载图片
    Android的硬件加速
    Android ANR
    每天一点Linux 查看Ubuntu的版本号
    Android log system
  • 原文地址:https://www.cnblogs.com/iBinary/p/9651204.html
Copyright © 2020-2023  润新知