日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows消息机制详解-6

發(fā)布時間:2023/12/18 windows 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows消息机制详解-6 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

消息系統(tǒng)對于一個win32程序來說十分重要,它是一個程序運行的動力源泉。一個消息,是系統(tǒng)定義的一個32位的值,他唯一的定義了一個事件,向 Windows發(fā)出一個通知,告訴應(yīng)用程序某個事情發(fā)生了。例如,單擊鼠標(biāo)、改變窗口尺寸、按下鍵盤上的一個鍵都會使Windows發(fā)送一個消息給應(yīng)用程序。
??? 消息本身是作為一個記錄傳遞給應(yīng)用程序的,這個記錄中包含了消息的類型以及其他信息。例如,對于單擊鼠標(biāo)所產(chǎn)生的消息來說,這個記錄中包含了單擊鼠標(biāo)時的坐標(biāo)。這個記錄類型叫做MSG,MSG含有來自windows應(yīng)用程序消息隊列的消息信息,它在Windows中聲明如下:

struct?tagMsg

{

???????HWND????hwnd;???????//接受該消息的窗口句柄

???????UINT????message;????//消息常量標(biāo)識符,也就是我們通常所說的消息號

???????WPARAM??wParam;?????//32位消息的特定附加信息,確切含義依賴于消息值

???????LPARAM??lParam;?????//32位消息的特定附加信息,確切含義依賴于消息值

???????DWORD???time;???????//消息創(chuàng)建時的時間

???????POINT???pt;?????????//消息創(chuàng)建時的鼠標(biāo)/光標(biāo)在屏幕坐標(biāo)系中的位置

}MSG;


??? 消息可以由系統(tǒng)或者應(yīng)用程序產(chǎn)生。系統(tǒng)在發(fā)生輸入事件時產(chǎn)生消息。舉個例子, 當(dāng)用戶敲鍵, 移動鼠標(biāo)或者單擊控件。系統(tǒng)也產(chǎn)生消息以響應(yīng)由應(yīng)用程序帶來的變化, 比如應(yīng)用程序改變系統(tǒng)字體改變窗體大小。應(yīng)用程序可以產(chǎn)生消息使窗體執(zhí)行任務(wù),或者與其他應(yīng)用程序中的窗口通訊。

消息中有什么?
???我們給出了上面的注釋,是不是會對消息結(jié)構(gòu)有了一個比較清楚的認(rèn)識?如果還沒有,那么我們再試著給出下面的解釋:
???? hwnd 32位的窗口句柄。窗口可以是任何類型的屏幕對象,因為Win32能夠維護(hù)大多數(shù)可視對象的句柄(窗口、對話框、按鈕、編輯框等)。
???? message用于區(qū)別其他消息的常量值,這些常量可以是Windows單元中預(yù)定義的常量,也可以是自定義的常量。消息標(biāo)識符以常量命名的方式指出消息的含義。當(dāng)窗口過程接收到消息之后,他就會使用消息標(biāo)識符來決定如何處理消息。例如、WM_PAINT告訴窗口過程窗體客戶區(qū)被改變了需要重繪。符號常量指定系統(tǒng)消息屬于的類別,其前綴指明了處理解釋消息的窗體的類型。
???? wParam 通常是一個與消息有關(guān)的常量值,也可能是窗口或控件的句柄。
???? lParam 通常是一個指向內(nèi)存中數(shù)據(jù)的指針。由于WParam、lParam和Pointer都是32位的,因此,它們之間可以相互轉(zhuǎn)換。

消息標(biāo)識符的值
???? 系統(tǒng)保留消息標(biāo)識符的值在0x0000在0x03ff(WM_USER-1)范圍。這些值被系統(tǒng)定義消息使用。應(yīng)用程序不能使用這些值給自己的消息。應(yīng)用程序消息從WM_USER(0X0400)到0X7FFF,或0XC000到0XFFFF;WM_USER到 0X7FFF范圍的消息由應(yīng)用程序自己使用;0XC000到0XFFFF范圍的消息用來和其他應(yīng)用程序通信,我們順便說一下具有標(biāo)志性的消息值:
???? WM_NULL---0x0000??? 空消息。
???? 0x0001----0x0087??? 主要是窗口消息。
???? 0x00A0----0x00A9??? 非客戶區(qū)消息?
???? 0x0100----0x0108??? 鍵盤消息
???? 0x0111----0x0126??? 菜單消息
???? 0x0132----0x0138??? 顏色控制消息
???? 0x0200----0x020A??? 鼠標(biāo)消息
???? 0x0211----0x0213??? 菜單循環(huán)消息
???? 0x0220----0x0230??? 多文檔消息
???? 0x03E0----0x03E8??? DDE消息
???? 0x0400????????????? WM_USER
???? 0x8000????????????? WM_APP
???? 0x0400----0x7FFF??? 應(yīng)用程序自定義私有消息

消息有哪幾種?
???其實,windows中的消息雖然很多,但是種類并不繁雜,大體上有3種:窗口消息、命令消息和控件通知消息。
???? 窗口消息大概是系統(tǒng)中最為常見的消息,它是指由操作系統(tǒng)和控制其他窗口的窗口所使用的消息。例如CreateWindow、DestroyWindow和MoveWindow等都會激發(fā)窗口消息,還有我們在上面談到的單擊鼠標(biāo)所產(chǎn)生的消息也是一種窗口消息。
???? 命令消息,這是一種特殊的窗口消息,他用來處理從一個窗口發(fā)送到另一個窗口的用戶請求,例如按下一個按鈕,他就會向主窗口發(fā)送一個命令消息。
???? 控件通知消息,是指這樣一種消息,一個窗口內(nèi)的子控件發(fā)生了一些事情,需要通知父窗口。通知消息只適用于標(biāo)準(zhǔn)的窗口控件如按鈕、列表框、組合框、編輯框,以及Windows公共控件如樹狀視圖、列表視圖等。例如,單擊或雙擊一個控件、在控件中選擇部分文本、操作控件的滾動條都會產(chǎn)生通知消息。她類似于命令消息,當(dāng)用戶與控件窗口交互時,那么控件通知消息就會從控件窗口發(fā)送到它的主窗口。但是這種消息的存在并不是為了處理用戶命令,而是為了讓主窗口能夠改變控件,例如加載、顯示數(shù)據(jù)。例如按下一個按鈕,他向父窗口發(fā)送的消息也可以看作是一個控件通知消息;單擊鼠標(biāo)所產(chǎn)生的消息可以由主窗口直接處理,然后交給控件窗口處理。
??? 其中窗口消息及控件通知消息主要由窗口類即直接或間接由CWND類派生類處理。相對窗口消息及控件通知消息而言,命令消息的處理對象范圍就廣得多,它不僅可以由窗口類處理,還可以由文檔類,文檔模板類及應(yīng)用類所處理。
??? 由于控件通知消息很重要的,人們用的也比較多,但是具體的含義往往令初學(xué)者暈頭轉(zhuǎn)向,所以我決定把常見的幾個列出來供大家參考:
按扭控件
BN_CLICKED??????? 用戶單擊了按鈕
?BN_DISABLE?按鈕被禁止
?BN_DOUBLECLICKED? 用戶雙擊了按鈕
?BN_HILITE ?用/戶加亮了按鈕
?BN_PAINT??按鈕應(yīng)當(dāng)重畫
?BN_UNHILITE?加亮應(yīng)當(dāng)去掉

組合框控件
?CBN_CLOSEUP?組合框的列表框被關(guān)閉
?CBN_DBLCLK?用戶雙擊了一個字符串
?CBN_DROPDOWN?組合框的列表框被拉出
?CBN_EDITCHANGE?用戶修改了編輯框中的文本
?CBN_EDITUPDATE?編輯框內(nèi)的文本即將更新
?CBN_ERRSPACE?組合框內(nèi)存不足
?CBN_KILLFOCUS?組合框失去輸入焦點
?CBN_SELCHANGE?在組合框中選擇了一項
?CBN_SELENDCANCEL?用戶的選擇應(yīng)當(dāng)被取消
?CBN_SELENDOK?用戶的選擇是合法的
?CBN_SETFOCUS?組合框獲得輸入焦點

