如何使用相對於 SendDlgItemMessage() SendMessage()

原文地址: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,緩衝區遠指針將無效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章