久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

[轉(zhuǎn)]進程間發(fā)消息

 昵稱5169677 2012-03-29

[轉(zhuǎn)]進程間發(fā)消息

Windows把0x400定義為WM_USER,。如果想定義自己的一個消息,可以在WM_USER上加上一個值:

#define WM_CONTROLPRINT WM_USER+1001

另一種自定義窗口消息的方法是用RegisterWindowsMessage()函數(shù)來注冊這個消息,。與在WM_USER上加上某個數(shù)相比,,它的好處是不必考慮所表示的消息標識符是否超出工程的允許范圍。如:

const UINT WM_CONTROLPRINT=RegisterWindowMessage("reg_data");

在接收消息的程序中,,需要對添加對應消息的響應處理函數(shù),并將消息和消息處理函數(shù)關(guān)聯(lián),,要不它不知道消息發(fā)給誰:

//函數(shù)定義,在//AFX_MSG中
afx_msg LRESULT OnControlPrint(WPARAM wParam,LPARAM lParam);

//函數(shù)實現(xiàn)
LRESULT CSendDlg::OnControlPrint(WPARAM wParam,LPARAM lParam)
{
}

//關(guān)聯(lián)映射,在BEGIN_MESSAGE_MAP中
ON_MESSAGE(WM_CONTROLPRINT,OnControlPrint)//使用WM_USER+1001定義的消息
ON_REGISTERED_MESSAGE(WM_CONTROLPRINT,OnControlPrint)//使用RegisterWindowMessage定義的消息

消息如何傳遞呢,?我們需要發(fā)送消息時,,可以使用PostMessage和SendMessage。這兩個消息發(fā)送函數(shù)不一樣的地方就是SendMessage發(fā)送完消息后會等待消息處理函數(shù)處理完成后返回,,PostMessage則不等待,。所以,可以說PostMessage是不可靠的,,實際運用中可以根據(jù)具體情況來確定用那一個,。這兩個函數(shù)的具體使用請查看MSDN。

如我向主窗體發(fā)送一個消息(第一個參數(shù)是接收消息的窗體句柄,,第二個參數(shù)是要發(fā)送的消息,,后邊兩個為隨消息發(fā)送的參數(shù)信息):
::SendMessage(AfxGetApp()->GetMainWnd()->m_hWnd,WM_CONTROLPRINT,NULL,0);


2,使用自定義消息在進程間通訊,;

我們可以用VC60建立兩個基于對話框的工程,,一個命名為Send,一個命名為Revice。

在Send對話框中添加一個名成為IDC_BUTTONSEND的按鈕,。

在SendDlg.h和ReviceDlg.g中都添加自定義消息,。消息實現(xiàn)進程間通信,需要在這兩個程序中定義或注冊相同的消息,,才能保證數(shù)據(jù)通信順利進行:

#define WM_CONTROLPRINT WM_USER+1001

在Send工程中添加IDC_BUTTONSEND按鈕的單擊處理事件,,并添加代碼:

void CSendDlg::OnButtonsend()

{

//獲取窗口句柄
CWnd *pWnd=CWnd::FindWindow(NULL,_T("Revice"));
if(pWnd==NULL)
{
AfxMessageBox("接收程序沒有運行!");
return ;
}

//發(fā)送消息
pWnd->SendMessage(WM_SENDYKDISABLE,NULL,0);
}

在Revice工程中添加WM_CONTROLPRINT 的處理函數(shù),關(guān)聯(lián)映射,,和上邊描述的過程一樣,,在處理函數(shù)中添加相應的處理代碼。這里就不多說了,!

 

 

 

 

 

 

 

 

 

 

 


進程間傳遞消息的實現(xiàn)方法
作者: 來源:   發(fā)布日期:2007-07-03  
    隨著我們開發(fā)的應用的日益復雜,,像以往那樣將所有功能坐在一個exe文件中情況越來越少,更多時候是整個應用由若干模塊,、甚至若干單獨的exe文件組成,,這就涉及到了模塊或進程間的通訊交互問題,,本文主要談談在進程間的信息傳遞方法,作為進一步探討進程間通訊方案的參考,。
1.使用用戶自定義消息在進程間傳遞消息,。
       經(jīng)過一定時間的Win32開發(fā),大家對Windows Mobile平臺下的消息映射機制應該都比較清楚了,,除了系統(tǒng)已經(jīng)為我們設定的如WM_CREATE,、WM_PAINT這類消息外,還有一種特殊的WM_USER消息用于用戶自定義消息,。
定義格式如下:
       #define WM_IAMHANDSOME WM_USER+1                  
