【问题标题】:Use of Integer Atoms整数原子的使用
【发布时间】:2013-03-21 11:26:06
【问题描述】:

String Atoms 在 DDE(动态数据交换)中很有用。 Integer Atoms有什么用?

【问题讨论】:

  • 那道试题的年龄有多大?没有人再使用 DDE。
  • 我使用 GlobalAddAtom() 和 RegisterHotKey()。我使用字符串 Atom。 Integer Atoms 仅用于向后兼容还是什么?
  • @Martin James:字符串原子不仅仅在 DDE 中使用。

标签: windows winapi dde


【解决方案1】:

我知道的唯一用途是内置对话框类名称的原子数。 MessageBox 等使用#32770。这就是你用来找到窗口的东西。还有一些其他的,我很高兴忘记了它们的编号和用法。这可以追溯到 1980 年代,那是 16 位 Windows 和极端资源限制的日子。

您可以在this answer 中查看使用此原子数的示例代码。

    // Checks if <hWnd> is a dialog
    StringBuilder sb = new StringBuilder(260);
    GetClassName(hWnd, sb, sb.Capacity);
    if (sb.ToString() != "#32770") return true;

[编辑]
添加了一些整数原子类:

#ifndef POPUPMENU_CLASS_NAME
#define POPUPMENU_CLASS_NAME "#32768"  /* PopupMenu */
#endif
#ifndef DESKTOP_CLASS_NAME
#define DESKTOP_CLASS_NAME   "#32769"  /* Desktop */
#endif
#ifndef DIALOG_CLASS_NAME
#define DIALOG_CLASS_NAME    "#32770"  /* Dialog */
#endif
#ifndef WINSWITCH_CLASS_NAME
#define WINSWITCH_CLASS_NAME "#32771"  /* WinSwitch */
#endif
#ifndef ICONTITLE_CLASS_NAME
#define ICONTITLE_CLASS_NAME "#32772"  /* IconTitle */
#endif

【讨论】:

  • 在 MSDN 中“与其将字符串复制到每个结构中,应用程序可以将字符串放在原子表中……”所以 Integer Atom 即将节省几块内存。w0w
【解决方案2】:

使用整数和字符串原子类似,但整数原子没有引用计数,因此它们实际上从未存储在原子表中,而是直接映射到原子值。

String Atoms 示例:Windows 类名(但它们也可能使用 Integer Atom,请参阅 Hans Passant 的回答)

整数原子示例:标准剪贴板格式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多