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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC添加自定义消息及重写消息过程

發(fā)布時(shí)間:2023/12/18 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC添加自定义消息及重写消息过程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于MFC中無法通過類向?qū)碜远x消息,所以需要手動添加,主要過程如下:

本文基于vs2008下通過線程實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)更新的對話框運(yùn)用程序

1. 定義消息(Resource.h文件中):

由于很多新控件也會用到WM_USER消息,所以定義WM_USER+100或更高,避免沖突

#define WM_UPDATEDATA (WM_USER + 100)

?

2015-3-18 更新

1. 定義消息( stdafx.h文件中):

由于很多新控件也會用到WM_USER消息,所以定義WM_USER+100或更高,避免沖突,消息定義到stdafx.h文件中,Resource.h文件由系統(tǒng)維護(hù),經(jīng)常出現(xiàn)自定義的消息丟失。

#define WM_UPDATEDATA (WM_USER + 100)

2. 聲明消息響應(yīng)函數(shù):

放在消息映射部分,即DECLARE_MESSAGE_MAP()之前

// 實(shí)現(xiàn) protected:HICON m_hIcon;// 生成的消息映射函數(shù)virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);DECLARE_MESSAGE_MAP()

3. 實(shí)現(xiàn)消息響應(yīng)函數(shù):

由于在vs2008中未定義ON_MESSAGE_VOID,所以定義的消息響應(yīng)函數(shù)必須有返回值,即LRESULT;而消息參數(shù)是WPARAM wParam和LPARAM lParam

LRESULT CEditTestDlg::OnUpdateData(WPARAM wParam, LPARAM lParam) {UpdateData(wParam);return 0; }

4. 將消息映射到消息處理函數(shù):

放在AFX_MSG_MAP之前,把WM_UPDATEDATA消息映射到消息響應(yīng)函數(shù)OnUpdateData

BEGIN_MESSAGE_MAP(CEditTestDlg, CDialog)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON1, &CEditTestDlg::OnBnClickedButton1) END_MESSAGE_MAP()

5. 發(fā)送自定義消息:

以下函數(shù)是在一個(gè)新的線程中調(diào)用的,PostMessage,SendMessage,SendMessageTimeout均可用,推薦使用SendMessageTimeout函數(shù)

static UINT SendMsgThread(LPVOID lpParam) {CEditTestDlg *dlg = (CEditTestDlg*) lpParam;int i = 0;while (i < 100){Sleep(20);i += 1;dlg->m_value2.Format(_T("%d"), i);//PostMessage(dlg->m_hWnd,WM_UPDATEDATA,FALSE,NULL);//SendMessage(dlg->m_hWnd,WM_UPDATEDATA,FALSE,NULL);SendMessageTimeout(dlg->m_hWnd, WM_UPDATEDATA, FALSE,NULL, SMTO_BLOCK, 1000, NULL);}return 0; }

?

?

如果用戶需要一個(gè)定義整個(gè)系統(tǒng)唯一的消息,可以調(diào)用SDK函數(shù)RegisterWindowMessage定義消息:
在Resource.h中將代碼

#define WM_UPDATEDATA (WM_USER + 100)

修改為

static UINT WM_UPDATEDATA=RegisterWindowMessage(_T("User"));

并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步驟同上。
注:如果仍然使用ON_MESSAGE宏指令,compile可以通過,但是無法響應(yīng)消息。

//*************重寫消息

c++消息機(jī)制是遇到兩個(gè)參數(shù)不是很明白 查了下資料 記錄下(以下都是我個(gè)人理解,錯(cuò)誤請幫忙指正):

?

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,?LPARAM lParam);

這是一個(gè)向指定的窗口發(fā)送指定消息的函數(shù)

HWND hWnd?這個(gè)參數(shù)是窗口的句柄,相當(dāng)于id的玩意 不難理解

UINT Msg?這個(gè)是要發(fā)送的消息?如:WM_CLOSE,WM_SETTEXT。。。。。。。好多

WPARAM wParam和LPARAM lParam這兩個(gè)參數(shù)不是很陌生 下面也是我看其他的資料得到的理解

?

Windows的消息必須參考幫助文件才能知道具體的含義。如果是你定義的消息,愿意怎么使這兩個(gè)參數(shù)都行。但是習(xí)慣上,我們愿意使用LPARAM傳 遞地址,而WPARAM傳遞其他參數(shù)。”

接下來談?wù)勈裁词窍C(jī)制:系統(tǒng)將會維護(hù)一個(gè)或多個(gè)消息隊(duì)列,所有產(chǎn)生的消息都回被放入或是插入隊(duì)列中。系統(tǒng)會在隊(duì)列中取出每一條消息,根據(jù)消息的接收句柄而將該消息發(fā)送給擁有該窗口的程序的消息循環(huán)。每一個(gè)運(yùn)行的程序都有自己的消息循環(huán),在循環(huán)中得到屬于自己的消息并根據(jù)接收窗口的句柄調(diào)用相應(yīng)的窗口過程。而在沒有消息時(shí)消息循環(huán)就將控制權(quán)交給系統(tǒng)所以Windows可以同時(shí)進(jìn)行多個(gè)任務(wù)。下面的偽代碼演示了消息循環(huán)的用法:

?

?

例如:主程序MyDlg.cpp

1.自定義消息:#define WM_TRAY WM_USER 100

2.函數(shù)原形:afx_msg LRESULT OnTrayNotify(WPARAM wParam,LPARAM lParam);

3.消息映射:ON_MESSAGE(WM_TRAY,OnTrayNotify)

4.原函數(shù):

LRESULT CMyDlg::OnTrayNotify(WPARAM wParam,LPARAM lParam)

{

return m_tray.OnTrayNotify(wParam,lParam);

}

?

上面程序呢?主要過程是這樣?自定義了一個(gè)消息WM_TRAY?

再創(chuàng)建一個(gè)函數(shù)OnTrayNotify?

然后將消息和函數(shù)綁定在一起ON_MESSAGE(WM_TRAY,OnTrayNotify)

每當(dāng)接受這個(gè)消息時(shí)就運(yùn)行函數(shù)

而WPARAM wParam,LPARAM lParam這兩個(gè)參數(shù)就是消息附帶的參數(shù)跟著消息一起傳遞過來

?

在Win32 SDK中消息本身是作為一個(gè)結(jié)構(gòu)體記錄傳遞給應(yīng)用程序的,這個(gè)記錄中包含了消息的類型以及其他信息。這個(gè)記錄類型叫做MSG,它在window中是這樣聲明的:
typedef struct tagMSG { // msg
HWND hwnd; //窗口句柄
UINT message; //消息常量標(biāo)識符
WPARAM wParam; //32位消息的特定附加信息,具體表示什么處決于message
LPARAM lParam; //32位消息的特定附加信息,具體表示什么處決于message
DWORD time; //消息創(chuàng)建時(shí)的時(shí)間
POINT pt; //消息創(chuàng)建時(shí)的鼠標(biāo)位置
} MSG;

hwnd 接收消息的32位窗口句柄。窗口可以是任何類型的屏幕對象,因?yàn)閃in32能夠維護(hù)大多數(shù)可視對象的句柄(窗口、對話框、按鈕、編輯框等)。


message 用于區(qū)別其他消息的常量值,這些常量可以是Windows單元中預(yù)定義的常量,也可以是自定義的常量。


wParam 通常是一個(gè)與消息有關(guān)的常量值,也可能是窗口或控件的句柄。 lParam 通常是一個(gè)指向內(nèi)存中數(shù)據(jù)的指針。由于wParam,lParam和指針都是32位的,需要時(shí)可以強(qiáng)制類型轉(zhuǎn)換。具體表示什么,與message相關(guān),他們是事先定義好的。


