【问题标题】:What's the format value from the HWND returned from CreateWindow()?CreateWindow() 返回的 HWND 的格式值是什么?
【发布时间】:2021-01-12 01:16:24
【问题描述】:

在 32 位机器上,这是一个范围为(理论上)2^32-1 的内存地址吗? 我想知道的原因是我试图以某种方式将 CreateWindow() 返回的 HWND 与类实例相关联,所以为了知道如何正确存储该 HWND 值,我需要知道这些值是什么,所以我可以看看什么更适合,AA数组,带哈希表的链表等等。

【问题讨论】:

  • HWND 是一个不透明的值。 IOW,除了它是一个窗口句柄之外,您对此一无所知。 MS 没有记录内部结构,因为它不应该用作任何东西,只能用作窗口句柄。
  • 如果您正式要求格式 - 作为一般知识但不用于使用 - HWND 的低 16 位用作 Windows 句柄表中的索引。接下来的 16 位用作重用索引 - 当第一次使用单元时,此索引为 1。当重用此单元时,索引增加 1。依此类推
  • 将 CreateWindow() 返回的 HWND 与类实例相关联 - 为此使用了 GWLP_USERDATA

标签: windows winapi hwnd


【解决方案1】:

From the documentation for MFC(为避免混淆:这是文档中的CWnd 和文章中的“window object”是 your 程序中的 C++ 类,而不是 @ 987654325@):

另一方面,Windows 窗口is an opaque handle 指向一个内部 Windows 数据结构,该结构对应于一个窗口并在存在时消耗系统资源。

不透明的句柄必须被视为“黑匣子”或原子斑点,它们不得更改,也可能不会通过自省显示任何有用的信息。

另外,参见维基百科:https://en.wikipedia.org/wiki/Handle_(computing)

【讨论】:

    【解决方案2】:

    要存储一个值,您只需要知道它的类型。如Windows Data Types 中所述,HWNDHANDLE 的类型别名,PVOID 的类型别名又是 void* 的类型别名。

    换句话说:HWND 是指向未知数据的指针。它是指针大小的并且可以轻松复制。

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2014-07-01
      相关资源
      最近更新 更多