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

标签 c++ winapi

我正在使用此代码获取当前鼠标位置处的对象/窗口的设备上下文(也称为 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/

相关文章:

java - Java中等效的指针数组

c++ - 将剩余的项目添加到另一个 vector

c++ - 流的非持久格式化

c++ - 在哪里放置要与 Windows 用户的桌面设置一起漫游的用户数据文件?

c++ - 鼠标锁定水平/垂直移动

c++ - 好友功能限制

c++ - 如何调整可扩展对话框的大小?

c++ - Windows api 中是否有 O(1) 方式来连接 2 个文件?

c# - Form.TopMost 有时有效

c++ - 关于光标更改的通知