如果自定義消息:#define WM_MYMESSAGE WM_USER+100,需確定wParam,lParam的意義 (假設(shè)wParam=0時(shí)發(fā)送數(shù)據(jù),wParam=1時(shí)接收數(shù)據(jù),lParam為CMyClass* 指針,指向一個(gè)CMyClass對象,準(zhǔn)備要發(fā)送的數(shù)據(jù)或接收數(shù)據(jù) 發(fā)送WM_MYMESSAGE時(shí) SendMessage(hwnd,WM_MYMESSAGE,0,pMyClassObject) 接收消息的窗口,接收WM_MYMESSAGE中(CMyClass*)lParam參數(shù)即pMyClassObject傳過來的數(shù)據(jù)

?

//**********

1. 怎樣使用MFC發(fā)送一個(gè)消息用MFC發(fā)送一個(gè)消息的方法是,

首先,應(yīng)獲取接收消息的CWnd類對象的指針;

然后,調(diào)用CWnd的成員函數(shù)SendMessage( )。

LRESULT Res=pWnd->SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam);

pWnd指針指向目標(biāo)CWnd類對象。變量Msg是消息,wParam和lParam變量包含消息的參數(shù),如鼠標(biāo)單擊哪里或選擇了什么菜單項(xiàng)。目標(biāo)窗口返回的消息結(jié)果放在變量Res中。

發(fā)送消息到一個(gè)沒有CWnd類對象的窗口,可以用下列目標(biāo)窗口的句柄直接調(diào)用Windows API:

LRESULT Res=::SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

這里的hWnd是目標(biāo)窗口的句柄。

2. 怎樣用MFC寄送一個(gè)消息

用MFC寄送一個(gè)消息與發(fā)送一個(gè)消息幾乎相同,但寄送時(shí)用PostMessage( ) ,而不是用SendMessage( );返回值Res也不一樣,Res不是一個(gè)由目標(biāo)窗口返回的值,而是一個(gè)布爾值,用來表示消息是否成功地放到消息隊(duì)列中。

3. 檢索一個(gè)寄送消息

正常情況下,一旦消息被寄送后,應(yīng)用程序在后臺發(fā)送它。但是在特殊情況下,需要你自己去刪除一個(gè)消息,例如想在應(yīng)用程序接收到某種消息之前停止應(yīng)用程序。有兩種方法可以從應(yīng)用程序消息隊(duì)列中刪除一個(gè)消息,但這兩種方法都沒有涉及MFC。

■ 第一種方法:在不干擾任何事情之下窺視消息隊(duì)列,看看一個(gè)消息是否在那里。

BOOL res=::PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg ) ;

■ 第二種方法:實(shí)際上是等待,一直等到一個(gè)新的消息到達(dá)隊(duì)列為止,然后刪除并返回該消息。

BOOL res=::GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);

在這兩種方法中,變量hWnd指定要截獲消息的窗口,如果該變量設(shè)為NULL,所有窗口消息將被截獲。wMsgFilterMin和wMsgFilterMax變量與SendMessage( )中的變量Msg相對應(yīng),指定查看消息的范圍。如果用"0,0",則所有的消息都將被截獲。如果用WM_KEYFIRST,WM_KEYLAST或WM_MOUSEFIRST,WM_MOUSELAST,則所有鍵盤或鼠標(biāo)的消息將被截獲。wRemoveMsg變量指定PeekMessage( )是否應(yīng)該真正地從隊(duì)列中刪除該消息。(GetMessage( )總是刪除消息)。該變量可以取兩個(gè)值:

■ PM_REMOVE,PeekMessage( )將刪除消息。

■ PM_NOREMOVE,PeekMessage( )將把消息留在隊(duì)列里,并返回它的一個(gè)拷貝。

當(dāng)然,如果把消息留在消息隊(duì)列中,然后再次調(diào)用PeekMessage( )查看相同類型的消息,則將返回完全相同的消息。

lpMsg變量是一個(gè)指向MSG結(jié)構(gòu)的指針,MSG包含檢索到的消息。

typedef struct tagMSG {

HWND hwnd; // window handle message is intended for

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time; // the time the message was put in the queue

POINT pt; // the location of the mouse cursor when the

// message was put in the queue

} MSG;

4. MFC怎樣接收一個(gè)寄送的消息

MFC處理一個(gè)寄送和發(fā)送消息的唯一明顯不同是寄送的消息要在應(yīng)用程序的消息隊(duì)列中花費(fèi)一些時(shí)間。在消息泵(message pump)彈出它之前,它要一直在隊(duì)列中。

消息泵

MFC應(yīng)用程序中的消息泵在CWinApp的成員函數(shù)Run()中。應(yīng)用程序開始運(yùn)行時(shí),Run()就被調(diào)用,Run()把時(shí)間分割成兩部分。一部分用來執(zhí)行后臺處理,如取消臨時(shí)CWnd對象;另一部分用來檢查消息隊(duì)列。當(dāng)一個(gè)新的消息進(jìn)來時(shí),Run()抽取它—即用GetMessage( )從隊(duì)列中取出該消息,運(yùn)行兩個(gè)消息翻譯函數(shù),然后用DispatchMessage( )函數(shù)調(diào)用該消息預(yù)期的目標(biāo)窗口進(jìn)程。

消息泵調(diào)用的兩個(gè)翻譯函數(shù)是PreTranslateMessage( )和::TranslateMessage( )。目標(biāo)窗口的MFC類可調(diào)用reTranslateMessage在發(fā)送消息給它之前進(jìn)行消息翻譯,例如,CFrameWnd用PreTranslateMessage( )將加速鍵(如,Ctrl+S存儲文件)轉(zhuǎn)換為命令消息。翻譯前的消息通常被處理掉,而翻譯后的消息(如果有的話)將被重新寄送到隊(duì)列里。::TranslateMessage是一個(gè)窗口函數(shù),將原始鍵碼轉(zhuǎn)換為鍵字符。消息一旦被DispatchMessage()發(fā)送,MFC處理它就像處理SendMessage()發(fā)送的消息一樣。

5. MFC怎樣處理一個(gè)接收到的消息

處理接收到的消息的目的非常簡單:將消息指向一個(gè)函數(shù),該函數(shù)通過消息中的消息標(biāo)識符處理它。非MFC窗口用簡單的case語句來實(shí)現(xiàn)該目標(biāo),每個(gè)case語句執(zhí)行一些函數(shù),或調(diào)用其他一些函數(shù)。

MainWndProc(HWND hWnd, UINT message, W PARAM wParam,LPARAM lParam)

{

switch(message)

{

case WM_CREATE:

: : :

break;

case WM_PAINT:

: : :

break;

default:

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

}

return(NULL);

}

任何遺漏的消息將被傳輸?shù)揭粋€(gè)默認(rèn)的消息處理函數(shù),但是,case語句不能很好地適應(yīng)C++和封裝技術(shù)。在C++環(huán)境中,要求消息被一個(gè)專門處理該類型消息的類的成員函數(shù)處理。因此,MFC不采用case語句,而采用更加復(fù)雜和回旋的方法。但它允許用私有類處理消息,而只需做下面三件事情:

■ 從將要接收消息的CWnd類對象派生類(對于命令消息是CCmdTarget)。

■ 在派生類中寫一個(gè)處理消息的成員函數(shù)。

■ 在類中定義一個(gè)查找表(叫做消息映像),該表具有成員函數(shù)的條目和它要處理的消息的標(biāo)識符。

然后,MFC依次調(diào)用下面的函數(shù),指引輸入消息到處理函數(shù)。

1) AfxWndProc( )接收消息,尋找消息所屬的CWnd對象,然后調(diào)用AfxCallWndProc( )。

2) AfxCallWndProc( )存儲消息(消息標(biāo)識符和參數(shù))供未來參考,然后調(diào)用WindowProc( )。

3) WindowProc( ) 發(fā)送消息給OnWndMsg( ) ,然后,如果消息未被處理,則發(fā)送給DefWindowproc( )。