然后同樣的對于WM_IAMHANDSOME同樣的將它映射到相應的處理函數(shù)上去,。
當需要使用激發(fā)該消息時,采用SendMessage函數(shù)發(fā)送一個WM_IAMHANDSOME即可,。下面談談在進程間如何進行用戶自定義消息的傳遞,。

       例,假設兩個程序,,一個叫zoujielun,一個叫feiyuqing,,兩個程序進行一項操作,唱一首名叫《千里之外》的歌,。
       其中即需要一個程序“唱”完后通知另一個程序接著“唱”,。
1)在兩個程序中都定義#define WM_YOUTURN WM_USER+10
2)在feiyuqing進程中加入對應WM_YOUTURN的映射:
const MSG_MAP_MAIN_S g_mainMsg[] =
{
       //……
{WM_YOUTURN,OnYouturn},
       //……
};
3)在zoujielun中向feiyuqing發(fā)送WM_YOUTURN的消息,代碼如下:
       Sing(_T(“屋檐如懸崖風鈴如滄海我等燕歸來……”));
           HWND findWindows=NULL;
       findWindows= FindWindow(_T(“feiyuqing”), _T(“feiyuqing\"));
           SendMessage(findWindows,WM_YOUTURN,0,0);
這樣,,即把消息發(fā)送給了feiyuqing進程,。
4)在feiyuqing中,對應的OnYouTurn做出相應處理即可,。
LRESULT OnYouTurn(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
       Sing(_T(“我送你離開千里之外 ……”));
       return 0;
}
    這樣即實現(xiàn)了進程間通過自定義消息傳遞來進行通訊,,但是這樣的缺點是不能同時傳遞數(shù)據(jù),。假設feiyuqing因為年紀大了,,如果突然“失憶”了,不記得歌詞,,需要zoujielun不但告訴他該唱了,,還要告訴他該唱什么,這時就需要利用系統(tǒng)一個強大的消息WM_COPYDATA,。  

2.使用WM_COPYDATA消息跨進程傳遞數(shù)據(jù)
       在SDK中,,該消息對應的參數(shù)為:
    WM_COPYDATA wParam = (WPARAM)(HWND) hwnd;
               lParam = (LPARAM)(PCOPYDATASTRUCT) pcds; [Page]
關(guān)鍵在于第二個參數(shù),即一個COPYDATASTRUCT結(jié)構(gòu)的指針,。
該數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)如下:
typedef struct tagCOPYDATASTRUCT {
DWORD dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT;
第一個數(shù)據(jù)成員可以傳遞一個DWORD類型,,如果只是要在進程間傳一個DWORD類型的數(shù)據(jù),這里可以直接用這個成員傳遞,。
關(guān)鍵在第二,、三個數(shù)據(jù)成員,,第三個lpData即為欲傳遞的數(shù)據(jù)的指針,第二個cbData即為傳遞的數(shù)據(jù)大小,,以byte為單位,。
下面舉例,還是zoujielun和feiyuqing程序間的通訊,。
1)在feiyuqing進程中加入對應WM_COPYDATA的映射:
const MSG_MAP_MAIN_S g_mainMsg[] =
{
       //……
{WM_COPYDATA,OnYouturn},
       //……
};
2)在zoujielun中向feiyuqing發(fā)送WM_YOUTURN的消息,,代碼如下:
       Sing(_T(“屋檐如懸崖風鈴如滄海我等燕歸來……”));
     HWND findWindows=NULL;
       findWindows= FindWindow(_T(“feiyuqing\"), _T(“feiyuqing\"));
       TCHAR *sContent = new TCHAR[256];
       wsprintf(sContent,_T(“我送你離開千里之外……\"));
COPYDATASTRUCT copyData;
copyData.cbData = _msize(sContent);
copyData.lpData = sContent;
SendMessage(findWindows,WM_COPYDATA,0,(LPARAM)&copyData);
3)在feiyuqing中,對應的OnOnYouTurn做出相應處理即可,。
LRESULT OnYouTurn(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
       TCHAR *sContent = NULL;
            sContent =(TCHAR*)((COPYDATASTRUCT*)lParam)->lpData;
       Sing(sContent);
       return 0;
}
即收到該消息后從相應參數(shù)取出數(shù)據(jù)進行處理,。


SendMessage FindWindow
http://www.cnblogs.com/shengshuai/archive/2007/05/01/sendmessagefindexec.html
MFC中獲得各個類的句柄的總結(jié)
http://hi.baidu.com/mzyse/blog/item/74403501e1b97d001c9583f6.html
MFC中自由使用自定義消息
http://www./xbgs/archive/2008/12/17/69647.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多