編輯框控件
?EN_CHANGE?編輯框中的文本己更新
?EN_ERRSPACE?編輯框內(nèi)存不足
?EN_HSCROLL?用戶點擊了水平滾動條
?EN_KILLFOCUS?編輯框正在失去輸入焦點
?EN_MAXTEXT?插入的內(nèi)容被截斷
?EN_SETFOCUS?編輯框獲得輸入焦點
?EN_UPDATE?編輯框中的文本將要更新
?EN_VSCROLL?用戶點擊了垂直滾動條消息含義

列表框控件
?LBN_DBLCLK?用戶雙擊了一項
?LBN_ERRSPACE?列表框內(nèi)存不夠
?LBN_KILLFOCUS?列表框正在失去輸入焦點
?LBN_SELCANCEL?選擇被取消
?LBN_SELCHANGE?選擇了另一項
?LBN_SETFOCUS?列表框獲得輸入焦點

隊列消息和非隊列消息
???從消息的發(fā)送途徑來看,消息可以分成2種:隊列消息和非隊列消息。消息隊列由可以分成系統(tǒng)消息隊列和線程消息隊列。系統(tǒng)消息隊列由Windows維護(hù),線程消息隊列則由每個GUI線程自己進(jìn)行維護(hù),為避免給non-GUI現(xiàn)成創(chuàng)建消息隊列,所有線程產(chǎn)生時并沒有消息隊列,僅當(dāng)線程第一次調(diào)用GDI函數(shù)時系統(tǒng)才給線程創(chuàng)建一個消息隊列。隊列消息送到系統(tǒng)消息隊列,然后到線程消息隊列;非隊列消息直接送給目的窗口過程。
???? 對于隊列消息,最常見的是鼠標(biāo)和鍵盤觸發(fā)的消息,例如WM_MOUSERMOVE,WM_CHAR等消息,還有一些其它的消息,例如:WM_PAINT、 WM_TIMER和WM_QUIT。當(dāng)鼠標(biāo)、鍵盤事件被觸發(fā)后,相應(yīng)的鼠標(biāo)或鍵盤驅(qū)動程序就會把這些事件轉(zhuǎn)換成相應(yīng)的消息,然后輸送到系統(tǒng)消息隊列,由 Windows系統(tǒng)去進(jìn)行處理。Windows系統(tǒng)則在適當(dāng)?shù)臅r機(jī),從系統(tǒng)消息隊列中取出一個消息,根據(jù)前面我們所說的MSG消息結(jié)構(gòu)確定消息是要被送往那個窗口,然后把取出的消息送往創(chuàng)建窗口的線程的相應(yīng)隊列,下面的事情就該由線程消息隊列操心了,Windows開始忙自己的事情去了。線程看到自己的消息隊列中有消息,就從隊列中取出來,通過操作系統(tǒng)發(fā)送到合適的窗口過程去處理。
???? 一般來講,系統(tǒng)總是將消息Post在消息隊列的末尾。這樣保證窗口以先進(jìn)先出的順序接受消息。然而,WM_PAINT是一個例外,同一個窗口的多個 WM_PAINT被合并成一個 WM_PAINT 消息, 合并所有的無效區(qū)域到一個無效區(qū)域。合并WM_PAIN的目的是為了減少刷新窗口的次數(shù)。


?


??? 非隊列消息將會繞過系統(tǒng)隊列和消息隊列,直接將消息發(fā)送到窗口過程,。系統(tǒng)發(fā)送非隊列消息通知窗口,系統(tǒng)發(fā)送消息通知窗口。例如,當(dāng)用戶激活一個窗口系統(tǒng)發(fā)送WM_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR。這些消息通知窗口它被激活了。非隊列消息也可以由當(dāng)應(yīng)用程序調(diào)用系統(tǒng)函數(shù)產(chǎn)生。例如,當(dāng)程序調(diào)用SetWindowPos系統(tǒng)發(fā)送WM_WINDOWPOSCHANGED消息。一些函數(shù)也發(fā)送非隊列消息,例如下面我們要談到的函數(shù)。
?????
消息的發(fā)送
???? 了解了上面的這些基礎(chǔ)理論之后,我們就可以進(jìn)行一下簡單的消息發(fā)送與接收。
???? 把一個消息發(fā)送到窗口有3種方式:發(fā)送、寄送和廣播。
???? 發(fā)送消息的函數(shù)有SendMessage、SendMessageCallback、SendNotifyMessage、 SendMessageTimeout;寄送消息的函數(shù)主要有PostMessage、PostThreadMessage、 PostQuitMessage;廣播消息的函數(shù)我知道的只有BroadcastSystemMessage、 BroadcastSystemMessageEx。
???? SendMessage的原型如下:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam),這個函數(shù)主要是向一個或多個窗口發(fā)送一條消息,一直等到消息被處理之后才會返回。不過需要注意的是,如果接收消息的窗口是同一個應(yīng)用程序的一部分,那么這個窗口的窗口函數(shù)就被作為一個子程序馬上被調(diào)用;如果接收消息的窗口是被另外的線程所創(chuàng)建的,那么窗口系統(tǒng)就切換到相應(yīng)的線程并且調(diào)用相應(yīng)的窗口函數(shù),這條消息不會被放進(jìn)目標(biāo)應(yīng)用程序隊列中。函數(shù)的返回值是由接收消息的窗口的窗口函數(shù)返回,返回的值取決于被發(fā)送的消息。
???? PostMessage的原型如下:BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam),該函數(shù)把一條消息放置到創(chuàng)建hWnd窗口的線程的消息隊列中,該函數(shù)不等消息被處理就馬上將控制返回。需要注意的是,如果hWnd參數(shù)為 HWND_BROADCAST,那么,消息將被寄送給系統(tǒng)中的所有的重疊窗口和彈出窗口,但是子窗口不會收到該消息;如果hWnd參數(shù)為NULL,則該函數(shù)類似于將dwThreadID參數(shù)設(shè)置成當(dāng)前線程的標(biāo)志來調(diào)用PostThreadMEssage函數(shù)。
  從上面的這2個具有代表性的函數(shù),我們可以看出消息的發(fā)送方式和寄送方式的區(qū)別所在:被發(fā)送的消息是否會被立即處理,函數(shù)是否立即返回。被發(fā)送的消息會被立即處理,處理完畢后函數(shù)才會返回;被寄送的消息不會被立即處理,他被放到一個先進(jìn)先出的隊列中,一直等到應(yīng)用程序空線的時候才會被處理,不過函數(shù)放置消息后立即返回。


  實際上,發(fā)送消息到一個窗口處理過程和直接調(diào)用窗口處理過程之間并沒有太大的區(qū)別,他們直接的唯一區(qū)別就在于你可以要求操作系統(tǒng)截獲所有被發(fā)送的消息,但是不能夠截獲對窗口處理過程的直接調(diào)用。
  以寄送方式發(fā)送的消息通常是與用戶輸入事件相對應(yīng)的,因為這些事件不是十分緊迫,可以進(jìn)行緩慢的緩沖處理,例如鼠標(biāo)、鍵盤消息會被寄送,而按鈕等消息則會被發(fā)送。
  廣播消息用得比較少,BroadcastSystemMessage函數(shù)原型如下:
????? long BroadcastSystemMessage(DWORD dwFlags,LPDWORD lpdwRecipients,UINT uiMessage,WPARAM wParam,LPARAM lParam);該函數(shù)可以向指定的接收者發(fā)送一條消息,這些接收者可以是應(yīng)用程序、可安裝的驅(qū)動程序、網(wǎng)絡(luò)驅(qū)動程序、系統(tǒng)級別的設(shè)備驅(qū)動消息和他們的任意組合。需要注意的是,如果dwFlags參數(shù)是BSF_QUERY并且至少一個接收者返回了BROADCAST_QUERY_DENY,則返回值為0,如果沒有指定BSF_QUERY,則函數(shù)將消息發(fā)送給所有接收者,并且忽略其返回值。