4) OnWndMsg( )要么為WM_COMMAND消息調(diào)用OnCommand( ),要么為WM_NOTIFY消息調(diào)用OnNotify( )。任何被遺漏的消息都將是一個(gè)窗口消息。OnWndMsg( )搜索類的消息映像,以找到一個(gè)能處理任何窗口消息的處理函數(shù)。如果OnWndMsg( )不能找到這樣的處理函數(shù),則把消息返回到WindowProc( ),由它將消息發(fā)送給DefWindowProc( )。

5) OnCommand()查看這是不是一個(gè)控件通知(lParam不是NULL);如果它是,OnCommand( )就試圖將消息映射到制造通知的控件;如果它不是一個(gè)控件通知,或者控件拒絕映射的消息,OnCommand( )就調(diào)用OnCmdMsg( )。

6) OnNotify( )也試圖將消息映射到制造通知的控件;如果映射不成功, OnNotify( )就調(diào)用相同的OnCmdMsg( )函數(shù)。

7) 根據(jù)接收消息的類,OnCmdMsg( )將在一個(gè)稱為命令傳遞(Command Routing)的過程中潛在地傳遞命令消息和控件通知。例如,如果擁有該窗口的類是一個(gè)框架類,則命令和通知消息也被傳遞到視圖和文檔類,并為該類尋找一個(gè)消息處理函數(shù)。

為什么要消息映像?

這畢竟是C++語言;為什么OnWndMsg( )不為每個(gè)窗口消息調(diào)用一個(gè)預(yù)定義的虛擬函數(shù)?因?yàn)樗糃PU。若是那樣,當(dāng)掃描一個(gè)消息映像以加速該過程時(shí),OnWndMsg( )可能會做出意想不到的事情,并陷入?yún)R編器。注意通過重載WindowProc( )、OnWndMsg( )、OnCommand( )、OnNotify( ) 或OnCmdMsg( )可以修改這一過程。重載OnWndMsg( )可以在窗口消息被排序之前插入該過程。重載OnCommand( )或OnNotify( )可以在消息被反射之前插入該過程。

?

//***********

windows消息機(jī)制(MFC)

消息分類與消息隊(duì)列

Windows中,消息使用統(tǒng)一的結(jié)構(gòu)體(MSG)來存放信息,其中message表明消息的具體的類型,

而wParam,lParam是其最靈活的兩個(gè)變量,為不同的消息類型時(shí),存放數(shù)據(jù)的含義也不一樣。

time表示產(chǎn)生消息的時(shí)間,pt表示產(chǎn)生消息時(shí)鼠標(biāo)的位置。

按照類型,Windows將消息分為:

(0) 消息ID范圍

系統(tǒng)定義消息ID范圍:[0x0000, 0x03ff]
用戶自定義的消息ID范圍:?
WM_USER:?0x0400-0x7FFF?(例:WM_USER+10)?
WM_APP(winver> 4.0):0x8000-0xBFFF?(例:WM_APP+4)?
RegisterWindowMessage:0xC000-0xFFFF【用來和其他應(yīng)用程序通信,為了ID的唯一性,使用::RegisterWindowMessage來得到該范圍的消息ID?】

(1) 窗口消息:即與窗口的內(nèi)部運(yùn)作有關(guān)的消息,如創(chuàng)建窗口,繪制窗口,銷毀窗口等。

? ? ?可以是一般的窗口,也可以是MainFrame,Dialog,控件等。?

? ???如:WM_CREATE, WM_PAINT, WM_MOUSEMOVE, WM_CTLCOLOR, WM_HSCROLL等

(2) 當(dāng)用戶從菜單選中一個(gè)命令項(xiàng)目、按下一個(gè)快捷鍵或者點(diǎn)擊工具欄上的一個(gè)按鈕,都將發(fā)送WM_COMMAND命令消息。

? ? ?LOWORD(wParam)表示菜單項(xiàng),工具欄按鈕或控件的ID;如果是控件, HIWORD(wParam)表示控件消息類型。

? ? ?#define?LOWORD(l) ((WORD)(l))

? ? ?#define?HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

(3) 隨著控件的種類越來越多,越來越復(fù)雜(如列表控件、樹控件等),僅僅將wParam,lParam將視為一個(gè)32位無符號整數(shù),已經(jīng)裝不下太多信息了。

? ? 為了給父窗口發(fā)送更多的信息,微軟定義了一個(gè)新的WM_NOTIFY消息來擴(kuò)展WM_COMMAND消息。

? ? WM_NOTIFY消息仍然使用MSG消息結(jié)構(gòu),只是此時(shí)wParam為控件ID,lParam為一個(gè)NMHDR指針,

? ? 不同的控件可以按照規(guī)則對NMHDR進(jìn)行擴(kuò)充,因此WM_NOTIFY消息傳送的信息量可以相當(dāng)?shù)拇蟆?/p>

注:Window 9x 版及以后的新控件通告消息不再通過WM_COMMAND 傳送,而是通過WM_NOTIFY 傳送,
? ? ? 但是老控件的通告消息, 比如CBN_SELCHANGE 還是通過WM_COMMAND 消息發(fā)送。

(4) windwos也允許程序員定義自己的消息,使用SendMessage或PostMessage來發(fā)送消息。

windows消息還可以分為:

(1) 隊(duì)列消息(Queued Messages)?
消息會先保存在消息隊(duì)列中,消息循環(huán)會從此隊(duì)列中取出消息并分發(fā)到各窗口處理?
如:WM_PAINT,WM_TIMER,WM_CREATE,WM_QUIT,以及鼠標(biāo),鍵盤消息等。
其中,WM_PAINT,WM_TIMER只有在隊(duì)列中沒有其他消息的時(shí)候才會被處理,
WM_PAINT消息還會被合并以提高效率。其他所有消息以先進(jìn)先出(FIFO)的方式被處理。

(2) 非隊(duì)列消息(NonQueued Messages)?
消息會繞過系統(tǒng)消息隊(duì)列和線程消息隊(duì)列,直接發(fā)送到窗口過程進(jìn)行處理?
如:WM_ACTIVATE, WM_SETFOCUS, WM_SETCURSOR,WM_WINDOWPOSCHANGED

Windows系統(tǒng)的整個(gè)消息系統(tǒng)分為3個(gè)層級:

? ? ① Windows內(nèi)核的系統(tǒng)消息隊(duì)列

? ? ② App的UI線程消息隊(duì)列

? ? ③ 處理消息的窗體對象

Windows內(nèi)核維護(hù)著一個(gè)全局的系統(tǒng)消息隊(duì)列;按照線程的不同,系統(tǒng)消息隊(duì)列中的消息會分發(fā)到應(yīng)用程序的UI線程的消息隊(duì)列中;

應(yīng)用程序的每一個(gè)UI線程都有自己的消息循環(huán),會不停地從自己的消息隊(duì)列取出消息,并發(fā)送給Windows窗體對象;

每一個(gè)窗體對象都使用窗體過程函數(shù)(WindowProc)來處理接收到的各種消息。

