我正在使用此代码获取当前鼠标位置处的对象/窗口的设备上下文
(也称为 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
那个窗口。
提前致谢。
最佳答案
您通常不会在不释放其中任何一个的情况下一遍又一遍地检索一堆 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;
}
关于c++ - 为什么 GetDC 对同一个对象返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297616/