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

vc中使用SendMessage自定義消息函數

編輯:更多關於編程

       這篇文章主要介紹了vc中使用SendMessage自定義消息函數的相關資料,需要的朋友可以參考下

      SendMessage的基本結構如下:

      ?

    1 2 3 4 5 6 SendMessage( HWND hWnd, //消息傳遞的目標窗口或線程的句柄。 UINT Msg, //消息類別(這裡可以是一些系統消息,也可以是自己定義,下文具體介紹,) WPARAM wParam, //參數1 (WPARAM 其實是與UINT是同種類型的, //在vc編譯器中右鍵有個“轉到WPARAM的定義”的選項可以查看。 LPARAM lParam); //參數2

      其中一些參數的由來如下:

      //typedef unsigned int UINT;

      //typedef UINT WPARAM;

      //typedef LONG LPARAM;

      //typedef LONG LRESULT;

      例如可以用以下語句:

      ?

    1 ::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);

      這裡我發送的消息是本窗體接收的,所以句柄用:this->m_hWnd

      這裡的消息類別WM_MY_DOSOME就是我自定義的,

      在接收消息的窗體或線程所在的頭文件裡:

      ?

    1 #define WM_MY_DOSOME WM_USER+1 // do something

      當然你還可以定義更多如:

      ?

    1 #define WM_DOOTHER WM_USER+2 // do other

      表示要做一些事情。

      到這裡,可能大家還是對消息類別有點模糊,不要擔心,我下面很快就講到。

      我們發了一個消息出去,那麼接收方要能識別這個消息是干什麼,就是通過消息類別來區分,

      並且開始去做這個消息對應要處理的事情。如下:

      一:編寫一個事情:

      我們在接收窗體裡定義一個這樣的事情(過程),

      ?

    1 2 3 4 5 6 afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2) { MessageBox("收到消息了,我要開始做一些事情了。","收到",MB_OK); //可以運用iParam1,iParam2 來做一些事情。 return 0; }

      這個事情有3點大家要注意,非常重要:

      1:使用了afx_msg,並且要將afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)

      改寫到頭文件的

      //{{AFX_MSG

      //。。。改寫到這裡,顏色會變成灰的。這一點非常重要。

      //}}AFX_MSG

      2:參數有2個,WPARAM iParam1,LPARAM iParam2,哪怕沒有東西傳進來也要寫,不然會吃苦頭的,vc裡不會提醒你少寫了一個,

      但一些莫名奇妙的事情會發生。

      3:類型用 LRESULT,完了要return 0;

      二:讓接收方知道什麼時候做這個事情:

      我們在

      ?

    1 2 3 4 5 6 //{{AFX_MSG_MAP //。。。這裡寫上 ON_MESSAGE(WM_MY_DOSOME,DoSomeThing) //如果還有其他消息就再寫一個 ON_MESSAGE(WM_DOOTHER,DoOther) //}}AFX_MSG_MAP

      到這裡,當你用SendMessage,發了一個WM_MY_DOSOME類型的消息過來的時候,

      接收方就會去做DoSomeThing(WPARAM iParam1,LPARAM iParam2)

      發了一個WM_DOOTHER類型的消息過來的時候,

      接收方就會去做DoOther(WPARAM iParam1,LPARAM iParam2)當然,這裡DoOther我還沒有定義,

      這樣就是一個完整的消息發送與接受過程,我沒有詳細講參數,iParam1,因為還沒有用到很復雜的情況,

      大家要是有心得我們可以一起提高。

      在頭文件裡

      復制代碼 代碼如下:

      #define WM_MYMSG WM_USER+5 //自定義一個消息

      afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定義消息的處理函數聲明

      在.cpp文件裡

      ON_MESSAGE(WM_MYMSG, OnMyMessage)

      //利用ON_MESSAGE()宏在自定義消息與其處理函數間建立映射關系

      void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)

      //從lParam中取出CString對象的指針,並將字符串內容在IDC_MSGEDIT中顯示出來

      以上所述就是本文的全部內容了,希望大家能夠喜歡。

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