狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

VC6下完成內部進程通訊

VC6下完成內部進程通訊

更新時間:2019-10-08 文章作者:未知 信息來源:網絡 閱讀次數:

  Windows是一種面向對象的體系結構,Windows環境和應用程序都是通過消息來交互的。Windows應用程序開始執行后,Windows為該程序創建一個“消息隊列(message queue)”,用以存放郵寄給該程序可能創建的各種不同窗口的消息。消息隊列中消息的結構(MSG)為: 

  typedef struct tagMSG{

   HWND hwnd;

   UINT message;

   WPARAM wParam;

   LPARAM lParam;

   DWORD time;

   POINT pt;

  }MSG;

  其中第一個成員變量是用以標識接收消息的窗口的窗口句柄;第二個參數便是消息標識號,如WM_PAINT;第三個和第四個參數的具體意義同message值有關,均為消息參數。前四個參數是非常重要和經常用到的,至于后兩個參數則分別表示郵寄消息的時間和光標位置(屏幕坐標)。

  把消息傳送到應用程序有兩種方法:一種是由系統將消息“郵寄(post)”到應用程序的“消息隊列”這是“進隊消息”Win32 API有對應的函數:PostMessage(),此函數不等待該消息處理完就返回;而另一種則是由系統在直接調用窗口函數時將消息“發送(send)”給應用程序的窗口函數,屬于“不進隊消息”對應的函數是SendMessage()其必須等待該消息處理完后方可返回。消息是在消息循環中被處理的,下面這段代碼就是一個典型的消息循環:  

  MSG msg; //定義消息名

  while (GetMessage (&msg, NULL, 0, 0))

  {

   TranslateMessage (&msg) ; //翻譯消息

   DispatchMessage (&msg) ; //撤去消息

  }

  return msg.wParam ;

  消息循環以GetMessage調用開始,它從消息隊列中取出一個消息。該函數的四個參數可以有控制地獲取消息,第一個參數指定要接收消息的MSG結構的地址,第二個參數表示窗口句柄,一般將其設置為空,表示要獲取該應用程序創建的所有窗口的消息;第三、四參數用于指定消息范圍。后面三個參數被設置為默認值,用于接收發送到屬于這個應用程序的任何一個窗口的所有消息。在接收到除WM_QUIT之外的任何一個消息后,GetMessage()返回TRUE;如果GetMessage收到一個WM_QUIT消息,則返回FALSE以退出消息循環,終止程序運行。因此,在接收到WM_QUIT之前,帶有GetMessage()的消息循環可以一直循環下去。

  當除WM_QUIT的消息用GetMessage讀入后,首先要經過函數TranslateMessage()對其進行解釋,但對大多數消息來說并不起什么作用。這里起關鍵作用的是DispatchMessage()函數,把由GetMessage獲取的Windows消息傳送給在MSG結構中為窗口所指定的窗口過程。在消息處理函數處理完消息之后,代碼又循環到開始去接收另一個消息,這樣就完成了一個完整的消息循環。
  本文將設計一個主控程序和一個底層工作程序,由主控程序通過消息來控制底層工作程序的工作狀態。這里首先對主控程序的設計過程進行介紹:

  首先創建一個單文檔工程,添加三個菜單“命令一”、“命令二”、“命令三”及與之對應的命令響應函數:  

  OnSendComm1()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd->SendMessage(WM_COMM,0,0);

  } 

  OnSendComm2()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd-〉SendMessage(WM_COMM,0,1);

  }

  OnSendComm3()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd-〉SendMessage(WM_COMM,1,0);

  }

  這里,WM_COMM是自定義消息,用于在主控程序和底層通信程序之間進行聯系,為了能夠使用該消息,必須首先添加預定義語句:  

  #define WM_COMM WM_USER + 100

  上述幾個函數的結構沒有什么區別,首先通過FindWindow()返回由str變量指定窗口標題的應用程序主窗口句柄并將其保存到pWnd。然后再通過該句柄調用SendMessage()函數并發送剛才定義的WM_COMM消息及其消息參數。如果函數被正確執行,底層程序將收到來發自主控程序的WM_COMM消息并可在消息響應函數中完成對消息參數的判斷處理以及進一步的操作。

  最后,來介紹一下底層工作程序的實現過程。底層工作程序也是一個單文檔應用程序(當然,對于多文檔應用程序也是一樣)。由于主控程序是通過對應用程序主窗口標題的捕獲來得到底層程序主窗口句柄的。因此需要在底層工作程序應用類的初始化應用函數InitInstance()中添加(在函數末尾添加)下面語句: 

  m_pMainWnd-〉SetWindowText("Receiver");

  以設置底層工作程序的窗口標題。同時還要在主框架類的頭文件MainFrm.h中添加與主控程序一樣的自定義消息定義:  

  #define WM_COMM WM_USER+100

  由于底層程序需要接收并響應主控程序發出的通知消息,因此還要在底層工作程序中添加對自定義消息WM_COMM的響應處理:  

  BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

  //{{AFX_MSG_MAP(CMainFrame)

  // NOTE - the ClassWizard will add and remove mapping macros here.

  // DO NOT EDIT what you see in these blocks of generated code !

  ON_WM_CREATE()

  //}}AFX_MSG_MAP

  ON_MESSAGE(WM_COMM,OnSendMsg)

  END_MESSAGE_MAP()

  ……

  void CMainFrame::OnSendMsg(WPARAM wParam, LPARAM lParam)

  {

   if(wParam==0 && lParam==0)

    AfxMessageBox("主控程序發送命令一!");

   if(wParam==0 && lParam==1)

    AfxMessageBox("主控程序發送命令二!");

   if(wParam==1 && lParam==0)

    AfxMessageBox("主控程序發送命令三!");

  }

  此后就可以通過辨別消息的兩個消息參數來區分主控程序發送的是哪一個命令從而可以執行相應的操作。執行主控程序和底層工作程序由于本程序采用的是SendMessage()所以當主控程序發送消息給底層工作程序時,底層工作程序彈出響應的模式對話框,在沒有關閉對話框前此消息未處理完,SendMessage()也就沒有執行完,所以主控程序呈阻塞狀態,如改用PoseMessage()則不會發生阻塞,具體選用哪個函數還應根據實際要求靈活掌握。

  結論:

  通過上面的實例可以看出利用消息進行進程間通信不失為一種便捷的方法,進程間的數據交換量不大卻能完成相當的功能,上下層次有著明顯的接口,上層和底層只通過這個接口進行通訊,因此只要對上下層程序制定好規范詳盡的協議便可編制出協調性很好的軟件控制系統。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