1 LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)2 {3 PAINTSTRUCT ps;4 HDC hdc;5 6 switch (message)7 {8 case WM_COMMAND:9 break; 10 case WM_PAINT: 11 hdc = BeginPaint(hWnd, &ps); 12 // TODO: 在此添加任意繪圖代碼... 13 EndPaint(hWnd, &ps); 14 break; 15 case WM_DESTROY: 16 PostQuitMessage(0); 17 break; 18 default: 19 return DefWindowProc(hWnd, message, wParam, lParam); 20 } 21 return 0; 22 }

需要的話,在WindowProc中,可以用::GetMessageTime獲取當(dāng)前消息產(chǎn)生的時(shí)間,
用::GetMessagePos獲取當(dāng)前消息產(chǎn)生時(shí)鼠標(biāo)光標(biāo)所在的位置。

(1) 各個(gè)窗口消息由各個(gè)窗體(或控件)自身的WindowProc(虛函數(shù))接收并處理。

(2)?WM_COMMAND命令消息統(tǒng)一由當(dāng)前活動主窗口的WindowProc接收,經(jīng)過繞行后,可被其他的CCmdTarget對象處理。

(3)?WM_COMMAND控件通知統(tǒng)一由子窗口(控件)的父窗口的WindowProc接收并處理,也可以進(jìn)行繞行被其他的CCmdTarget對象處理。

? ? ?(例如:CFormView具備接受WM_COMMAND控件通知的條件,又具備把WM_COMMAND消息派發(fā)給關(guān)聯(lián)文檔對象處理的能力,

? ? ? ? ?所以給CFormView的WM_COMMAND控件通知是可以讓文檔對象處理的。)

? ? ?另外,WM_COMMAND控制通知會先調(diào)用ReflectLastMsg反射通知子窗口(控件),如果子窗口(控件)處理了該消息并返回TRUE,則消息會停止分發(fā);

? ? ?否則,會繼續(xù)調(diào)用OnCmdMsg進(jìn)行命令發(fā)送(如同WM_COMMAND命令消息一樣)。

注:WM_COMMAND命令消息與WM_COMMAND控件通知的相似之處:
WM_COMMAND命令消息和WM_COMMAND控制通知都是由WindowProc給OnCommand處理,
OnCommand通過wParam和lParam參數(shù)區(qū)分是命令消息或通知消息,然后送給OnCmdMsg處理。
事實(shí)上,BN_CLICKED控件通知消息的處理和WM_COMMAND命令消息的處理完全一樣。
因?yàn)樵撓⒌耐ㄖa是0,ON_BN_CLICKED(id,memberfunction)和ON_COMMAND(id,memberfunction)是等同的。

(4)WM_NOTIFY消息只是對WM_COMMAND控件通知進(jìn)行了擴(kuò)展,與WM_COMMAND控件通知具有相同的特點(diǎn)。

SendMessage與PostMessage

PostMessage 把消息投遞到消息隊(duì)列后,立即返回;?
SendMessage把消息直接送到窗口過程處理,處理完才返回。

GetMessage與PeekMessage

GetMessage 有消息且該消息不為WM_QUIT,返回TRUE。
   ? ? ? ? ? ?有消息且該消息為WM_QUIT,返回FALSE。
? ? ? ? ? ? ? ? ? 沒有消息時(shí),掛起該UI線程,控制權(quán)交還給系統(tǒng)。
PeekMessage 有消息返回TRUE,如果沒有消息返回FALSE;不會阻塞。
? ? ? ? ? ? ? ? ? ?是否從消息隊(duì)列中刪除此消息(PM_REMOVE),由函數(shù)參數(shù)來指定。

要想在沒有消息時(shí)做一些工作,就必須使用PeekMessage來抓取消息,以便在沒有消息時(shí),能在OnIdle中執(zhí)行空閑操作(如下):

1 while (TRUE) 2 {3 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) 4 {5 if (msg.message == WM_QUIT)6 break;7 TranslateMessage(&msg);8 DispatchMessage(&msg);9 } 10 else 11 { 12 OnIdle(); 13 } 14 }

例如:MFC使用OnIdle函數(shù)來清理一些臨時(shí)對象及未使用的動態(tài)鏈接庫。

只有在OnIdle返回之后程序才能繼續(xù)處理用戶的輸入,因此不應(yīng)在OnIdle進(jìn)行較長的任務(wù)。

MFC消息處理

在CWnd中,MFC使用OnWndMsg來分別處理各類消息:

如果是WM_COMMAND消息,交給OnCommand處理;然后返回。

如果是WM_NOTIFY消息,交給OnNotify處理;然后返回。

如果是WM_ACTIVATE消息,先交給_AfxHandleActivate處理,再繼續(xù)下面的處理。

如果是WM_SETCURSOR消息,先交給_AfxHandleSetCursor處理,然后返回。

如果是其他的窗口消息(包括WM_ACTIVATE消息),則

? 首先在消息緩沖池(一個(gè)hash表,用于加快消息處理函數(shù)的查找)進(jìn)行消息匹配,
? ? 若匹配成功,則調(diào)用相應(yīng)的消息處理函數(shù);
? ? 若不成功,則在消息目標(biāo)的消息映射數(shù)組中進(jìn)行查找匹配,看它是否能處理當(dāng)前消息。
? 如果消息目標(biāo)處理了該消息,則會匹配到消息處理函數(shù),調(diào)用它進(jìn)行處理;

否則,該消息沒有被應(yīng)用程序處理,OnWndMsg返回FALSE。

MFC消息映射

消息映射實(shí)際是MFC內(nèi)建的一個(gè)消息分派機(jī)制。

把MFC中的宏進(jìn)行展開(如下),可以得到消息映射表整個(gè)全貌。

注:GetMessageMap為虛函數(shù)。
? ? ?{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0}:對象消息映射表的結(jié)束標(biāo)識

窗口消息只能由CWnd對象來處理,采用向基類直線上朔的方式,來查找對應(yīng)的消息響應(yīng)函數(shù)進(jìn)行處理。

一旦找到消息響應(yīng)函數(shù)(若有返回值且為TRUE),就停止上朔。因此,我們經(jīng)常會看到這樣的代碼:

增加一個(gè)消息處理函數(shù)來寫我們的邏輯時(shí),MFC ClassWizard會在該函數(shù)之前或之后顯示調(diào)用其基類對應(yīng)的函數(shù),保證基類中邏輯被執(zhí)行。

命令消息可由CCmdTarget對象接收并處理(OnCmdMsg為虛函數(shù)),除了向基類直線上朔方式外,還有命令繞行機(jī)制(要防止形成圈,死循環(huán))。

在某種程度上,控制通知消息由窗口對象處理是一種習(xí)慣和約定。然而,控件通知消息也是可以有CCmdTarget對象接收并處理,并進(jìn)行命令繞行的。

下圖為MFC經(jīng)典單文檔視圖框架的命令消息繞行路線:

函數(shù)調(diào)用過程如下(如果沒有任何對象處理該條WM_COMMAND消息,最后會被::DefWindowProc處理)。

非模態(tài)對話框的消息處理

1 static CAboutDlg aboutDlg; 2 aboutDlg.Create(IDD_ABOUTBOX, this); 3 aboutDlg.ShowWindow(SW_SHOW);

應(yīng)用程序只有一個(gè)消息循環(huán)。

對于窗口消息,非模態(tài)對話框(及其子控件)與父窗口(及其子控件)都是用自身的WindowProc函數(shù)接收并處理,互不干擾。

對于命令消息,由當(dāng)前活動主窗口的WindowProc接收(例如:當(dāng)前活動主窗口為非模態(tài)對話框,則命令消息會被非模態(tài)對話框接收)。

可以在當(dāng)前活動主窗口的OnCmdMsg中做命令繞行,使得其他的CCmdTarget對象也可以處理命令消息。

對于控件通知,由其父窗口的WindowProc接收并處理,一般不進(jìn)行命令繞行被其他的CCmdTarget對象處理。

模態(tài)對話框的消息處理

1 CAboutDlg aboutDlg; 2 aboutDlg.DoModal();

(1) 模態(tài)對話框彈出來后,首先會讓父窗口失效,使其不能接受用戶的輸入(鍵盤鼠標(biāo)消息)。

1 EnableWindow(hwndParent, FALSE) ;

(2) 父窗口消息循環(huán)被阻塞(會卡在DoModal處,等待返回),由模態(tài)對話框的消息循環(huán)來接管(因此整個(gè)程序不會卡住)。

