原创
获取设备描述表几种方法
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);
文章评论(0条评论)
登录后参与讨论