原文地址:http://support.microsoft.com/kb/12273/zh-cn
概要
以下信息描述了在哪些情况下是适合于使用 SendMessage() 或 SendDlgItemMessage() 函数。
SendMessage() 和 SendDlgItemMessage() 可用于将字符串添加到列表框。SendMessage() 用于将消息发送到特定窗口到列表框中使用该句柄。SendDlgItemMessage() 用来将消息发送到子窗口的给定窗口使用列表框中的资源 id。SendDlgItemMessage() 最常用于对话框中,而不适用于子窗口控件具有一个句柄的对话框框函数中。
在 SendDlgItemMessage() 调用
等效于下面的 SendMessage() 调用:
请注意 PostMessage() 应永远不会使用与子窗口的对话框,原因如下:
SendMessage() 和 SendDlgItemMessage() 可用于将字符串添加到列表框。SendMessage() 用于将消息发送到特定窗口到列表框中使用该句柄。SendDlgItemMessage() 用来将消息发送到子窗口的给定窗口使用列表框中的资源 id。SendDlgItemMessage() 最常用于对话框中,而不适用于子窗口控件具有一个句柄的对话框框函数中。
在 SendDlgItemMessage() 调用
SendDlgItemMessage (hwnd, id, msg, wParam, lParam)
hwnd2 = GetDlgItem (hwnd, id); SendMessage (hwnd2, msg, wParam, lParam);
- 如果不将邮件投递到该控件的消息队列,PostMessage() 将只返回一个错误。由于很多的邮件将被发送到控制返回的信息,因此不能 PostMessage(),因为它不返回给调用方的信息。
- 16-位仅: 消息如 WM_SETTEXT 邮件包含指向字符串的远指针可能导致问题,如果使用 PostMessage() 函数过帐。远指针可能指向到 DS (数据段) 内的缓冲区。因为 PostMessage() 不立即处理该消息,DS 可能获得移动。如果在处理消息之前,移动 DS,缓冲区远指针将无效。