? ? 接管后,模態(tài)對話框的消息循環(huán)仍然會將屬于父窗口及其子控件的窗口消息(不包括鍵盤鼠標(biāo)相關(guān)的窗口消息)發(fā)送給它們各自的WindowProc窗口函數(shù),進(jìn)行響應(yīng)處理。

(3) 模態(tài)對話框銷毀時(shí)(點(diǎn)擊IDOK或IDCANCEL),父窗口消息循環(huán)重新激活,繼續(xù)DoModal后的邏輯。

? ? 激活后,父窗口有可以重新接受用戶的輸入(鍵盤鼠標(biāo)消息)。

1 EnableWindow(hwndParent, TRUE) ;

從上面的過程中,我們可以得到如下結(jié)論:

對于窗口消息,模態(tài)對話框主窗口(及其子控件)與父窗口(及其子控件)都是用自身的WindowProc函數(shù)接收并處理,互不干擾。

只是父窗口(及其子控件)無法接受到鍵盤鼠標(biāo)消息相關(guān)的窗口消息。

對于命令消息,由模態(tài)對話框主窗口的WindowProc接收。可以在模態(tài)對話框主窗口的OnCmdMsg中做命令繞行,使得其他的CCmdTarget對象也可以處理命令消息。

對于控件通知,由其父窗口的WindowProc接收并處理,一般不進(jìn)行命令繞行被其他的CCmdTarget對象處理。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的MFC添加自定义消息及重写消息过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

日本三级中文字幕在线观看 | 三级av网 | 麻豆av电影 | 99热国产在线观看 | 亚洲资源网 | 在线中文字幕视频 | 免费av网站观看 | 日本中文在线 | 欧美久久影院 | 免费视频一二三区 | 美女视频一区二区 | 91传媒91久久久 | 国产自产在线视频 | 韩国精品一区二区三区六区色诱 | 天天操夜夜叫 | 91中文字幕永久在线 | 国产精品女同一区二区三区久久夜 | 中文字幕亚洲在线观看 | 日韩一区正在播放 | 国产精品久久免费看 | 99视频免费| 91精品国自产在线偷拍蜜桃 | 久久一区二区三区国产精品 | www.黄色网.com | 免费精品视频在线观看 | 青青草国产精品视频 | 国产黄a三级三级三级三级三级 | 91av在线免费 | 天天草av | 中文字幕亚洲欧美日韩2019 | 久久免费的精品国产v∧ | 正在播放日韩 | 欧美成人亚洲 | 亚洲日本va在线观看 | 亚洲黄色三级 | 国产精品资源网 | 中文字幕在线视频国产 | 国产精品视频线看 | www黄色com | 天天射天天舔天天干 | 日韩一区正在播放 | 99精品黄色片免费大全 | 国产成人免费 | 在线观看av片 | 夜夜操天天干 | 免费在线观看成人小视频 | 国产一区二区三区午夜 | 国产一区二区精 | 国产精品九九视频 | 国产在线精品区 | 91精品办公室少妇高潮对白 | 国产亚洲人成网站在线观看 | 伊人色播 | 中文字幕区 | 成人毛片一区 | 超碰日韩在线 | 97精品免费视频 | av经典在线| 久久av网址 | 在线亚洲欧美视频 | 91在线porny国产在线看 | 九九九热精品免费视频观看网站 | 最新国产福利 | 亚洲日本va午夜在线电影 | www.天天综合| 高清一区二区三区 | 毛片在线网 | 狠狠色伊人亚洲综合网站色 | 亚洲国产偷 | 天天看天天干 | av在线电影免费观看 | 五月婷婷丁香网 | 久久精品99 | 国产精品aⅴ | 亚洲精品午夜aaa久久久 | 国产探花| 夜夜爽天天爽 | 天天插日日插 | 超碰公开97 | 在线观看www91 | 日韩在线欧美在线 | 久久久久久久久久久网站 | 亚洲黄色大片 | 亚洲男男gⅴgay双龙 | 日日躁夜夜躁aaaaxxxx | 成人作爱视频 | 97国产大学生情侣酒店的特点 | av免费电影在线观看 | 婷婷播播网 | www色| 亚洲视频久久久久 | 超碰97久久 | 国产中文在线观看 | 欧美一级电影片 | 国产免费三级在线观看 | 国产视频精品久久 | 国产精品专区在线 | 久久免费视频1 | www.亚洲精品在线 | 丁香激情综合国产 | 黄色网中文字幕 | 日韩av资源站 | 探花视频在线观看+在线播放 | 国产精品日韩久久久久 | 成年人app网址 | jizz欧美性9 国产一区高清在线观看 | 久久永久视频 | 亚洲精品久久久久久国 | 久久综合爱 | 在线看片一区 | 久草久草在线观看 | 中文字幕一区二区三区四区久久 | 日韩欧美精品在线视频 | 亚洲精品ww | 精品久久久影院 | 在线亚洲欧美视频 | 国产在线综合视频 | 国产精品毛片一区视频播不卡 | 成人午夜av电影 | 欧美日韩国语 | 亚洲日本一区二区在线 | av千婊在线免费观看 | 三级黄免费看 | 婷婷激情站 | 欧美国产高清 | jizz18欧美18 | av在线一二三区 | 国内久久久久 | 国产福利一区二区三区在线观看 | 热久久视久久精品18亚洲精品 | 五月天综合色激情 | 欧美日韩精品在线 | 精品国内自产拍在线观看视频 | 国产精品午夜在线 | 精品国产一区二区三区日日嗨 | 国产精品久久久久久久7电影 | 麻豆影视在线观看 | 免费看成人片 | 久久久久久久久久久久久9999 | 亚洲色视频| 成人av在线影院 | 日韩试看 | 波多野结衣视频在线 | 国产精品一区二区免费在线观看 | 免费人成在线观看网站 | 日本丶国产丶欧美色综合 | 国产成人久久av免费高清密臂 | 日韩精品免费一区二区三区 | 爱干视频| 国产成人久久精品亚洲 | 黄色最新网址 | 国产免费久久精品 | 免费高清无人区完整版 | 精品影院一区二区久久久 | 婷婷5月激情5月 | av一区在线播放 | 香蕉视频在线免费看 | 精品人妖videos欧美人妖 | 永久免费看av | 国产成人久久精品一区二区三区 | 91精品视频播放 | 一区二区三区av在线 | 婷婷色网址 | 成人播放器| 91精品麻豆| 狠狠色丁香九九婷婷综合五月 | 日韩超碰| 91香蕉国产 | 亚洲精品永久免费视频 | 久久理论电影网 | 一级α片免费看 | 97看片网 | 免费中文字幕视频 | 99精品在线视频观看 | 久久九九精品久久 | 久艹在线观看视频 | 黄色成人小视频 | 成人教育av | 日韩资源在线播放 | 日韩中文在线视频 | 天天干夜夜爱 | 午夜av日韩 | 久久国产精品久久国产精品 | 欧美精品久久久久久久久久久 | av资源在线观看 | 美女免费视频一区二区 | 黄色毛片视频免费观看中文 | 999久久久久久久久久久 | www免费在线观看 | 综合婷婷 | 黄a在线观看 | 国产欧美精品xxxx另类 | 国产精品麻豆99久久久久久 | 久久国产免费视频 | 国产一区在线视频观看 | 成人免费观看在线视频 | 黄色国产在线观看 | 国产精品久久久久久久久久不蜜月 | 中文字幕av影院 | 欧美日韩精品在线观看视频 | 亚洲欧洲美洲av | 色在线免费| 国产 日韩 在线 亚洲 字幕 中文 | 国产一级片播放 | 亚洲综合网站在线观看 | 免费在线观看视频一区 | www.久久成人 | 激情图片qvod | 成年人在线免费看片 | 亚洲精品久久久蜜臀下载官网 | 国产精品扒开做爽爽的视频 | 国产在线一区二区三区播放 | 天天色天天综合 | 911精品美国片911久久久 | 六月丁香社区 | 日韩美视频 | 国产精品一二 | 国产成人av免费在线观看 | 国产一区二区三区午夜 | 婷婷性综合 | 蜜臀一区二区三区精品免费视频 | 成年性视频| 久久看片网站 | 国产午夜精品一区 | 久久久久这里只有精品 | 国产视频在线观看一区 | 中文字幕永久 | 久久视频一区二区 | 成人中文字幕+乱码+中文字幕 | 在线看片一区 | 日韩免费三区 | 精品国产99国产精品 | 天天操天天舔天天干 | 最新99热| 国产精品入口a级 | 爱情影院aqdy鲁丝片二区 | 人人射人人爱 | 久久成年人视频 | 日韩电影久久 | av免费在线网站 | 91超在线 | 日韩网站在线播放 | 色久av | 日韩美视频 | 中文字幕精品三级久久久 | 日韩久久久久久 | 婷婷色在线播放 | 99热在线国产精品 | 国产精品手机在线观看 | 久久综合99 | 婷婷中文字幕在线观看 | 久久成人一区 | 亚洲婷婷在线 | 国产成人精品一区在线 | 日韩av免费在线电影 | 午夜视频一区二区三区 | 国产粉嫩在线观看 | 欧美另类美少妇69xxxx | 亚洲午夜大片 | 激情av一区二区 | 九九九九色 | 黄色亚洲在线 | 国产精品久久久久久久午夜片 | 国产精品国产毛片 | 日韩欧美视频免费看 | 国产一级片不卡 | 日韩精品在线观看av | 日韩a级黄色片 | 亚洲日本韩国一区二区 | 国产黄大片在线观看 | 在线观看免费一级片 | 欧美日韩国产区 | 久久人人97超碰精品888 | 成av在线 | 天天搞夜夜骑 | 日韩欧美黄色网址 | 亚洲国产欧洲综合997久久, | 欧美激情视频在线观看免费 | 国产自在线 | 成年人黄色免费看 | 国产中文字幕一区二区 | 99精品网站| 亚洲干 | 久久久精品二区 | 五月天亚洲综合 | 免费黄色一区 | 国产精品二区在线观看 | 探花视频在线版播放免费观看 | 久久夜av | 久久综合精品国产一区二区三区 | 91污视频在线观看 | 亚洲免费精品一区二区 | 久久久91精品国产一区二区精品 | 久久精品国产精品 | 中文字幕中文字幕 | 六月色婷婷| 日本久久不卡视频 | 黄视频色网站 | 免费观看一级特黄欧美大片 | 国产精品麻豆视频 | av高清在线 | 97超级碰碰| 欧美作爱视频 | 免费视频国产 | 最新av免费| 成年人在线看视频 | 一区二区理论片 | 中文字幕网站视频在线 | 欧美黑人xxxx猛性大交 | 亚洲一区二区精品视频 | 美女视频黄免费 | 香蕉视频在线播放 | 天天色天天草天天射 | 国产精品九九久久99视频 | 国产亚洲精品久久久久秋 | 91亚洲精| 国产黄免费看 | 香蕉久草 | 国产在线1区 | 欧美成人基地 | 久久免费视频一区 | 亚洲欧美精品一区二区 | 999超碰 | 国产精品淫 | 天天操天天操天天干 | 在线观看免费成人 | 欧美先锋影音 | 在线视频电影 | 亚洲三级在线免费观看 | 在线观看网站你懂的 | 麻豆精品视频在线观看免费 | 麻豆你懂的 | 国产区第一页 | 中文字幕在线免费97 | 国内免费久久久久久久久久久 | 91精品毛片 | 中文字幕资源在线 | 91成年人视频 | 亚色视频在线观看 | 婷婷在线免费视频 | 成年人免费看av | 狠色狠色综合久久 | 深爱激情开心 | 色资源中文字幕 | 久久亚洲专区 | 精品产品国产在线不卡 | 在线观看片 | 最新av免费在线观看 | 亚洲精品乱码久久久久久按摩 | 欧美午夜视频在线 | 亚洲精品在线二区 | 免费看的黄色片 | 精品欧美小视频在线观看 | 久久五月激情 | 碰超在线 | 激情久久小说 | 韩国一区在线 | 国产免费亚洲高清 | 国产在线不卡视频 | 91大神电影 | 一级黄色网址 | 国产女v资源在线观看 | 天天干天天操天天干 | 久久高清毛片 | 天操夜夜操 | 亚洲精品视频免费看 | 成人av电影在线观看 | 99av国产精品欲麻豆 | 久久国产精品免费看 | 天天操婷婷 | 国产午夜精品理论片在线 | 欧美视频在线观看免费网址 | 91自拍视频在线观看 | 日韩中文字幕在线 | 成人综合免费 | 亚洲精品中文在线观看 | 黄在线| 香蕉视频最新网址 | 亚洲3级 | 午夜影院在线观看18 | 91av在线视频免费观看 | 国产黄色精品 | 狠狠久久伊人 | 人人干人人做 | 天天操天天操天天干 | 国内揄拍国产精品 | 成人一区二区三区中文字幕 | 激情小说网站亚洲综合网 | 天天做天天爱天天爽综合网 | 精品久久一级片 | 日韩黄色免费在线观看 | 久久久久久在线观看 | 国产精品一区免费观看 | 国产伦精品一区二区三区无广告 | 国产热re99久久6国产精品 | 久久人人爽爽人人爽人人片av | 国产偷在线 | 美女免费电影 | 亚洲春色成人 | 毛片基地黄久久久久久天堂 | 久久久久久久福利 | 亚洲乱码精品久久久久 | 激情视频在线高清看 | 一级黄色片在线 | 人人网av | 激情丁香 | 97久久精品午夜一区二区 | 看黄色.com | 中文字幕在线影视资源 | 日韩一级精品 | 在线韩国电影免费观影完整版 | 久久福利在线 | 国产精品久久久久久久久久99 | av电影久久 | 丁香午夜 | 亚洲影视九九影院在线观看 | 天无日天天操天天干 | 亚洲视频 视频在线 | 一区二区三区国产欧美 | 久久久2o19精品 | 久久成人免费视频 | 99re视频在线观看 | 成人黄视频 | 99精品视频在线 | 欧美韩日在线 | 久久亚洲私人国产精品va | 青青久草在线视频 | 69久久久 | 91在线看 | 亚洲精品乱码久久久久久写真 | 国产精品h在线观看 | 一区二区三区精品在线视频 | 国产不卡精品视频 | 国产97在线视频 | 999电影免费在线观看 | 激情中文字幕 | 亚洲码国产日韩欧美高潮在线播放 | 黄色在线小网站 | 久久久久色 | 看片的网址 | 色婷婷六月 | 久久国产一区二区三区 | 岛国大片免费视频 | 日韩色高清| 欧美激情视频一区二区三区免费 | 日韩电影一区二区在线 | 手机av在线免费观看 | 丁香婷婷色月天 | av不卡中文字幕 | 激情深爱五月 | 免费a级大片 | 四虎影视成人精品 | 欧美日韩成人 | 天天想夜夜操 | 中文字幕亚洲不卡 | 久久视频在线看 | 天天操天天色天天射 | 国产精选在线 | 国产午夜精品理论片在线 | 激情开心站 | 视频国产一区二区三区 | 久久久久久蜜av免费网站 | 国产精品九九九九九九 | 97av视频| 日韩高清黄色 | 欧美贵妇性狂欢 | 五月婷婷视频在线 | 成人h电影 | 激情欧美一区二区免费视频 | 2021av在线| 四虎精品成人免费网站 | 日本中文字幕视频 | 伊在线视频 | 欧美一区,二区 | 特级毛片网 | 天天夜操 | av免费福利 | 国产一区欧美一区 | 国产精品国产亚洲精品看不卡15 | 超碰精品在线 | 超碰av在线播放 | 91片黄在线观 | 91高清免费在线观看 | 91最新国产 | 久久综合色天天久久综合图片 | 国产一级二级三级在线观看 | 91在线九色| 精品视频9999 | 成人精品久久 | 黄色99视频 | 国产成人精品av在线观 | 一级片免费观看 | 欧美黑人xxxx猛性大交 | 欧美a级在线 | 中文字幕资源网 | 又黄又爽的免费高潮视频 | 2019av在线视频 | 999久久久免费精品国产 | 国产99久久九九精品免费 | 亚洲精品视频在线观看网站 | 婷婷精品国产一区二区三区日韩 | 日韩精品一卡 | 国产精品18久久久久久久网站 | 国产精品手机在线 | 久久精品国产免费观看 | 日韩美一区二区三区 | 色综合在| 97成人在线免费视频 | 日韩草比 | 日韩精品一区二区三区免费观看视频 | 色综合网 | 国产中的精品av小宝探花 | 综合久久五月天 | 久久精品国产v日韩v亚洲 | 高清久久久 | 一区二区视 | 91少妇精拍在线播放 | 精品视频免费 | 欧美成人一区二区 | 97电影在线看视频 | av福利免费 | 午夜国产福利在线观看 | 日韩性xxxx | 99热在线观看免费 | 国产黄色一级片在线 | 免费在线观看污网站 | 在线视频你懂得 | 亚洲精品福利在线观看 | 最新超碰在线 | 91最新在线 | 亚洲精品黄色片 | 中文字幕观看av | 亚洲成av人片在线观看 | 国产精品久久久久久久久软件 | 亚洲蜜桃在线 | 在线观看日韩免费视频 | 日韩精品在线视频免费观看 | 日韩色在线观看 | 婷久久| 亚洲精品色 | 亚洲天天综合 | 免费毛片aaaaaa | h网站免费在线观看 | 人人澡人人澡人人 | 黄色软件大全网站 | 欧美三人交| 麻豆精品视频在线观看免费 | 亚洲国产mv | 日韩三级av | 午夜美女视频 | 在线观看日韩一区 | 国产成人一区二区三区免费看 | 久久久久免费网站 | 欧美一级视频一区 | 日日操天天操狠狠操 | 精品免费一区 | 国产日本亚洲 | 91夫妻自拍| 国产一卡久久电影永久 | 黄色软件在线观看 | 激情综合五月天 | 欧美天天干 | 超碰97人人爱 | 日韩黄色中文字幕 | 亚洲天堂在线观看完整版 | 国产剧情一区二区 | 婷婷开心久久网 | 日韩三级精品 | 久久国产电影院 | 精品久久久久久久久久久久久 | 亚洲成人xxx| 亚洲国产视频在线 | 在线观看91久久久久久 | 婷婷av网| 中文字幕久久久精品 | 日韩在线播放av | 国内精品久久天天躁人人爽 | 久久国产精品一区二区三区 | 国产精品视频app | 中国一区二区视频 | 天天综合网天天综合色 | 精品国产99 | 99精品免费久久久久久久久日本 | a久久久久久 | 欧美成年网站 | 天天干夜夜爽 | 2021国产精品视频 | av福利超碰网站 | 日韩精品专区在线影院重磅 | 国产精品一区在线观看 | 久久艹综合 | 黄色大片视频网站 | 国产精品12 | 涩涩网站在线 | 91成人免费看片 | 999成人国产 | 免费aa大片 | 日韩精品专区在线影院重磅 | 色资源在线观看 | 日产乱码一二三区别免费 | 97成人超碰 | 在线观看免费版高清版 | 亚洲视频综合 | 深夜免费福利网站 | 深爱婷婷 | 在线观看视频 | 久久综合婷婷 | 欧美 日韩 成人 | 99久久国产免费,99久久国产免费大片 | 视频二区在线 | 国产亚洲综合在线 | 国产精品嫩草69影院 | 午夜狠狠干 | 九九视频这里只有精品 | 九九热精品视频在线播放 | 色婷婷综合成人av | 亚洲成人精品久久 | 香蕉视频日本 | 久久视频在线视频 | 国产伦精品一区二区三区无广告 | 一区二区在线电影 | 狠狠的干| 久久国产精品99精国产 | 九九久久久久久久久激情 | 午夜精品一区二区三区免费视频 | 午夜私人影院久久久久 | 久久永久免费 | 久久人人做 | 五月天综合色 | 美女免费黄网站 | 美国av片在线观看 | 国产色视频一区二区三区qq号 | 久久精品官网 | 亚洲国产精品成人av | 久久久91精品国产 | 亚洲精品观看 | 亚洲精品影院在线观看 | 国产91亚洲| 97超碰人| 日韩高清免费在线观看 | 人人爽人人做 | 日日夜夜网 | 久久免费在线视频 | 伊人小视频 | 亚洲精品视频一二三 | 亚洲精品国产精品国产 | 中文字幕av免费观看 | 国产色综合天天综合网 | 国产日产欧美在线观看 | 男女全黄一级一级高潮免费看 | 国产精品久久久久久久久久99 | 久久久91精品国产一区二区精品 | 操操综合 | 色婷五月天 | 欧美91精品久久久久国产性生爱 | 亚洲码国产日韩欧美高潮在线播放 | 国产一二区视频 | 午夜av免费 | 国产视频一区精品 | 亚洲午夜av电影 | 成人黄在线 | 欧美日在线观看 | 国产看片 色 | 欧美天天综合 | 色婷婷午夜 | 国产精品久久久久久久久搜平片 | 日韩欧美在线国产 | 国产在线精品观看 | 97精品国产aⅴ | 国产精品igao视频网网址 | 日韩在线小视频 | 亚洲精品免费在线视频 | 久久人人爽 | 久久久香蕉视频 | 亚洲精品国产精品乱码不99热 | 黄色免费看片网站 | 99久久精品费精品 | 久久久久久久久久久久av | 五月开心婷婷 | 天天草天天干天天射 | 国产精品视频app | 国产91aaa| 手机av片| 国产精品综合在线 | 国产高清在线看 | 91爱看片| 黄色美女免费网站 | 日韩高清不卡一区二区三区 | 国产精品美女999 | .国产精品成人自产拍在线观看6 | 国产精品一区二区电影 | 国产福利精品在线观看 | 中文av网站 | 国产精品毛片一区二区三区 | 国产精品久久久久久高潮 | 人人澡人摸人人添学生av | 伊人欧美| 国产精品自产拍在线观看网站 | 欧美精品天堂 | 在线观看香蕉视频 | 在线视频欧美精品 | 久久久www免费电影网 | 色婷婷免费| 亚洲爽爽网 | 久久久精品国产一区二区 | 日韩动态视频 | 久久久美女 | 一区二区中文字幕在线播放 | 狠狠网站 | 欧美在线视频一区二区三区 | 日韩免费视频 | 2024国产在线 | 97人人爽人人 | 亚洲成年片 | 九九九热精品免费视频观看 | 久草在线免费在线观看 | 国产精品18久久久久久久 | 免费看污在线观看 | 免费高清在线视频一区· | 丁香六月婷婷开心 | 99爱精品在线 | 天天射天天干天天 | 亚洲人av免费网站 | 在线观看亚洲专区 | 综合中文字幕 | 国产99精品在线观看 | 国产高清免费在线观看 | 菠萝菠萝在线精品视频 | av免费电影网站 | 国色天香在线 | 免费色视频网址 | 又长又大又黑又粗欧美 | 国产精品色婷婷视频 | 成人av电影免费在线播放 | 欧美日韩免费看 | 免费av在线播放 | 一区二区毛片 | 99国产在线视频 | 日韩久久精品一区二区三区下载 | 五月网婷婷 | 久久免费一级片 | 性日韩欧美在线视频 | 午夜视频不卡 | 国产精品成人免费 | 久久伊人八月婷婷综合激情 | 337p欧美| 亚洲精品在线观看免费 | 狠狠狠狠狠干 | 91九色蝌蚪视频 | 亚洲在线视频网站 | 久久久久这里只有精品 | 欧美久久久久久久久久久久久 | 久久看片网 | 91亚洲永久精品 | 国产一区二区网址 | 国产麻豆剧传媒免费观看 | 欧洲高潮三级做爰 | 精品免费国产一区二区三区四区 | 在线欧美最极品的av | 日韩中文字幕在线观看 | 亚洲春色综合另类校园电影 | 久久躁日日躁aaaaxxxx | 狠狠久久伊人 | 中文字幕在线播放一区二区 | 婷婷色综 | 97国产视频 | 国产精品综合久久久 | 在线视频 日韩 | 亚洲天堂自拍视频 | 精品久久一区 | 国产一区欧美在线 | 九九色综合 | 免费视频黄色 | 婷婷精品国产欧美精品亚洲人人爽 | 99热精品在线观看 | 色综合久久88色综合天天6 | 久草视频免费 | 婷婷丁香自拍 | 九草视频在线 | 国产成人一区二区三区免费看 | 一区二区三区在线免费观看 | 丁香综合网 | 一区二区三区在线免费 | 黄色软件网站在线观看 | 亚洲网站在线看 | 天天操夜夜操国产精品 | 久久久久久久久久久网站 | av免费网站在线观看 | 国产精品免费视频久久久 | 91在线蜜桃臀 | 欧美成人精品三级在线观看播放 | 91精品视频导航 | 国产在线国偷精品产拍免费yy | 又黄又爽免费视频 | 97人人澡人人添人人爽超碰 | 婷婷中文字幕在线观看 | 99久久精品无免国产免费 | 日本公妇色中文字幕 | 亚洲国产视频网站 | 国产成人精品一区二区三区在线观看 | 成人91在线 | 在线看片中文字幕 | 国产免费观看高清完整版 | 日本aa在线 | 午夜在线观看影院 | 九九久久精品 | 黄色影院在线播放 | 成人免费观看完整版电影 | 丝袜美女视频网站 | 亚洲精品视频在线观看免费视频 | 国产精品99久久久久 | 欧美日韩在线精品一区二区 | 午夜手机电影 | 国产自制av | 日韩中文字幕第一页 | 日韩在线观看免费 | 日韩色在线 | 国产精品成人一区 | 激情九九 | 99久久久久成人国产免费 | 亚洲激情六月 | 99在线视频精品 | 99精品国产一区二区三区麻豆 | 国产一卡二卡四卡国 | 日韩av资源站 | 国产成人在线观看免费 | 久久九精品| 久久久久久久久久久免费视频 | 久久综合婷婷 | 九九久久电影 | 欧美黑吊大战白妞欧美 | 免费在线观看的av网站 | 精品久久在线 | www.狠狠色.com| 欧美精品久久久久久久久老牛影院 | 久久综合中文字幕 | 久久精品99国产精品日本 | 久久99热久久99精品 | 8x成人免费视频 | 深爱五月网| 91麻豆精品国产91久久久久 | 国产精品久久久久久久久久久久冷 | 国产xx在线| 国产精品久久久久久久久蜜臀 | 日韩影片在线观看 | 九九爱免费视频在线观看 | 成年人国产在线观看 | 久草青青在线观看 | 日韩一区二区三区免费视频 | 久草在线久草在线2 | 曰韩在线 | 夜夜操狠狠干 | 日韩电影精品一区 | 00av视频| 欧美一区二区三区在线观看 | 91丨九色丨国产在线 | 可以免费看av | 美女视频久久 | 久青草影院| 九九热只有精品 | 亚洲视频综合 | 天天干,夜夜操 | 亚洲免费观看视频 | 最新影院 | 久久免费视频在线观看 | 天天射天天干天天爽 | 中文字幕在线网址 | 九九精品毛片 | 人人草在线观看 | 午夜少妇一区二区三区 | 九九热只有这里有精品 | 欧美精品视 | 99久久久久免费精品国产 | 深夜国产在线 | 一区二区三区 中文字幕 | 久久午夜鲁丝片 | 久久综合五月天 | 美女福利视频在线 | 深夜免费福利网站 | 午夜av色| 91av福利视频 | 日韩精品一区二区三区免费视频观看 | 日日干干 | 久久久久久久久精 | 久久欧美精品 | 色资源中文字幕 | 黄色免费av | 久久永久免费 | 天天色综合天天 | 91中文字幕一区 | 国产 日韩 在线 亚洲 字幕 中文 | 蜜臀av夜夜澡人人爽人人桃色 | 亚洲综合成人在线 | 免费国产在线精品 | 99久久婷婷国产 | 国产在线播放一区 | 中文字幕av免费 | 久久久久久久久久国产精品 | 伊人五月| 射综合网 | 国产日韩欧美在线观看 | 区一区二区三在线观看 | 韩日av在线 | 成年人视频免费在线播放 | 色香天天| 亚洲欧美激情精品一区二区 | 九九免费在线看完整版 | 超碰97久久 | 成人黄在线| 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产综合视频在线观看 | 久久免费视频这里只有精品 | 精品久久网 | 亚洲天堂精品视频 | 成人免费在线视频 | 国模精品一区二区三区 | 免费黄a | av永久网址 | 一本大道久久精品懂色aⅴ 五月婷社区 | 黄色亚洲大片免费在线观看 | 成人av一区二区三区 | 久久视频在线观看免费 | 久草在线一免费新视频 | 91av原创 | 中文字幕在线国产精品 | 色在线网| 国产丝袜网站 | 国产亚洲精品久久久久久久久久 | 天干啦夜天干天干在线线 | 亚洲国产小视频在线观看 | 日韩在线中文字幕视频 | 午夜精品99久久免费 | 日韩欧美在线免费观看 | 欧美精品一区二区在线观看 | 欧美一级电影在线观看 | www..com黄色片| 欧美日韩久久一区 | av亚洲产国偷v产偷v自拍小说 | 国产一区二区三区黄 | 97视频精品| 亚洲综合成人婷婷小说 | 日日夜夜天天久久 | 国产精品99蜜臀久久不卡二区 | 97天天综合网| 97人人澡人人添人人爽超碰 | 最近免费中文视频 | 私人av| 国产精品18久久久久vr手机版特色 | 久久高清av | 在线免费视 | 亚洲区视频在线 | 国产精品av在线 | a级国产毛片 | 在线观看 亚洲 | 午夜三级理论 | 黄色一集片 | 91视频88av | 久久手机免费视频 | 日韩国产在线观看 | 麻豆91小视频| 日韩高清国产精品 | 日本久久不卡视频 | 九九涩涩av台湾日本热热 | 免费无遮挡动漫网站 | 91视频久久久久 | 五月花丁香婷婷 | 日韩专区在线播放 | 日本在线观看一区二区三区 | 亚洲伦理一区二区 | 91精品久久久久 | 日韩一区正在播放 | 欧美日韩一区二区在线 | 在线成人小视频 | 国产三级久久久 | 国产精品女教师 | 在线之家免费在线观看电影 | 91成人区| 中文字幕第 | 日韩成人精品一区二区 | 色婷婷激婷婷情综天天 | 欧美一级视频免费 | 久久99国产精品自在自在app | 日日草av| 国产精品久久av | 国产一级片一区二区三区 | 成人四虎| 亚洲天堂社区 | 久久99精品国产99久久6尤 | 日韩精品免费在线播放 | 精品国产一区二区三区久久久 | 国产亚洲精品久久久久久久久久 | 日韩网站在线 | 韩日精品在线 | 一级黄色片在线免费观看 | 国产亚洲精品久久久久久无几年桃 | 97日日碰人人模人人澡分享吧 | 欧美性猛片, | 国产福利精品一区二区 |