zoukankan      html  css  js  c++  java
  • 获取HDC的几种方法

    当需要在显示器上(当然包括打印机等设备上)绘图时,或者写文字的时候,需要取得设备的上下文句柄,即HDC,本文以下都称为HDC。那么,有哪些办法取得HDC呢?

    1 BeginPain()和EndPaint()

    在处理WM_PAINT消息时,使用

    hdc = BeginPaint(hwnd, &ps);
    //...
    EndPaint(hwnd, &ps);

    ps是类型为PAINTSTRUCT类型的变量,其中的rcPaint成员指明了显示的无效区域。该hdc只能在这个无效区域内进行绘图。同时BeginPaint会使无效区域变为有效。


    2 GetDC()和ReleaseDC()

    在WM_PAINT以外可以使用

    hdc = GetDC(hwnd);
    //...
    ReleaseDC(hwnd, hdc);
    GetDC返回的HDC可以在整个显示区域进行绘图,但是不会将无效区域变为有效区域。

    3 GetWindowDC()和ReleaseDC()

    hdc = GetWindowDC(hwnd);
    //...
    ReleaseDC(hwnd, hdc);
    用来取得整个窗口的HDC,包括标题栏,菜单栏,状态栏,滚动条和边框(frame)。

    以上三种方式取得的HDC都是与窗口相关的。当然有时还是需要使用与窗口无关的HDC。

    4 CreateDC()和DeleteDC()

    hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData);
    //...
    DeleteDC(hdc);
    如:

    hdc = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);

    取得整个屏幕的HDC。

    5 CreateIC()

    参数与CreateDC相同,用来创建获取信息的HDC,不能用此HDC进行绘图。

    6 CreateCompatibleDC()

    hdcMem = CreateCompatibleDC(hdc);
    //...
    DeleteDC();
    创建内存DC。

    7 CreateMetaFile()和CloseMetaFile()

    hdcMeta = CreateMetaFile(pszFilename);
    //...
    hmf = CloseMetaFile(hdcMeta);

    注意:所有取得HDC的函数都需要对应的关闭或者结束HDC的函数。

  • 相关阅读:
    Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    reversePairs
    sort
    分割数组的最小值
    decode string
    276. 栅栏涂色
    133. Clone Graph
    Palindromic string
    爬楼梯
    正则匹配
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710152.html
Copyright © 2011-2022 走看看