狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美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视频
国产综合一区二区| 老司机免费视频一区二区三区| 久久久精品国产免费观看同学| 久久久精品黄色| 大胆欧美人体老妇| 欧美日韩视频| 久久高清一区| 91精品国产麻豆| 日韩欧美国产1| 亚洲欧洲日本在线| 日韩在线卡一卡二| 国产在线国偷精品产拍免费yy| 久久久久国产精品免费免费搜索| 日韩一区中文字幕| 男男gaygay亚洲| 免费精品视频| 亚洲欧美不卡| 欧美一级日韩一级| 91精品国产综合久久久久| 欧美伊人精品成人久久综合97| 久久天堂精品| 亚洲高清不卡一区| 欧美精品91| 成人国产精品免费网站| 国产日韩视频| 一区二区久久| 色噜噜狠狠成人中文综合| 精品国产欧美一区二区| 一个色妞综合视频在线观看| 综合在线观看色| 一区二区久久久久| 国产日韩综合av| 午夜精品久久久久久久久久 | 欧美亚洲一区二区三区四区| 678五月天丁香亚洲综合网| 欧美喷水视频| 欧美一区成人| 欧美在线看片| 91激情在线视频| 国产精品理论在线观看| 麻豆极品一区二区三区| 亚洲午夜视频| 国产精品免费看| 国产亚洲综合av| 亚洲大片在线观看| 亚洲国产日韩综合一区| 欧美成人午夜| 蜜桃av噜噜一区| 欧美成人一区二区在线| 精品理论电影在线观看| 久久久久高清精品| 国产免费久久精品| 2023国产精品| 国产成人a级片| 中文日韩欧美| 国产精品三级电影| 免费在线看成人av| 国产精品久久波多野结衣| 国产女同性恋一区二区| 先锋影音久久久| 国产精品水嫩水嫩| 成人亚洲一区二区一| 欧美丝袜自拍制服另类| 亚洲永久免费视频| 国产在线精品不卡| 在线观看网站黄不卡| 亚洲欧洲精品天堂一级| 亚洲网址在线| 一区二区三区精品视频| 国产精品久久久久影院亚瑟 | 欧美久久久一区| 亚洲精品视频在线| 狠狠入ady亚洲精品| 国产精品久久久久四虎| 99精品欧美一区二区三区小说 | 一区二区中文字幕在线| 欧美日韩国产综合视频在线| 国产精品女主播av| 欧美日韩国产综合视频在线| 日韩一区二区高清| heyzo一本久久综合| wwww国产精品欧美| 国产综合久久| 国产精品久久二区二区| 91视频观看免费| 亚洲线精品一区二区三区| 制服丝袜在线91| 久久综合电影| 日韩一区在线播放| 亚洲高清成人| 国产一区二区三区四区五区美女| 欧美一区二区三区免费大片| 欧美色欧美亚洲另类七区| 中文字幕一区二区三区不卡在线 | 91性感美女视频| 久久青草欧美一区二区三区| 精品不卡在线| 在线一区二区三区四区五区| 日本不卡视频一二三区| 欧美日韩综合在线| 国产精品中文字幕日韩精品| 精品国产乱码久久久久久久久| 亚洲高清不卡一区| 久久成人免费电影| 国产精品色婷婷| 在线一区二区三区四区五区| 欧美视频不卡| 亚洲欧美区自拍先锋| 国产午夜精品在线| 成+人+亚洲+综合天堂| 蜜桃精品视频在线观看| 国产亚洲精品资源在线26u| 欧美色偷偷大香| 国产欧美日韩综合精品二区| a美女胸又www黄视频久久| www.亚洲激情.com| 蜜臀av亚洲一区中文字幕| 亚洲一区在线视频| 久久精品亚洲麻豆av一区二区 | 中文亚洲欧美| 色综合天天综合| 国产精品一区二区欧美| 精品乱人伦小说| 国内自拍视频一区二区三区| 久久无码av三级| 色婷婷综合久久| www.日韩大片| 一二三四社区欧美黄| 久久久久久久久久久久电影| 亚洲一区二区三区午夜| 成人久久18免费网站麻豆| 亚洲自拍另类综合| 精品国产乱码久久久久久图片 | 欧美自拍丝袜亚洲| 韩日视频一区| 激情综合网最新| 欧美午夜影院一区| 国产亚洲精品v| www.久久精品| 婷婷亚洲久悠悠色悠在线播放| 精品国产一区二区三区久久久蜜月 | 欧美一级日韩一级| 老妇喷水一区二区三区| 欧美一区二区三区在线播放| 亚洲一区电影777| 国产精品久久久久久久久搜平片| 欧美日韩一区二区三区高清 | 久久蜜桃av一区二区天堂| 色婷婷av一区二区三区大白胸 | 日韩免费观看2025年上映的电影| 老牛国产精品一区的观看方式| 欧美精品国产一区二区| 免费在线成人网| 亚洲久草在线视频| 久久蜜臀中文字幕| 在线成人av影院| 老司机精品导航| 性色一区二区| 一本色道久久| 国产99久久久国产精品潘金网站| 麻豆精品视频在线| 亚洲国产精品嫩草影院| 一区二区三区免费观看| 国产精品电影院| 久久综合久久鬼色| 久久久久国产精品人| 91精品黄色片免费大全| 久久亚洲色图| 日韩亚洲精品在线| 国产精品二区影院| 伊伊综合在线| 91一区二区在线| 国产成人在线网站| 久久国产生活片100| 天堂va蜜桃一区二区三区| 首页亚洲欧美制服丝腿| 亚洲综合色噜噜狠狠| 日韩美女主播在线视频一区二区三区 | 亚洲精品一区二区在线观看| 欧美裸体bbwbbwbbw| 香蕉久久夜色精品国产| 久久久久在线| 美女91精品| 91在线观看成人| 色综合久久综合| 91美女福利视频| 91丨九色丨黑人外教| 91一区一区三区| 成人开心网精品视频| 成人18精品视频| 欧美一区二区三区久久精品| 伊人成年综合电影网| 在线不卡视频| 久久久精品网| 91福利在线看| 免费一区视频| 777奇米成人网| 日韩女优制服丝袜电影| 欧美国产日韩精品免费观看| 中文字幕在线不卡国产视频|