消息的接收
 消息的接收主要有3個函數(shù):GetMessage、PeekMessage、WaitMessage。
  GetMessage原型如下:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax);該函數(shù)用來獲取與hWnd參數(shù)所指定的窗口相關(guān)的且wMsgFilterMin和wMsgFilterMax參數(shù)所給出的消息值范圍內(nèi)的消息。需要注意的是,如果hWnd為NULL,則GetMessage獲取屬于調(diào)用該函數(shù)應(yīng)用程序的任一窗口的消息,如果 wMsgFilterMin和wMsgFilterMax都是0,則GetMessage就返回所有可得到的消息。函數(shù)獲取之后將刪除消息隊列中的除 WM_PAINT消息之外的其他消息,至于WM_PAINT則只有在其處理之后才被刪除。
   PeekMessage原型如下:BOOL PeekMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax,UINT wRemoveMsg);該函數(shù)用于查看應(yīng)用程序的消息隊列,如果其中有消息就將其放入lpMsg所指的結(jié)構(gòu)中,不過,與GetMessage不同的是,PeekMessage函數(shù)不會等到有消息放入隊列時才返回。同樣,如果hWnd為NULL,則PeekMessage獲取屬于調(diào)用該函數(shù)應(yīng)用程序的任一窗口的消息,如果hWnd=-1,那么函數(shù)只返回把hWnd參數(shù)為NULL的PostAppMessage函數(shù)送去的消息。如果 wMsgFilterMin和wMsgFilterMax都是0,則PeekMessage就返回所有可得到的消息。函數(shù)獲取之后將視最后一個參數(shù)來決定是否刪除消息隊列中的除 WM_PAINT消息之外的其他消息,至于WM_PAINT則只有在其處理之后才被刪除。
   WaitMessage原型如下:BOOL WaitMessage();當(dāng)一個應(yīng)用程序無事可做時,該函數(shù)就將控制權(quán)交給另外的應(yīng)用程序,同時將該應(yīng)用程序掛起,直到一個新的消息被放入應(yīng)用程序的隊列之中才返回。

消息的處理
  接下來我們談一下消息的處理,首先我們來看一下VC中的消息泵:

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

{

???????if(!TranslateAccelerator(msg.hWnd,?hAccelTable,?&msg))

??????{?

????????????TranslateMessage(&msg);

????????????DispatchMessage(&msg);

???????}

}

?? 首先,GetMessage從進(jìn)程的主線程的消息隊列中獲取一個消息并將它復(fù)制到MSG結(jié)構(gòu),如果隊列中沒有消息,則GetMessage函數(shù)將等待一個消息的到來以后才返回。如果你將一個窗口句柄作為第二個參數(shù)傳入GetMessage,那么只有指定窗口的的消息可以從隊列中獲得。GetMessage也可以從消息隊列中過濾消息只接受消息隊列中落在范圍內(nèi)的消息。這時候就要利用GetMessage/PeekMessage指定一個消息過濾器。這個過濾器是一個消息標(biāo)識符的范圍或者是一個窗體句柄,或者兩者同時指定。當(dāng)應(yīng)用程序要查找一個后入消息隊列的消息是很有用。WM_KEYFIRST 和 WM_KEYLAST 常量用于接受所有的鍵盤消息。 WM_MOUSEFIRST 和 WM_MOUSELAST 常量用于接受所有的鼠標(biāo)消息。?
 然后TranslateAccelerator判斷該消息是不是一個按鍵消息并且是一個加速鍵消息,如果是,則該函數(shù)將把幾個按鍵消息轉(zhuǎn)換成一個加速鍵消息傳遞給窗口的回調(diào)函數(shù)。處理了加速鍵之后,函數(shù)TranslateMessage將把兩個按鍵消息WM_KEYDOWN和WM_KEYUP轉(zhuǎn)換成一個 WM_CHAR,不過需要注意的是,消息WM_KEYDOWN,WM_KEYUP仍然將傳遞給窗口的回調(diào)函數(shù)。?????
 處理完之后,DispatchMessage函數(shù)將把此消息發(fā)送給該消息指定的窗口中已設(shè)定的回調(diào)函數(shù)。如果消息是WM_QUIT,則 GetMessage返回0,從而退出循環(huán)體。應(yīng)用程序可以使用PostQuitMessage來結(jié)束自己的消息循環(huán)。通常在主窗口的 WM_DESTROY消息中調(diào)用。
 下面我們舉一個常見的小例子來說明這個消息泵的運用:

if?(::PeekMessage(&msg,?m_hWnd,?WM_KEYFIRST,WM_KEYLAST,?PM_REMOVE))

{

??????????if?(msg.message?==?WM_KEYDOWN?&&?msg.wParam?==?VK_ESCAPE)...

}


? 這里我們接受所有的鍵盤消息,所以就用WM_KEYFIRST 和 WM_KEYLAST作為參數(shù)。最后一個參數(shù)可以是PM_NOREMOVE 或者 PM_REMOVE,表示消息信息是否應(yīng)該從消息隊列中刪除。?????????????????
???所以這段小代碼就是判斷是否按下了Esc鍵,如果是就進(jìn)行處理。

窗口過程
 窗口過程是一個用于處理所有發(fā)送到這個窗口的消息的函數(shù)。任何一個窗口類都有一個窗口過程。同一個類的窗口使用同樣的窗口過程來響應(yīng)消息。系統(tǒng)發(fā)送消息給窗口過程將消息數(shù)據(jù)作為參數(shù)傳遞給他,消息到來之后,按照消息類型排序進(jìn)行處理,其中的參數(shù)則用來區(qū)分不同的消息,窗口過程使用參數(shù)產(chǎn)生合適行為。
 一個窗口過程不經(jīng)常忽略消息,如果他不處理,它會將消息傳回到執(zhí)行默認(rèn)的處理。窗口過程通過調(diào)用DefWindowProc來做這個處理。窗口過程必須 return一個值作為它的消息處理結(jié)果。大多數(shù)窗口只處理小部分消息和將其他的通過DefWindowProc傳遞給系統(tǒng)做默認(rèn)的處理。窗口過程被所有屬于同一個類的窗口共享,能為不同的窗口處理消息。下面我們來看一下具體的實例:

LRESULT?CALLBACK?WndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)

{

?int?wmId,?wmEvent;

?PAINTSTRUCT?ps;

?HDC?hdc;

?TCHAR?szHello[MAX_LOADSTRING];

?LoadString(hInst,?IDS_HELLO,?szHello,?MAX_LOADSTRING);

?switch?(message)?

?{

??case?WM_COMMAND:

?????????wmId????=?LOWORD(wParam);?

?????????wmEvent?=?HIWORD(wParam);?

?????????//?Parse?the?menu?selections:

?????????switch?(wmId)

?????????{

??????????case?IDM_ABOUT:

?????????????DialogBox(hInst,?(LPCTSTR)IDD_ABOUTBOX,?hWnd,?(DLGPROC)About);

?????????????break;

??????????case?IDM_EXIT:

?????????????DestroyWindow(hWnd);

?????????????break;

??????????default:

?????????????return?DefWindowProc(hWnd,?message,?wParam,?lParam);

?????????}

???break;
?

??case?WM_PAINT:

?????????hdc?=?BeginPaint(hWnd,?&ps);

?????????//?TODO:?Add?any?drawing?code?here

?????????RECT?rt;

?????????GetClientRect(hWnd,?&rt);

?????????DrawText(hdc,?szHello,?strlen(szHello),?&rt,?DT_CENTER);

?????????EndPaint(hWnd,?&ps);

?????????break;
?

??case?WM_DESTROY:

?????????PostQuitMessage(0);

?????????break;

??default:

?????????return?DefWindowProc(hWnd,?message,?wParam,?lParam);

??}

??return?0;

}

消息分流器
  通常的窗口過程是通過一個switch語句來實現(xiàn)的,這個事情很煩,有沒有更簡便的方法呢?有,那就是消息分流器,利用消息分流器,我們可以把switch語句分成更小的函數(shù),每一個消息都對應(yīng)一個小函數(shù),這樣做的好處就是對消息更容易管理。
  之所以被稱為消息分流器,就是因為它可以對任何消息進(jìn)行分流。下面我們做一個函數(shù)就很清楚了:

int?id,HWND?hWndCtl,UINT?codeNotify)

{

??????switch(id)

??????{

?????case?ID_A:

??????????????????if(codeNotify==EN_CHANGE)

??????????????????break;

?????case?ID_B:

??????????????????if(codeNotify==BN_CLICKED)

??????????????????break;

?????????????

.

???????}

}


