程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 關於SendMessage

關於SendMessage

編輯:關於VC++

本文是對MSDN中關於SendMessage的翻譯與小結。

SendMessage函數功能描述:將指定的消息發送到一個或多個窗口。此函數為指 定的窗口調用窗口過程,直到窗口過程處理完消息後才返回。

.函數原型:

LRESULT SendMessage(

HWND hWnd, // 目標窗口句柄

UINT Msg, // 被發送的消息

WPARAM wParam, // 第一個消息參數

LPARAM lParam // 第二個消息參數

);

.參數:

hWnd

窗口過程接收消息的窗口句柄。如果此參數為HWND_BROADCAST,則消息被送到 系統的所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和 彈出式窗口。消息不被送到子窗口。

Msg

指定被發送的消息;

wParam

指定附加消息的特定信息;

lParam

指定附加消息的特定信息。

.返回值:

返回值返回消息處理的結果,其依賴於所發送的消息。

.備注:

需要以 HWND_BROADCAST 方式通信的應用程序應該使用 RegisterWindowMessage 函數來獲得應用程序間通信的獨特消息。

如果指定的窗口通過調用線程被創建,則窗口過程作為子程序被立即調用。如 果指定的窗口通過調用不同線程被創建,則系統切換到該線程並調用適當的窗口 過程。線程間的消息只有在接收線程執行消息檢索代碼時才被處理。發送線程將 被阻塞到接收線程處理完消息為止。

Windows CE:Windows CE不支持Windows桌面平台所支持的所有消息。在使用 SendMessage函數之前,應檢查發送的消息是否被Windows CE所支持。

.使用環境:

Windows NT: 3.1及以上版本;

Windows:95及以上版本;

Windows CE:1.0及以上版本;

頭文件:winuser.h;

輸入庫:user32.lib;

Unicode:在WindowsNT(Windows2000)環境下以Unicode和ANSI方式實現。

.示例代碼:

case WM_KEYDOWN:
    switch (wParam)
    {
    case VK_HOME:
       SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;
       break ;
    case VK_END:
       SendMessage (hwnd, WM_VSCROLL, SB_BOTTOM, 0) ;
       break ;
    case VK_PRIOR:
       SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0) ;
       break ;
    ...
    }
    return 0 ;
  ...

.常見問題

1)使用SendMessage來實現剪切、復制和粘貼

SendMessage(hwnd, WM_COPY, 0, 0);
SendMessage(hwnd, WM_CUT, 0, 0);
SendMessage(hwnd, WM_PASTE, 0, 0);
2)SendMessage與PostMessage的 區別

PostMessage將消息放入消息隊列後馬上返回,而SendMessage直到窗口過程處 理完消息後才返回

3)SendMessage發送WM_COPYDATA消息在進程間傳送數據

WM_COPYDATA消息主要目的是允許在進程間傳遞少量只讀數據。SDK文檔推薦用 戶使用SendMessage()函數,接收方在數據復制完成前不返回,這樣發送方就不可 能刪除和修改數據。

例如:

std:string strData = "VC知識庫 VCKBASE.COM";
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.cbData = strData.Length();
cds.lpData = strData.c_str();
::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cds);
(全文完 )

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved