如何使用相对于 SendDlgItemMessage() SendMessage()

来源:互联网 发布:驾驶行为大数据分析 编辑:程序博客网 时间:2024/05/20 08:27

原文地址:http://support.microsoft.com/kb/12273/zh-cn


Collapse image概要

以下信息描述了在哪些情况下是适合于使用 SendMessage() 或 SendDlgItemMessage() 函数。 

SendMessage() 和 SendDlgItemMessage() 可用于将字符串添加到列表框。SendMessage() 用于将消息发送到特定窗口到列表框中使用该句柄。SendDlgItemMessage() 用来将消息发送到子窗口的给定窗口使用列表框中的资源 id。SendDlgItemMessage() 最常用于对话框中,而不适用于子窗口控件具有一个句柄的对话框框函数中。 

在 SendDlgItemMessage() 调用
   SendDlgItemMessage (hwnd, id, msg, wParam, lParam)
等效于下面的 SendMessage() 调用:
   hwnd2 = GetDlgItem (hwnd, id);   SendMessage (hwnd2, msg, wParam, lParam);
请注意 PostMessage() 应永远不会使用与子窗口的对话框,原因如下:
  1. 如果不将邮件投递到该控件的消息队列,PostMessage() 将只返回一个错误。由于很多的邮件将被发送到控制返回的信息,因此不能 PostMessage(),因为它不返回给调用方的信息。
  2. 16-位仅: 消息如 WM_SETTEXT 邮件包含指向字符串的远指针可能导致问题,如果使用 PostMessage() 函数过帐。远指针可能指向到 DS (数据段) 内的缓冲区。因为 PostMessage() 不立即处理该消息,DS 可能获得移动。如果在处理消息之前,移动 DS,缓冲区远指针将无效。

0 0
原创粉丝点击