然后我們修改一下窗口過程:

LRESULT?CALLBACK?WndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)

{

???????switch(message)

??????{

?????????????HANDLE_MSG(hWnd,WM_COMMAND,MsgCracker);

?????????????HANDLE_MSG(hWnd,WM_DESTROY,MsgCracker);

???????????default:

????????????????????return?DefWindowProc(hWnd,?message,?wParam,?lParam);

?? }

??return?0;

}


在WindowsX.h中定義了如下的HANDLE_MSG宏:

   #define?HANDLE_MSG(hwnd,msg,fn)?\

?????????????switch(msg):?return?HANDLE_##msg((hwnd),(wParam),(lParam),(fn));


實際上,HANDLE_WM_XXXX都是宏,例如:HANDLE_MSG(hWnd,WM_COMMAND,MsgCracker);將被轉(zhuǎn)換成如下定義:

   #define?HANDLE_WM_COMMAND(hwnd,wParam,lParam,fn)\?

?????????????((fn)((hwnd),(int)(LOWORD(wParam)),(HWND)(lParam),(UINT)HIWORD(wParam)),0L);


好了,事情到了這一步,應(yīng)該一切都明朗了。
不過,我們發(fā)現(xiàn)在windowsx.h里面還有一個宏:FORWARD_WM_XXXX,我們還是那WM_COMMAND為例,進(jìn)行分析:

   #define?FORWARD_WM_COMMAND(hwnd,?id,?hwndCtl,?codeNotify,?fn)?\

?????(void)(fn)((hwnd),?WM_COMMAND,?MAKEWPARAM((UINT)(id),(UINT)(codeNotify)),?(LPARAM)(HWND)(hwndCtl))


所以實際上,FORWARD_WM_XXXX將消息參數(shù)進(jìn)行了重新構(gòu)造,生成了wParam && lParam,然后調(diào)用了我們定義的函數(shù)。

前面,我們分析了消息的基本理論和基本的函數(shù)及用法,接下來,我們將進(jìn)一步討論消息傳遞在MFC中的實現(xiàn)。

MFC消息的處理實現(xiàn)方式
  初看MFC中的各種消息,以及在頭腦中根深蒂固的C++的影響,我們可能很自然的就會想到利用C++的三大特性之一:虛擬機(jī)制來實現(xiàn)消息的傳遞,但是經(jīng)過分析,我們看到事情并不是想我們想象的那樣,在MFC中消息是通過一種所謂的消息映射機(jī)制來處理的。
  為什么呢?在潘愛民老師翻譯的《Visual C++技術(shù)內(nèi)幕》(第4版)中給出了詳細(xì)的原因說明,我再簡要的說一遍。在CWnd類中大約有110個消息,還有其它的MFC的類呢,算起來消息太多了,在C++中對程序中用到的每一個派生類都要有一個vtable,每一個虛函數(shù)在vtable中都要占用一個4字節(jié)大小的入口地址,這樣一來,對于每個特定類型的窗口或控件,應(yīng)用程序都需要一個440KB大小的表來支持虛擬消息控件函數(shù)。
  如果說上面的窗口或控件可以勉強(qiáng)實現(xiàn)的話,那么對于菜單命令消息及按鈕命令消息呢?因為不同的應(yīng)用程序有不同的菜單和按鈕,我們怎么處理呢?在MFC 庫的這種消息映射系統(tǒng)就避免了使用大的vtable,并且能夠在處理常規(guī)Windows消息的同時處理各種各樣的應(yīng)用程序的命令消息。
  說白了,MFC中的消息機(jī)制其實質(zhì)是一張巨大的消息及其處理函數(shù)的一一對應(yīng)表,然后加上分析處理這張表的應(yīng)用框架內(nèi)部的一些程序代碼.這樣就可以避免在SDK編程中用到的繁瑣的CASE語句。

MFC的消息映射的基類CCmdTarget
  如果你想讓你的控件能夠進(jìn)行消息映射,就必須從CCmdTarget類中派生。CCmdTarget類是MFC處理命令消息的基礎(chǔ)、核心。MFC為該類設(shè)計了許多成員函數(shù)和一些成員數(shù)據(jù),基本上是為了解決消息映射問題的,所有響應(yīng)消息或事件的類都從它派生,例如:應(yīng)用程序類、框架類、文檔類、視圖類和各種各樣的控件類等等,還有很多。
不過這個類里面有2個函數(shù)對消息映射非常重要,一個是靜態(tài)成員函數(shù)DispatchCmdMsg,另一個是虛函數(shù)OnCmdMsg。
DispatchCmdMsg專門供MFC內(nèi)部使用,用來分發(fā)Windows消息。OnCmdMsg用來傳遞和發(fā)送消息、更新用戶界面對象的狀態(tài)。
CCmdTarget對OnCmdMsg的默認(rèn)實現(xiàn):在當(dāng)前命令目標(biāo)(this所指)的類和基類的消息映射數(shù)組里搜索指定命令消息的消息處理函數(shù)。
  這里使用虛擬函數(shù)GetMessageMap得到命令目標(biāo)類的消息映射入口數(shù)組_messageEntries,然后在數(shù)組里匹配命令消息ID相同、控制通知代碼也相同的消息映射條目。其中GetMessageMap是虛擬函數(shù),所以可以確認(rèn)當(dāng)前命令目標(biāo)的確切類。
如果找到了一個匹配的消息映射條目,則使用DispachCmdMsg調(diào)用這個處理函數(shù);
如果沒有找到,則使用_GetBaseMessageMap得到基類的消息映射數(shù)組,查找,直到找到或搜尋了所有的基類(到CCmdTarget)為止;
如果最后沒有找到,則返回FASLE。
  每個從CCmdTarget派生的命令目標(biāo)類都可以覆蓋OnCmdMsg,利用它來確定是否可以處理某條命令,如果不能,就通過調(diào)用下一命令目標(biāo)的 OnCmdMsg,把該命令送給下一個命令目標(biāo)處理。通常,派生類覆蓋OnCmdMsg時,要調(diào)用基類的被覆蓋的OnCmdMsg。
  在MFC框架中,一些MFC命令目標(biāo)類覆蓋了OnCmdMsg,如框架窗口類覆蓋了該函數(shù),實現(xiàn)了MFC的標(biāo)準(zhǔn)命令消息發(fā)送路徑。必要的話,應(yīng)用程序也可以覆蓋OnCmdMsg,改變一個或多個類中的發(fā)送規(guī)定,實現(xiàn)與標(biāo)準(zhǔn)框架發(fā)送規(guī)定不同的發(fā)送路徑。例如,在以下情況可以作這樣的處理:在要打斷發(fā)送順序的類中把命令傳給一個非MFC默認(rèn)對象;在新的非默認(rèn)對象中或在可能要傳出命令的命令目標(biāo)中。

消息映射的內(nèi)容
??? 通過ClassWizard為我們生成的代碼,我們可以看到,消息映射基本上分為2大部分:
??? 在頭文件(.h)中有一個宏DECLARE_MESSAGE_MAP(),他被放在了類的末尾,是一個public屬性的;與之對應(yīng)的是在實現(xiàn)部分(.cpp)增加了一章消息映射表,內(nèi)容如下:
??? BEGIN_MESSAGE_MAP(當(dāng)前類, 當(dāng)前類的基類)
?????? //{{AFX_MSG_MAP(CMainFrame)
???????? 消息的入口項
?????? //}}AFX_MSG_MAP
?? END_MESSAGE_MAP()
?? 但是僅是這兩項還遠(yuǎn)不足以完成一條消息,要是一個消息工作,必須有以下3個部分去協(xié)作:
1.在類的定義中加入相應(yīng)的函數(shù)聲明;
2.在類的消息映射表中加入相應(yīng)的消息映射入口項;
3.在類的實現(xiàn)中加入相應(yīng)的函數(shù)體;

