原创 获取设备描述表几种方法

2009-10-13 09:03 3147 3 3 分类: 工程师职场
1.在处理WM_PAINT消息时,使用BeginPaint()和EndPaint()调用:
    hdc = BeginPaint(hwnd, &ps);
    ……
    ……      
    EndPaint(hwnd, &ps);
变量ps是型态为PAINTSTRUCT的结构(见MSDN),该结构的hdc字段是BeginPaint传回的设备内容句柄。  PAINTSTRUCT结构又包含一个名为rcPaint的RECT(矩形)结构,rcPaint定义一个包围窗口显示区域无效范围的矩形。使用从 BeginPaint获得的设备描述表句柄,只能在这个区域内绘图。BeginPaint调用使该区域有效。

    注意:若要响应WM_PAINT消息,则无论如何都要使BeginPaint和EndPaint被执行,否则程序会出问题(CPU占用近100%)。因为,如果不调用BeginPaint函数,WM_PAINT消息不会从消息队列中移出,问题可想而知了。

2.在处理非WM_PAINT消息时取得设备描述表句柄:
    hdc = GetDC(hwnd);
    ……
    ……      
    ReleaseDC(hwnd, hdc);
这个设备描述表适用于窗口句柄为hwnd的客户区。这些调用与BeginPaint和EndPaint组合之间的基本区别是,利用从GetDC传回的句柄可以在整个客户区上绘图。
    注意:GetDC和ReleaseDC不会使客户区中任何可能的无效区域变成有效。

3. 取得适用于整个窗口(而不仅限于窗口的客户区)的设备内容句柄:
    hdc = GetWindowDC(hwnd);      
    ……
    GetWindowRect(hwnd, &rect);
    ……      
    ReleaseDC(hwnd, hdc);

4. 取得设备描述表句柄的更常用的函数是CreateDC:
    hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData);      
    ……
    ……      
    DeleteDC(hdc);
注意上面的释放句柄函数是DeleteDC。可以通过下面的调用来取得整个屏幕的设备描述表句柄(可以作出汉王手写板的效果):
    hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);

5. 使用位图时,取得一个“内存设备描述表”:
    hdcMem = CreateCompatibleDC(hdc);      
    ……
    BitBlt(...);
    ……      
    DeleteDC(hdcMem);
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条