MFC控件第一讲.DC编程

时间:2022-06-21
本文章向大家介绍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中常见的属性

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

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