消息的添加
?? 有了上面的這些只是作為基礎(chǔ),我們接下來就做我們最熟悉、最常用的工作:添加消息。MFC消息的添加主要有2種方法:自動/手動,我們就以這2種方法為例,說一下如何添加消息。
???1、利用Class Wizard實現(xiàn)自動添加
????? 在菜單中選擇View-->Class Wizard,也可以用單擊鼠標(biāo)右鍵,選擇Class Wizard,同樣可以激活Class Wizard。選擇Message Map標(biāo)簽,從Class name組合框中選取我們想要添加消息的類。在Object IDs列表框中,選取類的名稱。此時, Messages列表框顯示該類的大多數(shù)(若不是全部的話)可重載成員函數(shù)和窗口消息。類重載顯示在列表的上部,以實際虛構(gòu)成員函數(shù)的大小寫字母來表示。其他為窗口消息,以大寫字母出現(xiàn),描述了實際窗口所能響應(yīng)的消息ID。選中我們向添加的消息,單擊Add Function按鈕,Class Wizard自動將該消息添加進(jìn)來。
????? 有時候,我們想要添加的消息本應(yīng)該出現(xiàn)在Message列表中,可是就是找不到,怎么辦?不要著急,我們可以利用Class Wizard上Class Info標(biāo)簽以擴(kuò)展消息列表。在該頁中,找到Message Filter組合框,通過它可以改變首頁中Messages列表框中的選項。這里,我們選擇Window,從而顯示所有的窗口消息,一把情況下,你想要添加的消息就可以在Message列表框中出現(xiàn)了,如果還沒有,那就接著往下看:)

???2、手動地添加消息處理函數(shù)
??? 如果在Messages列表框中仍然看不到我們想要的消息,那么該消息可能是被系統(tǒng)忽略掉或者是你自己創(chuàng)建的,在這種情況下,就必須自己手工添加。根據(jù)我們前面所說的消息工作的3個部件,我們一一進(jìn)行處理:
????? 1) 在類的. h文件中添加處理函數(shù)的聲明,緊接在//}}AFX_MSG行之后加入聲明,注意:一定要以afx_msg開頭。
???? 通常,添加處理函數(shù)聲明的最好的地方是源代碼中Class Wizard維護(hù)的表下面,但是在它標(biāo)記其領(lǐng)域的{{}}括弧外面。這些括弧中的任何東西都將會被Class Wizard銷毀。
????? 2) 接著,在用戶類的.cpp文件中找到//}}AFX_MSG_MAP行,緊接在它之后加入消息入口項。同樣,也是放在{ {} }的外面
????? 3) 最后,在該文件中添加消息處理函數(shù)的實體。

總結(jié)