国产精一区二区三区| 麻豆成人在线播放| 成人免费高清在线观看| 极品尤物av久久免费看| 国产中文字幕精品| 国内外精品视频| 国产成人精品亚洲午夜麻豆| 国产盗摄一区二区三区| 国产精品羞羞答答xxdd| 国产91丝袜在线观看| 99精品久久只有精品| 欧美深夜福利| 99伊人成综合| 91精彩视频在线| 欧美一区二区精品| 26uuu亚洲综合色| 中文字幕不卡在线| 一区二区三区在线观看网站| 亚洲国产日产av| 青椒成人免费视频| 国产成人在线视频网址| 欧美一区激情| 亚洲少妇在线| 欧美在线看片a免费观看| 在线播放中文字幕一区| 国产日韩精品一区二区浪潮av| 一区精品在线播放| 亚洲电影在线播放| 老鸭窝一区二区久久精品| 国产99久久久久| 狠狠综合久久| 欧美亚一区二区| 久久一二三国产| 亚洲综合清纯丝袜自拍| 韩国成人精品a∨在线观看| 99精品在线观看视频| 99国产一区| 欧美精品日韩精品| 亚洲日本va午夜在线影院| 奇米影视一区二区三区小说| 亚洲欧美日韩综合国产aⅴ| 免费看亚洲片| 日韩欧美国产一区二区三区| 亚洲欧美欧美一区二区三区| 精品一二三四在线| 欧美色综合网| 欧美日本不卡视频| 自拍视频在线观看一区二区| 蜜桃91丨九色丨蝌蚪91桃色| 91蝌蚪porny九色| 久热精品在线| 国产亚洲人成网站| 美女视频黄久久| 精品999成人| 欧美一区二区三区视频| 一区2区3区在线看| 成人app软件下载大全免费| 久久久久久网| 国产亚洲va综合人人澡精品| 麻豆成人久久精品二区三区红 | 国产精品亚洲а∨天堂免在线| 亚洲美女色禁图| 精品福利av导航| 日本亚洲视频在线| 亚洲国产导航| 26uuu国产一区二区三区| 天天爽夜夜爽夜夜爽精品视频 | 久久久噜噜噜久噜久久综合| 蜜臀久久99精品久久久久宅男 | 欧美丰满美乳xxx高潮www| 亚洲精品视频一区| 欧美激情视频一区二区三区免费| 欧美日产在线观看| 亚洲成在人线在线播放| 国产一区再线| 欧美r级在线观看| 看片网站欧美日韩| 色婷婷精品大视频在线蜜桃视频| 国产精品污污网站在线观看| 成人av在线资源网| 91精品婷婷国产综合久久性色 | 中日韩男男gay无套| 国产精品无人区| 欧美在线三区| 久久久亚洲综合| 成人黄色在线看| 日韩精品一区二区三区视频在线观看| 美国毛片一区二区三区| 午夜一区二区三区不卡视频| 亚洲欧洲制服丝袜| 伊人久久av导航| 中文字幕在线观看不卡| 国产综合久久| 国产精品久久久久久久久果冻传媒 | 视频一区二区国产| 久久av二区| 亚洲成人av中文| 亚洲欧美春色| 午夜精品在线看| 久久国产精品免费一区| 亚洲国产中文字幕| 老司机免费视频久久| 日本sm残虐另类| 在线日韩一区二区| 久久成人久久爱| 欧美肥妇bbw| jizz一区二区| 欧美韩国一区二区| 国内外成人免费视频| 亚洲视频一区在线观看| 亚洲久久一区| 午夜av区久久| 欧美挠脚心视频网站| 国产91精品入口| 国产日产精品1区| 亚洲精品一级| 日韩激情中文字幕| 337p亚洲精品色噜噜| eeuss鲁片一区二区三区在线观看| 国产三级精品三级在线专区| 亚洲国产影院| 美女视频黄 久久| 欧美一级高清大全免费观看| av亚洲精华国产精华精| 日韩一区在线看| 久久精品综合| 粉嫩av亚洲一区二区图片| 国产农村妇女毛片精品久久麻豆| 亚洲免费精品| 久久国产精品第一页| 亚洲精品一区二区三区香蕉| 一区三区视频| 久久精品国产**网站演员| 精品国产1区二区| 国产亚洲第一区| 国产剧情一区二区| 最新中文字幕一区二区三区| 久久婷婷麻豆| 91首页免费视频| 亚洲成人7777| 精品不卡在线视频| 亚洲综合二区| 91在线免费播放| 日日夜夜免费精品视频| 久久人人超碰精品| 久久精品女人天堂| 91在线视频免费91| 日韩不卡手机在线v区| 久久久久99精品一区| 乱人伦精品视频在线观看| www.色精品| 日韩成人精品视频| 国产精品乱码一区二三区小蝌蚪| 久久影院亚洲| 欧美日韩国产探花| 精品一区二区在线看| 国产精品久99| 91精品国产麻豆国产自产在线| 在线观看的日韩av| 成人在线综合网站| 91天堂素人约啪| 亚洲第一搞黄网站| 久久日一线二线三线suv| 日本韩国欧美一区| 影音先锋在线一区| 99在线精品免费| 久久99精品久久久| 一区二区三区产品免费精品久久75| 日韩精品一区二区在线观看| 久久一区二区三区四区五区 | 欧美在线观看一区| 99re国产精品| 欧美日一区二区三区在线观看国产免| 久久国产精品99久久久久久老狼 | 在线成人av| 亚洲欧美综合| 成人开心网精品视频| 麻豆传媒一区二区三区| 亚洲综合网站在线观看| 国产欧美一区二区三区网站 | 粉嫩在线一区二区三区视频| 日本成人中文字幕在线视频 | 亚洲大胆视频| 欧美另类高清视频在线| 成人免费va视频| 黄一区二区三区| 美女诱惑一区二区| 亚洲成人激情av| 亚洲综合免费观看高清完整版在线| 国产精品女同一区二区三区| 久久久精品国产免费观看同学| 91精品国产综合久久久久久久| 日本高清不卡视频| 91成人免费在线| 色婷婷av一区二区三区软件| 亚洲一区三区视频在线观看| 一区二区冒白浆视频| 一区二区三区免费看| 国产日韩一区二区| 亚洲免费影视|