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

Windows新聞傳遞機制詳解

編輯:關於C++

Windows新聞傳遞機制詳解。本站提示廣大學習愛好者:(Windows新聞傳遞機制詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Windows新聞傳遞機制詳解正文


關於windows法式設計,這裡有幾個症結詞須要留意:新聞,新聞輪回,窗口進程。
 
所謂的Windows新聞傳遞機制就相似於生涯中的物流公司。當寄件人(例如鼠標、鍵盤)將包裹(新聞)交給物流公司(Windows體系)時,物流公司(Windows體系)會停止整頓而且派發(整頓及派發重要由新聞輪回完成),交給響應的快遞員(窗口進程)來處置。快遞員(窗口進程)拿到包裹(新聞)後則有多種方法來處置,如立馬交給收件人,等一天交給收件人,或轉交給其他快遞派發,這就須要在窗口進程頂用swich/case來辨別。
 
新聞輪回:

現在始化完成後,WinMain主函數就進入新聞輪回:

While(GetMessage(&msg,...))
{
TranslateMessage(&msg);//轉換鍵盤新聞
DispatchMessage(&msg);//分配新聞
}

窗口進程:

LRESULT CALLBACK WndProc(...)
{
...
switch( msg )
{
case 1:
...
case 2:
...
Default:
...
}
return 0;
}

上面以兩個成績的方法停止詳細概要。
 
成績1:新聞有哪幾種分類辦法?
(1) 隊列新聞和非隊列新聞
隊列新聞會被送到體系新聞隊列,然後到線程新聞隊列。Windows保護一個體系新聞隊列,每一個GUI線程也有一個線程新聞隊列。個中包含鍵盤鼠標新聞,WM_PAINT、WM_TIMER、WM_QUIT。
這些隊列新聞之外的新聞絕年夜多半都長短隊列新聞。

此處留意:新聞隊列中放置的新聞是以MSG構造的情勢存在,MSG包含:窗口句柄、新聞標識、新聞的兩個參數(WPARAM和LPARAM)、新聞發送(POST)的時光和鼠標的地位。另外,可以應用::GetMessage函數和::PeekMessage函數來保留取得的新聞信息。
非隊列新聞直接送給目標窗口進程。

(2) 體系新聞和運用法式新聞
體系新聞ID規模 0X8000~0XBFFF
運用法式消ID規模0XC000~0XFFFF
為了運用法式新聞的ID獨一性,可使用::RegisterWindowMessage來獲得特定的ID。 

成績2:新聞是若何停止傳遞、吸收、處置的?
Windows運用法式的輸出由Windows體系以新聞的情勢發送給運用法式的窗口,這些窗口經由過程窗口進程來吸收和處置新聞,然後把掌握返還給Windows。

此處留意:非隊列新聞直接送給目標窗口的窗口進程,隊列新聞由::DispatchMessage派發給目標窗口的窗口進程。窗口進程被挪用時吸收四個參數:窗口句柄、新聞標識、兩個32位的新聞參數。在窗口進程裡,用switch/case分支處置語句來辨認和處置新聞。

每一個GDI運用法式在主窗口創立以後,都邑進入新聞輪回,接收用戶輸出、說明和處置新聞。新聞輪回從新聞隊列中獲得新聞,假如不是快捷鍵新聞或對話框新聞,就停止新聞轉換和派發,讓目標窗口的窗口進程來處置。當獲得新聞WM_QUIT,或許::GetMessage失足時,加入新聞輪回。

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