以上是生活随笔為你收集整理的Windows消息机制详解-6的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产精品99视频 | 国产精品免费观看网站 | 狠狠插天天干 | 蜜臀av一区二区 | 国产日韩在线视频 | 亚洲久草在线视频 | 成人黄色电影在线播放 | 久精品视频免费观看2 | 精品一区二区在线观看 | 玖玖精品视频 | 人人舔人人舔 | 亚洲狠狠干 | 天天曰天天曰 | 亚洲涩涩一区 | 婷婷色综合 | 伊人中文在线 | 97国产小视频 | 激情婷婷在线观看 | 久草久草视频 | 欧美亚洲国产精品久久高清浪潮 | 最近中文字幕大全中文字幕免费 | 亚洲一级电影在线观看 | 97超碰人人澡 | 亚洲视频axxx | 久久不色| 日本公妇在线观看高清 | 日韩欧美视频免费看 | 亚洲黄色免费在线看 | 国产在线一线 | 国产视频亚洲 | 99福利片 | 五月天丁香亚洲 | 在线观看国产www | 亚洲成人国产 | 国产专区一 | 久久免费高清 | 永久免费精品视频网站 | 欧美精品久久久久久久久久久 | 中文字幕丝袜制服 | 91九色porny蝌蚪视频 | 国产精品短视频 | 国产一级片免费播放 | 涩五月婷婷 | 婷婷伊人五月 | 开心激情婷婷 | 夜夜干夜夜 | 青草视频在线播放 | 人人干在线 | 天天操天天爱天天爽 | 亚洲精品国产自产拍在线观看 | 日日干干| 久久久久国产精品免费免费搜索 | 亚洲国产精品久久久久久 | 伊人网综合在线观看 | 美女视频黄,久久 | 午夜精品久久久久久久久久 | 亚洲视频网站在线观看 | 天天看天天干 | 精品久久毛片 | 国产在线观看,日本 | 欧美一区二区精品在线 | 国产精品普通话 | 成人动图 | 波多野结衣在线视频一区 | 夜夜视频 | 日韩一级黄色大片 | 99精品久久精品一区二区 | 亚洲激情在线视频 | 人人射人人爱 | 在线电影中文字幕 | 久久狠狠一本精品综合网 | 欧美一级免费片 | 中文字幕亚洲欧美日韩 | 香蕉视频在线免费看 | 最新国产在线视频 | 涩av在线| 欧美精品乱码久久久久久 | 亚洲成成品网站 | 精品欧美乱码久久久久久 | 日日爱影视 | 亚洲有 在线 | 99精品国产aⅴ | 亚洲日韩中文字幕 | 国产香蕉在线 | 国产免费视频一区二区裸体 | 成人啪啪18免费游戏链接 | 91天堂素人约啪 | 免费观看完整版无人区 | 5月丁香婷婷综合 | 97人人射| 国产99久久精品一区二区300 | 亚洲免费观看在线视频 | 中文字幕在线一区二区三区 | 青草视频免费观看 | 久久综合久色欧美综合狠狠 | 国产精品久久麻豆 | 亚洲专区一二三 | 久久久久欠精品国产毛片国产毛生 | 成人av.com | 在线视频亚洲 | av成人免费在线观看 | 天天玩夜夜操 | 婷婷五月色综合 | 三级大片网站 | 人人插人人草 | 国产在线毛片 | 在线免费观看麻豆 | 久草网视频在线观看 | 欧美日韩超碰 | 日韩天天综合 | 国产精品成人免费 | 欧美人zozo | 日韩精选在线 | 婷婷久久婷婷 | 国产精品一区二区三区99 | 国产91在线观 | 国产破处视频在线播放 | 久久久久福利视频 | 精品久久久久国产免费第一页 | 狠狠色丁香婷婷综合最新地址 | 亚洲乱码在线 | 精品在线视频观看 | 国产拍揄自揄精品视频麻豆 | 九九免费在线观看 | 黄色小视频在线观看免费 | 国产亚洲永久域名 | 成 人 黄 色 视频 免费观看 | www视频在线观看 | 亚洲精品免费播放 | 国产精品久久婷婷六月丁香 | 亚州精品视频 | 精品久久久影院 | 日韩日韩日韩日韩 | 久久精品视频免费 | 久久视频免费观看 | 色www免费视频 | av超碰免费在线 | 国产在线探花 | av成人免费 | 中文字幕在线播放视频 | 99国产在线观看 | 在线观看视频你懂得 | 久久网站最新地址 | 婷婷 综合 色 | 国产黄av| 国产精品电影一区 | 91av手机在线观看 | 精品一区二区影视 | 91桃花视频 | 国产18精品乱码免费看 | a一片一级 | 日韩视频一二三区 | 久久香蕉国产精品麻豆粉嫩av | 在线国产日本 | 你操综合 | 三级av免费观看 | 色94色欧美 | 亚洲mv大片欧洲mv大片免费 | 成年人电影毛片 | 亚洲va韩国va欧美va精四季 | 久草香蕉在线视频 | 91精品国产自产91精品 | 九九热久久免费视频 | 色www精品视频在线观看 | 日本精品一区二区在线观看 | 中文字幕一区二区三区四区在线视频 | 国产午夜三级一区二区三桃花影视 | 麻豆91在线播放 | 久久免费精彩视频 | av一级一片 | 免费视频18| 国产成人一区二区在线观看 | 349k.cc看片app| 欧美性脚交 | 国产九九精品视频 | 欧美爽爽爽| 丁香午夜 | 久久久国产精品网站 | 午夜成人免费影院 | 99热在线观看 | 男女激情麻豆 | 久久精品中文字幕一区二区三区 | 丰满少妇高潮在线观看 | 精品国内自产拍在线观看视频 | 国产麻豆传媒 | 黄色一级在线免费观看 | 成人午夜免费剧场 | 视频国产一区二区三区 | 国产精品专区在线观看 | 欧美a级一区二区 | 欧美巨大| 激情网色 | 国产专区在线看 | 成人免费网站视频 | 成人性生交大片免费看中文网站 | 视频91在线 | 久久激情五月婷婷 | 亚洲久草在线视频 | 欧美午夜性| 亚洲国产精品推荐 | 国产精品久久电影网 | 国产精品男女视频 | 国产69精品久久久久9999apgf | 成人午夜网址 | 国产精品免费麻豆入口 | 日韩三区在线 | 在线视频区| 中文字幕一区二 | 日韩精品一区二区在线观看 | 99精品视频一区二区 | 岛国av在线 | 日日射天天射 | 综合色天天 | 日本在线免费看 | 精品福利在线观看 | 高清免费在线视频 | 亚洲国产色一区 | 麻豆视传媒官网免费观看 | 黄色在线观看污 | 日韩在线一二三区 | 久久久久麻豆v国产 | 91成人在线观看喷潮 | 成人四虎 | 中文字幕中文字幕中文字幕 | 永久免费观看视频 | 欧美激情视频一区 | 精品色综合 | 免费麻豆 | 99一级片| 色婷婷激情电影 | 国产99久久久精品 | 国产老太婆免费交性大片 | 久久久午夜精品理论片中文字幕 | 中字幕视频在线永久在线观看免费 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产一区欧美一区 | 日本久久免费电影 | www.国产在线观看 | 精品国产99国产精品 | 久久精品中文字幕少妇 | 一级黄色在线免费观看 | 日韩视频一区二区三区在线播放免费观看 | 欧美人zozo| 免费久久久久久 | 国产精品久久久久久久久费观看 | 黄色网在线播放 | 久久蜜臀一区二区三区av | 国产一区在线免费观看视频 | 91精品伦理| 99 国产精品| 国产精品综合久久久 | 一级成人免费视频 | 国产精品免费麻豆入口 | 国产亚洲婷婷免费 | 免费亚洲精品 | 特级西西人体444是什么意思 | 99久久精品国产一区二区成人 | 日韩城人在线 | 久久精品国产一区二区电影 | 91麻豆看国产在线紧急地址 | 中文字幕精品三区 | 在线观看岛国片 | 啪啪av在线| 国产视频日韩视频欧美视频 | 99热超碰在线 | 久久精品专区 | www在线观看视频 | 亚洲免费黄色 | 欧美一级免费黄色片 | 天堂av观看 | 99这里都是精品 | 久久国内视频 | 久久免费福利 | 日本中文字幕在线观看 | 精品中文字幕视频 | 日韩电影在线视频 | 69欧美视频| 97av视频 | 国产免费观看视频 | 日韩视频免费播放 | 91麻豆精品国产91久久久久久久久 | 91麻豆产精品久久久久久 | 狠狠久久婷婷 | 91亚洲国产成人 | 久久av影视 | 国产天天综合 | 美女很黄免费网站 | 免费福利在线观看 | 国产一区二区三区免费视频 | 亚洲永久精品在线 | 一区二区不卡视频在线观看 | 91精品一区在线观看 | 亚洲视频久久久 | 国产精品久免费的黄网站 | 精品福利av | 成人免费大片黄在线播放 | 麻豆94tv免费版 | 国产日韩视频在线观看 | 亚洲欧美国产精品18p | 久久综合五月婷婷 | 欧美三级高清 | 国产美腿白丝袜足在线av | 在线观看va| 日韩免费成人 | 国产精品av免费在线观看 | 日韩高清在线一区二区三区 | 丁香婷婷久久 | 午夜视频免费在线观看 | 一区二区三区在线免费播放 | 久久刺激视频 | 麻豆视频成人 | 国产精品1000 | 亚洲精品在线资源 | 日韩电影一区二区在线 | 亚欧日韩成人h片 | 天天天天干 | www.com久久久| 四虎在线视频免费观看 | www色com | 久久精品一二三区白丝高潮 | 久热免费在线 | av中文在线观看 | 亚洲一区二区麻豆 | 天天操月月操 | 久久免费黄色 | 91黄视频在线观看 | 在线免费色视频 | 久久99亚洲精品久久久久 | 日韩中午字幕 | 欧美日韩高清在线观看 | 日日干夜夜干 | 亚洲va欧美va | 免费黄色特级片 | 久久9999久久免费精品国产 | 亚洲综合在线发布 | 人人干在线 | 国产永久免费观看 | 久久爱影视i | 91精品国产自产91精品 | 日韩在线无| 特黄色大片 | 99视频在线观看一区三区 | 精品国产一区二区三区噜噜噜 | 久久一级电影 | 婷婷丁香狠狠爱 | 日b视频国产 | 91一区一区三区 | 99久久精品免费看国产四区 | 在线观看av中文字幕 | 日韩在线视频播放 | 99在线看 | 三级黄色网址 | www.久久婷婷 | 国产精品成人一区 | 在线一二三四区 | 在线日韩中文字幕 | 国产91成人在在线播放 | 午夜av片 | 欧美成人播放 | 婷婷色吧| 亚洲精品国产第一综合99久久 | 色综合激情久久 | 午夜在线国产 | 久久国精品 | 国产精品久久久久久久久久久杏吧 | 午夜精品久久久久久久爽 | 在线观看国产中文字幕 | 91综合视频在线观看 | 日韩午夜大片 | 色橹橹欧美在线观看视频高清 | 免费看的黄色的网站 | 2022国产精品视频 | 99国产成+人+综合+亚洲 欧美 | 久久精品波多野结衣 | 超碰97久久| 日韩高清免费电影 | 丁香花五月 | 欧美一区三区四区 | 欧美精品久久久久久久免费 | 久草在线免费在线观看 | 午夜丰满寂寞少妇精品 | 免费99精品国产自在在线 | 亚洲综合色网站 | 免费精品国产va自在自线 | 久草网视频 | 久久影院中文字幕 | 九九在线高清精品视频 | 亚洲免费在线观看视频 | 狠狠躁夜夜躁人人爽视频 | 天天se天天cao天天干 | 亚洲视频456 | 欧美一级日韩三级 | 国产精品久久久久亚洲影视 | 啪嗒啪嗒免费观看完整版 | 久久ww| 深夜免费福利在线 | 人人超碰在线 | 欧美一二三专区 | 在线免费试看 | 美女久久久久久久久久 | 精品国产一区二区三区蜜臀 | 四虎在线免费视频 | 国产美女视频免费观看的网站 | 国产一级黄色免费看 | 日韩视频免费在线观看 | 开心激情久久 | 看污网站 | 青青网视频 | 久草在线资源观看 | 国产精品免费不 | 人人插人人看 | 色91av | 日韩欧美在线第一页 | 久久久国产精品亚洲一区 | 亚洲在线网址 | 国产精品久久久一区二区 | 国产成人精品免费在线观看 | av电影一区二区三区 | 国产婷婷vvvv激情久 | 国产丝袜高跟 | 日韩中文免费视频 | 精品在线观看一区二区三区 | 麻豆国产在线播放 | 欧美一区二区精美视频 | 久久男人中文字幕资源站 | 日批网站在线观看 | 五月婷婷一区二区三区 | 一级黄色a视频 | 五月婷婷丁香网 | 99热国产精品 | 亚洲免费色 | 国产美女主播精品一区二区三区 | 久久国产热 | 在线观看播放av | 91麻豆产精品久久久久久 | 国产精品综合久久久久久 | 综合久久网 | 亚洲在线视频网站 | 成年在线观看 | 在线观看你懂的网址 | 欧美精品一区二区在线播放 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 午夜免费福利片 | 亚洲精品国产精品国自产观看 | 国产色网站 | 欧美日韩精品在线观看视频 | 婷婷网在线 | 国产美女精品视频免费观看 | 色播亚洲婷婷 | 91精品视频免费看 | 五月激情亚洲 | 精品久久久久_ | 人人狠狠综合久久亚洲婷 | 欧美在线视频二区 | 亚洲国产高清在线观看视频 | 国产精品久久在线观看 | 激情视频一区 | 天天操狠狠干 | 久久午夜色播影院免费高清 | 欧美一级免费高清 | 91完整视频 | 伊人中文字幕在线 | 五月开心六月婷婷 | 国产精品毛片网 | 国产婷婷一区二区 | 亚洲,播放 | 九九一级片 | 三级黄色大片在线观看 | 韩国一区二区av | 免费在线激情电影 | 精久久久久 | www.夜夜爱 | 欧美日韩精品影院 | 在线一二区 | 97超碰在线免费观看 | 亚洲黄色影院 | 国产又粗又长又硬免费视频 | 欧美日韩视频在线播放 | 九九在线视频 | 久久久久久中文字幕 | 亚洲精品午夜国产va久久成人 | 精品视频资源站 | 久要激情网 | 亚洲影视九九影院在线观看 | 天堂入口网站 | 亚洲欧美在线视频免费 | 日韩在线视频网址 | 成人黄色电影免费观看 | 日韩av手机在线观看 | 亚洲综合激情 | www.久草.com | 在线看中文字幕 | 国产做aⅴ在线视频播放 | 色永久免费视频 | 在线免费看黄色 | 国产精品18毛片一区二区 | 国产婷婷vvvv激情久 | 国产精品视频免费 | av不卡在线看| 91热爆在线观看 | 国产一二三四在线观看视频 | 五月激情六月丁香 | 国产精品视频在线看 | 中文字幕在线日本 | 人人干天天干 | 亚洲精品综合在线观看 | 91在线小视频 | 国产精品久久久久av福利动漫 | 亚洲欧洲在线视频 | 中文字幕中文中文字幕 | 久久视频在线视频 | 高清美女视频 | 精品欧美乱码久久久久久 | 人人看人人 | 日产乱码一二三区别免费 | 毛片网站观看 | 日韩综合一区二区三区 | 亚洲精品在线免费看 | 日日夜夜噜 | 日韩黄色软件 | 99精品视频免费 | 有码中文在线 | 亚洲成人精品久久久 | 99久久精品日本一区二区免费 | 黄色大片视频网站 | 国产精品日韩在线 | 国产一级片久久 | 一级片视频免费观看 | 久久精品草| 亚洲国产精品久久久久婷婷884 | 欧美一区二区伦理片 | 日韩精品高清不卡 | 日韩精品一区二区在线观看 | 在线观看免费成人 | 亚洲精品456在线播放 | 婷婷在线观看视频 | 国内精品久久久久久久97牛牛 | 人人爽人人澡 | 在线91av| 国产一区二区三区免费在线 | 久久久久久久久久网 | 国产精品久久 | 精品久久久久久久久中文字幕 | 久草视频在线资源站 | 国产精品一区二区久久 | 亚洲女人av | 最新av电影网站 | www成人精品 | 免费观看国产精品 | 国产一二区免费视频 | 国产精品不卡在线播放 | 成人性生爱a∨ | 免费观看国产成人 | 国产精品美女久久久久久 | 久久夜靖品 | 国产偷国产偷亚洲清高 | 国产在线精品视频 | 国产在线观看国语版免费 | 中文字幕视频观看 | 国产精品成人久久久久久久 | 麻豆小视频在线观看 | 国外成人在线视频网站 | 九九久久国产精品 | 奇米7777狠狠狠琪琪视频 | 欧美一级专区免费大片 | 国产精品九九九九九九 | 伊人在线视频 | 97高清视频 | 色资源网在线观看 | 一级欧美一级日韩 | 久久久黄视频 | 午夜精品久久久久久 | 亚洲aⅴ乱码精品成人区 | 可以免费观看的av片 | 国产午夜三级一区二区三桃花影视 | 日本一区二区三区免费观看 | 丁香五香天综合情 | 久久成人在线视频 | 久久99精品国产一区二区三区 | 在线激情网 | 九九视频热| 成人免费 在线播放 | av丝袜制服 | 99久视频 | 日韩av中文字幕在线免费观看 | 亚洲欧洲一区二区在线观看 | 在线精品一区二区 | 免费看污在线观看 | 久九视频 | 日韩专区av | 成人黄色短片 | 日日夜夜精品免费视频 | 亚洲综合国产精品 | 久久久精品国产一区二区电影四季 | 免费日韩视 | 国产成人久久av977小说 | 国产a视频免费观看 | 九九免费观看视频 | 在线小视频你懂的 | 在线国产中文字幕 | 丁香色天天 | 狠狠狠狠狠狠操 | 天天操天天爱天天干 | 欧美一二在线 | 国产精品九九九九九 | 精品在线视频播放 | 国产又粗又硬又爽的视频 | 丁香高清视频在线看看 | 国产精品三级视频 | 国产1区2区3区精品美女 | 91精品久久久久久久久久入口 | 日韩av午夜 | 久久五月婷婷丁香社区 | 成人在线免费视频 | 久99久在线视频 | av电影免费 | 一级性生活片 | 毛片网站免费在线观看 | 激情网站网址 | 日本公妇在线观看 | 国产一区二区播放 | 免费国产在线视频 | 日韩免费二区 | 中文字幕在线免费看 | 日韩激情第一页 | 国产综合精品一区二区三区 | 国产精品美女在线观看 | 欧美视频99| 三级av在线免费观看 | 97理论电影 | 精品国产日本 | 成人一级在线观看 | 亚洲综合精品视频 | 中文字幕高清 | 96亚洲精品久久久蜜桃 | 九七人人干 | 国产精品丝袜久久久久久久不卡 | 麻豆 videos | 又污又黄的网站 | av资源在线看 | 中文字幕在线播出 | 欧美日韩不卡一区二区三区 | 色.www| 免费a视频| 成人免费看视频 | 久久高清免费观看 | 五月激情片 | 欧美综合久久 | 午夜精品福利影院 | 少妇搡bbbb搡bbb搡aa | 人人藻人人澡人人爽 | 黄影院| 欧美另类69 | 久久久www | 96亚洲精品久久久蜜桃 | 免费成人短视频 | 日韩精品中文字幕有码 | 久久草网站 | 色综合www | 亚洲97在线 | 久久高清国产 | 成人在线免费看 | 99精品视频在线 | 精品欧美一区二区在线观看 | h视频日本| 天天操夜夜操 | 日韩中文字幕免费 | 国内精自线一二区永久 | 国产精品麻豆视频 | 日韩av电影中文字幕在线观看 | 国产精品久久久久久久99 | 色婷婷色 | 成人h在线观看 | 婷婷深爱网 | 久久久久一区二区三区四区 | 最近高清中文字幕在线国语5 | 97精品超碰一区二区三区 | 公开超碰在线 | 人人精久| 国产精品综合久久久久久 | a黄在线观看 | 婷婷色在线资源 | 国产成人精品久久亚洲高清不卡 | 91热视频 | 极品久久久久 | 国产一级片在线播放 | 经典三级一区 | 国产精品av在线免费观看 | 18女毛片 | 波多野结衣在线观看一区 | 亚洲国产大片 | 久久撸在线视频 | 黄色三级在线观看 | 热久久电影| 最近高清中文字幕 | 精品99在线观看 | 亚洲黄色三级 | 麻豆视频免费入口 | 手机成人在线 | 久久精品中文字幕一区二区三区 | 国产精品一区二区白浆 | 黄色.com| 国产69精品久久久久久 | 日本h在线播放 | 99热精品国产一区二区在线观看 | 日韩av中文字幕在线免费观看 | 国产精品成人在线观看 | 亚洲国产精品成人va在线观看 | 超级碰碰碰免费视频 | 99re亚洲国产精品 | 欧美精品一区二区免费 | 免费在线视频一区二区 | 精品99在线 | 91中文在线观看 | 日本乱视频 | 九九九视频精品 | 欧美疯狂性受xxxxx另类 | 女人18片毛片90分钟 | 丰满少妇一级片 | 国产精品久久久久久久久久久不卡 | 日韩免费视频线观看 | 亚洲v欧美v国产v在线观看 | 日日干影院 | 一区精品在线 | 精品一区精品二区 | 视频一区二区在线观看 | 涩涩爱夜夜爱 | 久久av一区二区三区亚洲 | 欧美一级电影 | 国产精品麻豆99久久久久久 | 国产字幕av | 一区二区中文字幕在线播放 | 精品国产99 | 精品久久久久久久久久久院品网 | 日一日干一干 | 国产在线观看 | 国产亚洲一区二区在线观看 | 天天操综合网站 | 一区二区三区免费网站 | 日韩一区正在播放 | 99色资源| www.五月天色 | 久操免费视频 | 狠狠色丁香久久婷婷综合丁香 | 国产中文欧美日韩在线 | 激情综合电影网 | 91中文字幕在线观看 | 日韩免费在线视频观看 | 一级黄色毛片 | 超碰在线99 | 黄色在线免费观看网址 | 91一区一区三区 | 国产精品国产三级国产aⅴ无密码 | 911国产精品| 日韩av成人在线观看 | 久久综合九色综合网站 | 国产美女精品在线 | 久久久久国产成人精品亚洲午夜 | 九九久久免费视频 | 国产欧美日韩一区 | 黄色在线观看免费网站 | 在线观看日韩一区 | av在线播放一区二区三区 | 亚洲国产精品成人av | 国产中年夫妇高潮精品视频 | 亚洲精品国产成人av在线 | 精品一区二区电影 | 天天射综合 | 亚洲欧美婷婷六月色综合 | 丁香婷婷激情 | 国产一区国产二区在线观看 | 久草资源在线 | 成人av网站在线播放 | 91亚瑟视频| 天天插日日插 | 在线观看中文字幕dvd播放 | 激情视频免费在线观看 | 91自拍视频在线观看 | 黄色www免费 | 亚洲精品国产免费 | 午夜在线免费视频 | 在线看小早川怜子av | 国产亚洲小视频 | 欧美一区二区精美视频 | 国产综合精品久久 | 精品久久久久久久久久久院品网 | 国产精品成人国产乱 | 在线观看国产高清视频 | 天天综合成人 | 99视频精品 | 99久免费精品视频在线观看 | 精品国产成人av | 免费毛片aaaaaa | 97精品国产91久久久久久久 | 99久久精品午夜一区二区小说 | 激情欧美一区二区免费视频 | 欧美国产精品一区二区 | 美女一区网站 | 日韩精品免费一区二区三区 | 精品国产一区二区三区免费 | 久久久久久国产精品999 | 久草网在线观看 | 亚洲精品综合一二三区在线观看 | 欧美精品一区二区免费 | 一级黄色电影网站 | 欧美精品亚洲精品 | 一区二区三区福利 | 天天碰天天操视频 | 国产99久久久精品 | 免费av大全| 91精品一区在线观看 | 久久96国产精品久久99软件 | 久久久久一区二区三区 | 丝袜美腿在线视频 | 欧美孕妇与黑人孕交 | 91传媒91久久久 | 成人久久亚洲 | 97精品一区二区三区 | 亚州欧美精品 | 黄色资源网站 | 九九视频这里只有精品 | 韩国av电影在线观看 | 色婷婷在线视频 | 91成人免费看 | 久草在线播放视频 | 婷婷黄色片 | 在线视频你懂 | 国产日本高清 | 成 人 黄 色 视频 免费观看 | 国产精品va在线 | 久久爱资源网 | 久久97超碰 | 午夜日b视频 | 久久伊人操 | 99精品国产免费久久久久久下载 | 久久国产成人午夜av影院潦草 | 色综合久久精品 | 亚洲一区 影院 | 国产高清99| 91麻豆精品国产91 | 日韩av高潮 | 国产一区二区三区四区在线 | 久久综合九色综合久99 | 黄色av电影在线 | 99久久久久久久久 | 亚洲年轻女教师毛茸茸 | 免费观看成年人视频 | 狠狠五月婷婷 | 日日爽夜夜爽 | 国产麻豆传媒 | 精品美女在线观看 | 在线免费看黄色 | 成人黄大片视频在线观看 | 国产精品99久久免费黑人 | 天天综合区 | 亚洲精品免费看 | 久久久精品一区二区 | 在线观看av片 | 蜜臀av免费一区二区三区 | 精品九九九九 | 亚洲综合视频在线 | 在线播放 日韩专区 | 国产亚洲精品久久久久久网站 | 午夜av在线播放 | 在线观看韩国av | 深爱激情婷婷网 | 久久人人爽人人爽人人片av软件 | 久久久国产日韩 | a天堂一码二码专区 | 4438全国亚洲精品观看视频 | 国产99中文字幕 | 国产一区二区在线免费播放 | 国产成人在线一区 | 国产一级视频在线免费观看 | 伊人中文网 | 日韩精品综合在线 | 手机在线小视频 | av超碰在线 | 免费久久99精品国产 | 亚洲精品乱码久久久久久蜜桃91 | 色爱区综合激月婷婷 | 99 精品 在线 | 久久伊人精品一区二区三区 | 超碰人人草人人 | 国产成人精品一区二区三区在线观看 | 亚洲成人第一区 | 久草视频免费观 | 国内久久久久 | 亚洲aⅴ在线观看 | 三级黄在线 | 天天舔夜夜操 | 亚洲综合在线播放 | 亚洲综合涩 | 一区二区精品在线 | 成人小视频免费在线观看 | 国产精品第72页 | 欧美 日韩 国产 中文字幕 | 欧美性生活久久 | 偷拍福利视频一区二区三区 | 2019中文在线观看 | 免费成人黄色av | 国产精品嫩草55av | 91麻豆精品国产91久久久无限制版 | 免费看毛片在线 | 干狠狠| 国产精品99在线播放 | 亚洲成人精品在线观看 | 国产视频在线观看一区二区 | 国产网红在线 | 国产综合久久 | 激情开心站 | av片子在线观看 | 韩国一区二区三区在线观看 | 黄色资源在线观看 | 在线观看中文字幕2021 | 日本少妇高清做爰视频 | 国产精品久久久久久久久毛片 | 日韩视频在线一区 | 久久99国产精品久久99 | 91麻豆精品国产91久久久久久 | 欧美日韩国产一区二区在线观看 | 国产高清黄色 | 国产精品免费在线观看视频 | 黄色软件大全网站 | 久久久69 | 国产高清久久久 | 久久亚洲专区 | 日韩久久久久久久久久久久 | 久草在线官网 | 中文字幕不卡在线88 | 国产精品欧美久久久久三级 | 91麻豆精品国产自产 | 久久精品激情 | 黄色一级大片在线免费看国产一 | 最近中文字幕免费观看 | 久久久久国产一区二区三区四区 | 超碰99在线 | 午夜在线免费观看 | 亚州成人av在线 | 爱干视频 | 免费久久99精品国产婷婷六月 | 黄色大全视频 | 在线观看视频在线观看 | 亚洲成人精品在线 | 久久久精品久久日韩一区综合 | 国产精久久久久久妇女av | 欧美最猛性xxxx| 高清国产午夜精品久久久久久 | 中文字幕色综合网 | 久久国产美女视频 | 天天插天天狠 | 三级黄色片子 | 一区二区在线电影 | 91人人爽久久涩噜噜噜 | 五月婷婷久草 | 日韩xxx视频 | 精品国产aⅴ麻豆 | 国产精品免费在线视频 | 久草网视频 | 亚洲欧洲精品一区二区精品久久久 | 久久久99精品免费观看app | 国产精品av在线免费观看 | 国产一级片免费观看 | 精品亚洲视频在线 | 成人久久综合 | 国产精品porn| 欧美男同视频网站 | 五月的婷婷 | 免费日韩 精品中文字幕视频在线 | 园产精品久久久久久久7电影 | 91精品国产成人 | 精品久久久99 | 国产精品久久久久久久久久久久午夜 | 国产精品久免费的黄网站 | 在线免费观看麻豆 | 国内精品久久久久久久久久久久 | 成人综合婷婷国产精品久久免费 | 成人黄色免费在线观看 | 婷婷中文字幕在线观看 | 三三级黄色片之日韩 | 免费韩国av | 国产不卡一二三区 | 免费看国产精品 | 青青草国产精品 | 一区二区三区四区五区在线视频 | 一区二区中文字幕在线观看 | 国产呻吟在线 | 日日操天天爽 | 精品国产一二区 | 国产精品视频专区 | 色综合久久综合 | 久久电影日韩 | 丁香在线 | 久久99亚洲网美利坚合众国 | 狠狠干综合网 | 国偷自产视频一区二区久 | 国产成人精品一区二区三区 | 久久伊人婷婷 |