为什么getDC返回同一对象的不同值

Why GetDC returns different values for the same object?

本文关键字:对象 getDC 返回 为什么      更新时间:2023-10-16

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

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

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

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

我知道我可以使用GetWindowDC去获取特定窗口的DC,但是我想获取该窗口的特定部分的DC

预先感谢。

您通常不会一遍又一遍地检索一堆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: %08lXn", (unsigned long)hdc);
    ReleaseDC(hwnd, hdc);
    Sleep(1000);
  }
  return 0;
}