为什么GetDC为同一个对象返回不同的值?

时间:2014-01-23 01:31:56

标签: c++ winapi

我正在使用此代码在当前鼠标位置获取对象/窗口的Device Context(又称DC)。

POINT curPos;

while (1)
{
    GetCursorPos(&curPos);
    printf("hdc: %ld\n", GetDC(WindowFromPoint(curPos)));
    Sleep(300);
}

在编译和执行之后,我将鼠标放在控制台上并将其留在那里,而不移动它,并始终打印不同的值(也是负数)。例如:

hdc: -1795094423
hdc: -1425992173
hdc: 1090588133
hdc: 553717209
hdc: 1979782668
hdc: 2013337074
hdc: -1241444488

我知道我可以使用GetWindowDC获取特定窗口的DC,但我希望得到该窗口特定部分的DC

提前致谢。

1 个答案:

答案 0 :(得分:3)

你通常不会一遍又一遍地检索一堆HDC,而不释放任何一个。尝试释放它们,然后抓住另一个,看看会发生什么。

无论如何,他们没有理由相同。事实上,你这样做的方式,不释放它们,它们必须是不同的数字,因为每一个都是不同对象的句柄。

至于数字是“否定”,这根本不重要。它们应该真的打印成十六进制。

#include <windows.h>
#include <stdio.h>

int main() {
  POINT curPos;
  while (1)
  {
    GetCursorPos(&curPos);
    HWND hwnd = WindowFromPoint(curPos);
    HDC hdc = GetDC(hwnd);
    printf("hdc: %08lX\n", (unsigned long)hdc);
    ReleaseDC(hwnd, hdc);
    Sleep(1000);
  }
  return 0;
}