3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows窗口分析

發布時間:2025/3/12 windows 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows窗口分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(本文嘗試通過一些簡單的實驗,來分析Windows的窗口機制,并對微軟的設計理由進行一定的猜測,需要讀者具備C++、Windows編程及MFC經驗,還得有一定動手能力。文中可能出現一些術語不統一的現象,比如“子窗口”,有時候我寫作“child window”,有時候寫作“child”,我想應該不會有太大影響,文章太長,不一一更正了)

問題開始于我的最近的一次開發經歷,我打算把程序的一部分界面放在DLL中,而這部分界面又需要使用到Tooltip,但DLL中的虛函數PreTranslateMessage無法被調用到,原因大家可以在網上搜索一下,這并不是我這篇文章要講的。PreTranslateMessage不能被調,那Tooltip也就不能起作用,因為Tooltip需要在PreTranslateMessage中加入tooltip.RelayEvent(&msg)來觸發事件,方可正常顯示。解決方法有好幾個,我用的是比較麻煩的一個——完全自己手動編寫Tooltip,然后用WM_MOUSEMOVE等事件來觸發Tooltip顯示,寫好之后發現些小問題,那就是調試運行時候IDE給了個warning,說我在析構函數中調用了DestroyWindow,這樣會導致窗口OnDestry和OnNcDestroy不被正常調用,這個問題我以前遇到過,當然解決方法也是顯而易見的,只需要在窗口對象(C++概念,非Windows內核對象,下文同)銷毀前,調用DestroyWindow即可。對于要銷毀的這個窗口的子窗口,是不需要顯式調用DestroyWindow的,因為父窗口在銷毀的時候也會銷毀掉它們,OK,我把這個過程用個示意圖說明一下:

圖1

上圖表示了App Window及其子窗口的關系,現在假設我們要銷毀Parent Window 1(對應的對象指針是m_pWndParent1),我們可以m_pWndParent1->DestroyWindow(),這樣Child Window 1,Parent Window 2,Child Window 2都被銷毀了,銷毀的時候這些窗口的OnDestry和OnNcDestroy都被調用了,最后delete m_pWndParent1,此時m_pWndParent1->m_hWnd已經是NULL,不會再去調用Destroy,在析構的時候也就不會出現Warning。但如果不先執行m_pWndParent1->DestroyWindow()而直接delete m_pWndParent1,那么在CWnd::~CWnd中就會調用DestroyWindow(m_hWnd),這樣會產生WM_DESTROY和WM_NCDESTROY,會嘗試去調用OnDestry和OnNcDestroy,但由于是在CWnd的函數~CWnd()的內部調用這兩個成員,此時的虛函數表指針并不指向派生類的虛函數表,因此調用的其實是CWnd::OnDestroy和CWnd::OnNcDestroy,派生類的OnDestry和OnNcDestroy不被調用,但我們很多時候把釋放內存等操作寫在派生類的OnDestroy和OnNcDestroy中,這樣,就容易導致內存泄露和邏輯混亂了。

上面這些道理我當然是知道的,但Warning還是出現了,而且我用排除法確定了是跟我寫的那個Tooltip有關,下面是關于我的Tooltip的截圖:

圖2

大家看到,Tooltip顯示在我的圖形窗口上,它是個彈出式(popup)窗口,其內容為當前鼠標光標的坐標值,圖形窗口之外,我是不想讓它顯示的,那么按照我的思路,Tooltip就應該設計是圖形窗口的子窗口,它的窗口對象就應該作為圖形窗口對象的成員,在圖形窗口OnCreate的時候創建,在圖形窗口被DestroyWindow的時候自動銷毀,前面提到過,父窗口被銷毀的時候,其子窗口會被自動銷毀,沒錯吧,所以不需要顯式去對Tooltip調用DestroyWindow。可事實證明了這樣是有問題的,因為Tooltip的父窗口根本不是,也不能是圖形窗口。大家可以看到我的圖形窗口是作為一個子窗口嵌入到別的窗口中去的,它的屬性包含了WS_CHILD,通過實驗,我發現Tooltip的父窗口只能指定為程序主窗口,如果企圖指定為那個圖形窗口的話,它就自動變為程序主窗口,再進一步研究發現,彈出式窗口的父窗口都不能是帶WS_CHILD風格的窗口,然后打開spy++查看,彈出式窗口的上一級都是桌面,可是,通過GetParent函數,得到的彈出式窗口的父窗口卻是程序主窗口而不是桌面,為什么?……問題越來越多,我糊涂了,上面說的都是在我深入理解前,所看到的現象,包括了我的一些概念認識方面的錯誤。

好吧,我們現在開始,一點點地通過實驗去攻破這些難題!

一、神秘的WS_OVERLAPPED

我們從WinUser.h頭文件中可以看出,窗口可分三種,其Window Styles定義如下:

  • #define?WS_OVERLAPPED???????0x00000000L
  • #define?WS_POPUP????????????0x80000000L
  • #define?WS_CHILD????????????0x40000000L
  • 那么我們很容易得到這個結論:style的最高位是1的,是一個popup窗口,style的次高位是1的,代表是一個child窗口,如果最高位次高位都是0,那這個窗口就是一個overlapped窗口,如果兩位都是1,厄……MSDN告訴我們不能這么干,事實呢?我后面再講。其實這個結論是有點過時的,甚至很能誤導人,不是我們的原因,很可能是Windows的歷史原因,為什么?具體也是后面講。嘿嘿。

    OK,我們現在開始來嘗試,看看這些風格究竟影響窗口幾何,對了,準備spy++,這是必備工具。

    用VC++的向導創建一個Hello World的Windows程序,注意是Windows程序,不是MFC的Hello World,這樣我們可以繞開MFC,專注于查看一些Windows的技術細節,編譯,運行。

    圖3

    然后用spy++查看這個窗口的風格,發現其風格顯示為“WS_OVERLAPPEDWINDOW|WS_VISIBLE|WS_CLIPSIBLING|WS_OVERLAPPED”。此時它的創建函數為:

  • hWnd?=?CreateWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW,?CW_USEDEFAULT,?0,?CW_USEDEFAULT,?0,?NULL,?NULL,?hInstance,?NULL);
  • 只制定了一個WS_OVERLAPPEDWINDOW,但我們很快就找到了WS_OVERLAPPEDWINDOW的定義:

  • #define?WS_OVERLAPPEDWINDOW?(WS_OVERLAPPED?????|?/
  • ?????????????????????????????WS_CAPTION????????|?/
  • ?????????????????????????????WS_SYSMENU????????|?/
  • ?????????????????????????????WS_THICKFRAME?????|?/
  • ?????????????????????????????WS_MINIMIZEBOX????|?/
  • ?????????????????????????????WS_MAXIMIZEBOX)
  • 原來overlapped窗口就是有標題,系統菜單,最小最大化按鈕和可調整大小邊框的窗口,這個定義是正確的,但只是個我們認知上的概念的問題,因為popup和child窗口也同樣可以擁有這些(后面證明)。由于WS_OVERLAPPED為0,那我們是不是可以把WS_OVERLAPPEDWINDOW定義中的WS_OVERLAPPED拿掉呢?那是肯定的,那也就是說WS_OVERLAPPED什么都不是!我們只作popup和child的區分,是不是這樣?也不是,我們繼續實驗。

    很簡單,接下去我們只給這個向導生成的代碼加一點點東西,就是把CreateWindow改成:

  • hWnd?=?CreateWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW|WS_POPUP,?CW_USEDEFAULT,?0,?CW_USEDEFAULT,?0,?NULL,?NULL,?hInstance,?NULL);
  • 對,給窗口風格增一個popup風格,看看會怎么樣?運行!這回可不得了,窗口縮到了屏幕的左上角,并且寬度高度都變為了最小,當然,你還是可以用鼠標拖動窗口邊緣來調整它的大小的。如圖:

    圖4

    這是為什么呢?觀察CreateWindow的,第四、第五、第六和第七參數,分別為窗口的x坐標,y坐標,寬度,和高度,CW_USEDEFAULT被define成0,所以窗口被縮到左上角去也就不奇怪了,可沒有popup,光是overlapped風格的窗口,為什么不會縮呢?看MSDN的說明,對第四個參數的說明:“If this parameter is set to CW_USEDEFAULT, the system selects the default position for the window's upper-left corner and ignores the y parameter. CW_USEDEFAULT is valid only for overlapped windows; if it is specified for a pop-up or child window, the x and y parameters are set to zero. ”其余幾個參數也有類似的描述,這說明了什么?說明Windows對overlapped和popup還是作區分的,而這點,算是我們發現的第一個不同。哦,還有件事情,就是用spy++觀察其風格,發現其確實多了一個WS_POPUP,其余沒什么變化。

    繼續,這回還是老地方,把WS_POPUP改為WS_CHILD,試試看,這回創建窗口失敗了,返回0,用GetLastError查看具體錯誤信息,得到的是:“1406:無法創建最上層子窗口。”看來桌面是不讓我們隨便搞的。繼續,還是老地方,這回改成:

  • hWnd?=?CreateWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW|WS_POPUP|WS_CHILD,?CW_USEDEFAULT,?0,?CW_USEDEFAULT,?0,?NULL,?NULL,?hInstance,?NULL);
  • 嗯?有沒搞錯,又是popup又是child,肯定不能成功吧,不試不知道,居然成功了,這個創建出來的窗口乍一看,跟popup風格的很像,但用起來有些怪異,比如:當它被別的窗口擋住的時候,不能通過點擊它的客戶區來讓它顯示在前面,即使點擊它的標題欄,也是要松開鼠標左鍵,它才能顯示在前面,還有就是用spy++的“瞄準器”沒法準確捕捉到這個窗口,瞄準器對準它的時候,就顯示Caption為“Program Manager”,class為“Program”,“Program Manager”是什么?其實就是我們所看到的這個桌面(注意,不是桌面,我說的是我們說“看到的桌面”,就是顯示桌面圖標的這個所能看到的桌面窗口,和前面提到的桌面窗口是有區別的)的父窗口的父窗口,這個窗口一般情況下是不能直接“瞄準”到的,這點可以通過spy++證實,如圖:

    圖5

    圖6

    spy++不能直接“瞄準”這個popup和child并存的怪窗口,但我們有別的辦法捕捉到它,<Alt>+<F3>,輸入窗口的標題來查找(記得運行程序后刷新一下才能找到),結果見下圖:

    圖7

    我們從上圖中清楚地看到,popup和child并存!用spy++逐個查看桌面窗口的下屬,這種情況還是無獨有偶的,但這樣的窗口代表了什么意義,我就不清楚了,總之用起來怪怪的,對Microsoft來說,這可能就是Undocumented,OK,我們了解到這里就行了,但一般情況下,我們不要去創建這種奇怪的窗口。這幾輪實驗給我們什么啟示?設計上的啟示:一個應用程序的主窗口通常是一個Overlapped類型的窗口,當然有時可以是一個popup窗口,比如基于對話框的程序,但不應該是一個child窗口,盡管上面演示了如何給應用程序主窗口加入child風格。

    那還有一個問題,我為什么認為WS_OVERLAPPED神秘呢?這還算是拜spy++所賜,按照我們一般的想法,如果一個窗口的風格的最高兩位都是0,它既不是popup也不是child的時候,那它就是Overlapped。事實上spy++的判定不是這樣的,就以剛才的實驗為例,當使用WS_OVERLAPPEDWINDOW|WS_POPUP風格創建窗口的時候,WS_OVERLAPPED和WS_POPUP屬性同時出現了,我做了很多很多的嘗試,企圖找出其中規律,看看spy++是怎么判定WS_OVERLAPPED的,但至今沒結論,我到MSDN上search,未果,有人提起這個問題,但沒有令我滿意的答復,下面這段文字是我找到的可能有點線索的答復:

    Actually, Microsoft Spy++ is wrong.
    There are two bits in the window style that control its type. If the high-order bit of the style DWORD is set, the window is a popup window. If the next bit is set, the window is a child window. If neither is set, the window is overlapped. (If both are set, the result is undocumented.)

    Look at these definitions from WinUser.h.

  • #define?WS_OVERLAPPED???????0x00000000L
  • #define?WS_POPUP????????????0x80000000L
  • #define?WS_CHILD????????????0x40000000L
  • Your window style (0x94c00880) has the high-order bit set and the next bit clear so it is a popup window, not an overlapped window.

    The correct way to identify all three types of windows (this is what Spy++ should do) is

  • dwStyle?=?GetWindowLong(hWnd,?GWL_STYLE);
  • if?(dwStyle&WS_POPUP)
  • ?//?it's?a?popup?window
  • else?if?(dwStyle&WS_CHILD)
  • ?//?it's?a?child?window
  • else
  • ?//?it's?an?overlapped?window
  • 這斷描述跟我的想法一致。要知道,就算你只給窗口一個WS_POPUP的風格,WS_OVERLAPPED也會顯示在spy++上的,我認為這十分有問題,究竟spy++如何判,估計得請教比爾蓋茨了。還有一段有趣的描述,估計也有所幫助:

    As long as...
    WS_POPUP | WS_OVERLAPPED
    ...is absolutelly equivalent with...
    WS_POPUP
    ... why do you care if Spy++ lists WS_OVERLAPPED or not?

    Please stop playing "Thomas Unbeliever" with us.
    Becomes too expensive to use "walking on the water" device here again, and again. ;)

    雖然這么說,我還是認為,spy++給了我們不少誤導,那么對WS_OVERLAPPED的討論就暫時告一段落吧,作為一個技術人,很難容忍自己無法理解的邏輯,我就是這么種人……不過如果再扯下去的話這篇文章就不能結束了,所以姑且認為,這是spy++的錯,而我們還是認為窗口分3種——popup,child和Overlapped。(Undocumented不在此列,也不在本文講述之列)

    二、Parent與Owner

    這是內容最多的一節,做好心理準備。

    微軟和我們開了個玩笑,告訴我們,窗口和人一樣,可以有父母,有主人……我們先來看一個最著名的Windows API:

  • HWND?CreateWindowEx(
  • ??DWORD?dwExStyle,??????//?extended?window?style
  • ??LPCTSTR?lpClassName,??//?registered?class?name
  • ??LPCTSTR?lpWindowName,?//?window?name
  • ??DWORD?dwStyle,????????//?window?style
  • ??int?x,????????????????//?horizontal?position?of?window
  • ??int?y,????????????????//?vertical?position?of?window
  • ??int?nWidth,???????????//?window?width
  • ??int?nHeight,??????????//?window?height
  • ??HWND?hWndParent,??????//?handle?to?parent?or?owner?window
  • ??HMENU?hMenu,??????????//?menu?handle?or?child?identifier
  • ??HINSTANCE?hInstance,??//?handle?to?application?instance
  • ??LPVOID?lpParam????????//?window-creation?data
  • );
  • 猜對了,我就是從MSDN上copy下來的,看第九個參數的名字叫hWndParent,顧名思義哦,這就是Parent窗口了,不過我們中國人不喜歡稱之“父母窗口”,我們喜歡叫它“父窗口”,簡單一點。其實這個名字對我們造成了不少的誤導,我只能說,可能也是由于歷史原因,比如在Windows 1.0(1985年出的,當時沒什么影響力)的時候,只有Parent這個概念,沒有Owner的概念。

    回頭看看文章開始我提起的,我企圖將Tooltip的父窗口設置為一個圖形窗口,不能成功,Tooltip的父窗口會自動變成應用程序主窗口,這是為什么?好,現在開始講概念了,都是我花了很多時間在互聯網上搜索,篩選,確認,得出來的結論:

    規則一:Owner window控制了Owned window的生存,當Owner window被銷毀的時候,其所屬的Owned window就會被銷毀。
    規則二:Parent window控制了Child window的繪制,Child window不可能顯示在其Parent window的客戶區之外。
    規則三:Parent window同時控制了Child window的生存,當Parent window被銷毀的時候,其所屬的Child window就會被銷毀。
    規則四:Owner window不能是Child window。
    規則五:Child window一定有Parent(否則怎么叫Child?),一定沒有Owner。
    規則六:非Child window的Parent一定是桌面,它們不一定有Owner。

    這是比較重要的幾點,如果你認為這跟你以前學到的,或者認知的有所不同,先別急著抗議,先看看我是怎么理解的。除了這幾條規則,下面我還會逐步給出一些規則。

    先說比較好理解的Child window,上文提到了,包含了WS_CHILD風格的窗口就叫Child window,我們中文叫“子窗口”。那么我前面提到的我寫的那個Tooltip,是不是“子窗口”呢?——當然不是了,它沒有WS_CHILD風格啊,它是popup風格的,我想當然地認為在創建它的時候給它指定了那個Parent參數,那它的Parent就是那個參數,其實是錯的。這個實驗最簡單了,隨便找些應用程序,比如“附件”里的計算器,用spy++的“瞄準器”觀察上面的按鈕等“子窗口”,在Styles標簽中,我們可以看到WS_CHILD(或者WS_CHILDWINDOW,一樣的)屬性,然后在Windows標簽中,我們可以清楚地看到,凡是包含了WS_CHILD屬性的窗口(子窗口),都沒有Owner window,不信還可以繼續觀察其它應用程序,省去自己編程了。再看它們的Parent window,是不是一定有的?——當然一定有。

    前面說了,子窗口不能顯示在父窗口客戶區之外,我們最常見的子窗口就是那些擺在對話框上的控件,什么button啊,listbox啊,combobox啊……都有個共同特點,不能拖動的,除非你重寫它們的window procedure,然后響應WM_MOUSEMOVE等消息,實現所謂“拖動”。那么有沒有能夠像應用程序主窗口那樣有標題欄,能夠被自由拖動的子窗口呢?——當然有!要創建是嗎?簡單,直接用MFC向導創建一個MDI程序即可,MDI的那些View其實就是可以自由拖動的子窗口,可以用spy++查看一下它們的屬性,當然,你是不能把它們拖出主窗口的客戶區的。也許你跟我一樣,覺得MFC封裝了過多的技術細節,想完全自己手動創建一個能拖動的子窗口,而且看起來就像個MDI的界面,OK,follow me。

    首先當然是用應用程序向導生成最普通的Window應用程序了。然后增加一個窗口處理函數,也就是我們準備創建的子窗口的處理函數了。

  • LRESULT?CALLBACK?WndProcDoNothing(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
  • {
  • ?return?DefWindowProc(hWnd,?message,?wParam,?lParam);
  • }
  • DoNothing?好名字。注冊之:

  • ?WNDCLASSEX?wcex;
  • ?wcex.cbSize?=?sizeof(WNDCLASSEX);?
  • ?wcex.style?????????=?CS_HREDRAW?|?CS_VREDRAW;
  • ?wcex.lpfnWndProc???=?(WNDPROC)WndProcDoNothing;
  • ?wcex.cbClsExtra????=?0;
  • ?wcex.cbWndExtra????=?0;
  • ?wcex.hInstance?????=?hInstance;
  • ?wcex.hIcon?????????=?LoadIcon(hInstance,?(LPCTSTR)IDI_ALLWINDOWTEST);
  • ?wcex.hCursor???????=?LoadCursor(NULL,?IDC_ARROW);
  • ?wcex.hbrBackground?=?(HBRUSH)(COLOR_WINDOW+1);
  • ?wcex.lpszMenuName??=?NULL;?//子窗口不能擁有菜單,指定了也沒有用
  • ?wcex.lpszClassName?=?TEXT("child_window");
  • ?wcex.hIconSm???????=?LoadIcon(wcex.hInstance,?(LPCTSTR)IDI_SMALL);
  • ?RegisterClassEx(&wcex);
  • 最后當然是把它給創建出來了:

  • ?g_hwndChild?=?CreateWindowEx(NULL,?TEXT("child_window"),?TEXT(""),?WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW|WS_CLIPSIBLINGS,?30,?30,?400,?300,?hWnd,?NULL,?hInstance

  • 關于WS_CLIPSIBLINGS屬性,下文將提到。好,就這樣,大家看看運行效果:

    圖8

    是不是很少遇到這種窗口組織結構?確實很少人這樣用,而且哦,你會發現子窗口的標題欄沒辦法變為彩色,它一直是灰的,就表示它一直處于未激活狀態,你怎么點它,拖它,調它,都沒用的,而這個時候程序主窗口一直顯示為激活狀態,如何激活這個子窗口?我曾經對此苦思冥想,最后才知道,子窗口是無法被激活的,你立即反駁:“那MFC如何做到的?”哈哈,好,你反應夠快,我下文會給你演示如何“激活”子窗口。(注意是加引號的)現在嘗試移動主窗口,你會發現所有它的子窗口都會跟著主窗口移動的,這就好像我們看蘋果落地一樣,不會覺得奇怪,但你有沒有想過,主窗口移動的時候,其子窗口對屏幕的位置也發生了變化,不變的是相對主窗口的客戶區坐標。這就是子窗口的特性。再試試看啟用/禁用主窗口,顯示/隱藏主窗口看看,就不難得出結論:

    規則七:子窗口會隨著其父窗口移動,啟用/禁用,顯示/隱藏。

    子窗口我們就暫時講那么多,接著講所有者窗口,就是Owner window,由于子窗口一定沒有Owner,因此Owner window是對popup和Overlapped而言的,而popup和Overlapped前面也提到了,不一定有Owner,不像Child那樣一定有Parent。現在進入我們下一個實驗:

    還是用向導生成最普通的Windows hello world程序,步驟和上一個實驗很相似,僅僅改了一點點東西,改了哪點?就是把CreateWindowEx函數的第四個參數的WS_CHILD拿掉,其余不變,代碼我就不貼了,大家編譯并運行看看。大家會看到類似這個效果:

    圖9

    彈出窗口的caption是藍色的,說明它處于激活狀態,如果你現在點擊程序主窗口,那彈出窗口的標題欄就變灰,而程序主窗口的標題欄變藍,兩個窗口看起來就像并列的關系,但你很快發現它們其實不并列,因為如果它們有重疊部分的話,彈出窗口總是遮擋程序主窗口。用spy++觀察之,發現程序主窗口就是彈出窗口的Owner。

    規則八:非Child window總是顯示在它們的Owner之前。

    看到了沒?這個時候CreateWindowEx的第九個參數的意義就不是Parent window,而是Owner,那把這個參數改為NULL,會有什么效果呢?馬上試試看,反正這么容易。

    圖10

    初一看沒什么變化,其實變化大了,一是主窗口這回可以顯示在彈出窗口之前了,二是任務欄上出現了兩個button。

    圖11

    用spy++觀察到這兩個窗口的Owner都是NULL。

    規則九:Owner為NULL的非Child窗口能夠(不是一定哦)在任務欄上出現它們的按鈕。

    這個時候,你應該清楚為什么給一個MessageBox正確指定一個Owner這么重要了吧?我以前有個同事,非常“厲害”,他創建了一個程序,一旦出現點什么問題,就能把MessageBox彈得滿屏都是,而且把任務欄霸占得渣都不剩,他大概是沒明白這個道理。MessageBox是一個非child窗口,如果不指定一個正確的Owner,那彈出MessageBox之后,Owner還是處于可操作的狀態,兩個窗口看起來是并列的,都在任務欄上有顯示,如果再彈出MessageBox,先關閉那個MessageBox?我看先關哪個都沒問題,因為界面操作上沒有限制,但這樣很容易導致邏輯混亂,如果不幸走入了個死循環,連續彈MessageBox,那就像這位同事寫的那個程序那樣,滿屏皆是消息框了。

    我們現在來進行一些稍微復雜點點的實驗,就是創建A彈出窗口,其Owner為主窗口,創建B彈出窗口,其Owner為A窗口,創建C彈出窗口,其Owner為B窗口。步驟模仿上面的窗口創建步驟即可,好,編譯,運行,效果大致如此:

    圖12

    現在,把主窗口最小化,看看發生了什么事情。你會發現A窗口不見了,而B,C窗口尚在,A窗口究竟是跟隨主窗口一起最小化了呢,或者被銷毀了呢?還是被隱藏了呢?答案是被隱藏了,我們可以通過spy++找到它,發現它的屬性里邊沒有WS_VISIBLE。那現在將主窗口還原,A這時候出現了,那現在我們最小化A,Oh?What happen?B不見了,主窗口和C都還在,我們還是老辦法,用spy++看B,發現它沒了WS_VISIBLE屬性,現在還原A窗口,方法如下圖所示:

    圖12_x
    注意,最小化的A并不顯示在任務欄上。還原A后B也出現了。

    規則十:Owner窗口最小化后,被它擁有的窗口會被隱藏。

    前面測試的是最小化,那我們現在不妨來測試一下,讓A隱藏,會怎么樣?在主窗口里創建一個button,點這個button,就執行ShowWindow(g_hwndA, SW_HIDE),如圖:

    圖13

    你會發現,被隱藏的只有A,A隱藏后主窗口,B和C都是可見的,你可以繼續嘗試,隱藏B和C,或者主窗口,不過,你隱藏了主窗口的話恐怕就沒法通過主窗口的菜單來關閉程序了,只能打開任務管理器結束掉程序。

    規則十一:Owner隱藏,不會影響其擁有的窗口。

    現在不是最小化,也不是隱藏,而是測試“關閉”,即銷毀窗口,嘗試關閉A,發現B,C被關閉;嘗試關閉B,發現C被關閉。這個規則也就是規則一了,不必再列。

    好,我不可能把所有的規則都列出來,但我相信前面所寫的這些東西,對大家起到了拋磚引玉的作用了,其它規則,也可以通過類似的實驗得出,或者用已有的規則去推導。那在轉入下一節前,我提點問題:

    為什么子窗口沒有Owner?(就是我們來猜猜微軟為什么這樣設計)試想一個Child既有Parent,又有Owner,Parent控制其繪制,Owner控制其存在,在Owner銷毀的時候,子窗口就要被銷毀,而其Parent有可能還繼續存在,那這個子窗口的消失可能有點不明不白,這是其中一個原因,另一個原因也類似,如果Parent不控制子窗口的存在,只管其繪制,那么在Parent銷毀的時候,Owner可以繼續存在,這個時候的子窗口是存在,而又不能顯示和訪問的,這可能會導致別的怪異問題,既然起了Child這個名字,就應該把它全權交給Parent,由Parent來決定它的一切,我想這就是微軟的道理。

    那我們如何獲取一個窗口的Parent和Owner?大家都知道API函數,GetParent,這是用來獲取Parent窗口句柄的API——慢!這并不完全正確!大家再仔細點看看MSDN,再仔細點:

    If the window is a child window, the return value is a handle to the parent window. If the window is a top-level window, the return value is a handle to the owner window.

    什么是top-level window?就是非Child window,這個后面再詳細談這個,現在注意看了,GetParent返回的有可能不是parent,對于非child窗口來說,返回的就不是parent,為什么?因為非child窗口的parent恒定是Desktop啊(規則6),這還需要獲取嗎?我們接下去的實驗是用來測試GetParent這個函數是否工作正常的,什么?測試M$提供的API,沒錯,呵呵,當一把微軟的測試員吧。接上面那個實驗:

    //在窗口創建完成后,調用下面的代碼,在第一個GetParent處設置個斷點,查看返回值,如果返回NULL,按照MSDN所說的,用GetLastError看看是否有出錯。

  • {
  • ?DWORD?rtn;
  • ?HWND?hw?=?GetParent(hWnd);?//獲取主窗口的“Parent”
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?GetParent(g_hwndA);?//獲取A的“Parent”
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?GetParent(g_hwndB);?//獲取B的“Parent”
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?GetParent(g_hwndC);?//獲取C的“Parent”
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • }
  • 我的實驗結果有些令我不解,清一色返回0,包括GetLastError,也就是說沒有出錯,那GetParent返回0,根據MSDN上的描述,原因只可能是:這些窗口確實沒有Owner。不對啊?難道前面的規則和推論都是錯誤的不成?我創建它們的時候,就明明白白地指定了hWndParent參數,而且上面的實驗也表明了他們之間的Owner和Owned關系,那是不是GetParent錯了?我想是的,你先別對著我扔磚頭,想看到正確的情況么?好,我弄給你看。

    我們是如何創建A,B和C這幾個彈出窗口的?我再把創建它們的語句貼一下吧:

  • g_hwndX?=?CreateWindowEx(NULL,?TEXT("child_window"),?TEXT("X"),?WS_VISIBLE|WS_OVERLAPPEDWINDOW|WS_CLIPSIBLINGS,?30,?30,?400,?300,?hWnd,?NULL,?hInstance,?NULL);
  • 現在把這個語句改為:

  • g_hwndX?=?CreateWindowEx(NULL,?TEXT("child_window"),?TEXT("X"),?WS_POPUP|WS_VISIBLE|WS_OVERLAPPEDWINDOW|WS_CLIPSIBLINGS,?30,?30,?400,?300,?hWnd,?NULL,?hInstance,?NULL);
  • 對,就是加上一個WS_POPUP,看看情況變得怎么樣?

    很驚訝,對不?GetParent這回全部都正確地按照MSDN的描述工作了,這是我發現的popup和Overlapped的第二個差別,第一個差別?在文章開頭附近,自己回去找。而spy++顯示出來的那個Parent,其實就是GetParent返回的結果。記住,對于非child窗口來說,GetParent返回的并不是Parent,MSDN也是這么說的,你看看這個函數的名字是不是很有誤導性?還有spy++也真是的,將錯就錯。好吧,就讓它錯去吧,但我們得記住:對非Child窗口來說,Parent一定是桌面。好,再有個問題,看剛剛這個實驗,對于有WS_POPUP風格的非Child窗口來說,GetParent能夠取回它的Owner,可對于沒有WS_POPUP風格的非Child窗口來說,GetParent恒定返回0,那我們如何有效地取得非Child窗口真正的主人呢?方法當然是有的,看:

  • {
  • ?DWORD?rtn;
  • ?HWND?hw?=?GetWindow(hWnd,?GW_OWNER);?//獲取主窗口的Owner
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?GetWindow(g_hwndA,?GW_OWNER);???//獲取A的Owner
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?GetWindow(g_hwndB,?GW_OWNER);???//獲取B的Owner
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?GetWindow(g_hwndC,?GW_OWNER);???//獲取C的Owner
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • }
  • 這么一來,無論是否帶有WS_POPUP風格,都能夠正常取得其所有者了,這個跟spy++的結果一致,用GetWindow取得的Owner總是正確的,那有沒有一種方法,使得取得的Parent總是正確的?很遺憾,沒有直接的API,包括使用GetWindowLong(hwnd, GWL_HWNDPARENT)都不能一直正確返回Parent,BTW,有位高人說,GetWindowLong(hwnd, GWL_HWNDPARENT)和GetParent(hwnd)有時候會得到不同的結果,不過這個我嘗試不出來,我觀察的,它們總是返回一樣的結果,無論對什么窗口,真懷疑GetParent(hwnd)就是return (HWND)GetWindowLong(hwnd, GWL_HWNDPARENT),雖然我們不能直接一步獲取正確的Parent,但我們可以寫一個簡單的函數:

  • HWND?GetTrueParent(HWND?hwnd)
  • {
  • ?DWORD?dwStyle?=?GetWindowLong(hwnd,?GWL_STYLE);
  • ?if((dwStyle?&?WS_CHILD)?==?WS_CHILD)
  • ??return?GetParent(hwnd);
  • ?else
  • ??return?GetDesktopWindow();
  • }
  • 你終于憋不住了,對我大吼:“你有什么依據說非Child窗口的Parent一定是Desktop?”我當然是有依據的,首先是這些非child window的繪制,不能超出桌面,超出桌面就什么都看不見了,只能是桌面管理著它們的繪制,如果它們確實存在Parent的話,當然,聰明你認為這個理由并不充分,OK,我們編程來證明,先介紹一個API:

  • HWND?FindWindowEx(
  • ??HWND?hwndParent,??????//?handle?to?parent?window
  • ??HWND?hwndChildAfter,??//?handle?to?child?window
  • ??LPCTSTR?lpszClass,????//?class?name
  • ??LPCTSTR?lpszWindow????//?window?name
  • );
  • 又被你猜對了,我是從MSDN上copy下來的(^_^),看MSDN對這個函數的說明:

    hwndParent
    [in] Handle to the parent window whose child windows are to be searched.
    If hwndParent is NULL, the function uses the desktop window as the parent window. The function searches among windows that are child windows of the desktop.

    hwndChildAfter
    [in] Handle to a child window. The search begins with the next child window in the Z order. The child window must be a direct child window of hwndParent, not just a descendant window.
    If hwndChildAfter is NULL, the search begins with the first child window of hwndParent.

    lpszClass
    窗口類名(我來翻譯,簡單點)

    lpszWindow
    窗口標題

    關鍵是看第一個參數,如果hwndParent為NULL,函數就查找desktop的“子窗口”,但這個“子窗口”是加引號的,因為這里的“子窗口”和本文前面一直提到的子窗口確實不太一樣,那就是這里的“子窗口”沒有WS_CHILD風格,算是一個特殊吧,也難怪GetParent不愿意告訴我們desktop就是這些非Child的父窗口。好,有這個函數,我們就可以知道剛才創建的那幾個彈出窗口的老爸究竟是不是桌面。代碼十分簡單:

  • {
  • ?DWORD?rtn;
  • ?HWND?hw?=?FindWindowEx(NULL,?NULL,?TEXT("ALLWINDOWTEST"),?TEXT("AllWindowTest"));?//從桌面開始查找主窗口
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?FindWindowEx(NULL,?NULL,?TEXT("child_window"),?TEXT("A"));?//從桌面開始查找A
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?FindWindowEx(NULL,?NULL,?TEXT("child_window"),?TEXT("B"));?//從桌面開始查找B
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • ?hw?=?FindWindowEx(NULL,?NULL,?TEXT("child_window"),?TEXT("C"));?//從桌面開始查找C
  • ?if(hw==NULL)
  • ??rtn?=?GetLastError();
  • }
  • 結果如何?(是不是偷懶干脆不做,等著我說結果啊?)我的結果是全部找到了,和用spy++查找的結果一樣,所以我有充分的理由認為,所有非child窗口其實是desktop的child,spy++的樹形結構組織確實也是這么闡述的。你很厲害,你還是能夠駁斥我:“根據規則三,Parent被銷毀的時候,其Child將被銷毀,你證明給我看?”這個……有點難:

  • HWND?hwndDesktop?=?GetDesktopWindow();
  • BOOL?rtn?=?DestroyWindow(hwndDesktop);
  • if(!rtn)
  • ?DWORD?dwErr?=?GetLastError();
  • My god,Desktop沒了,你說我們還能看到什么呢?當然微軟不會沒想到這點,DestroyWindow當然不能成功,錯誤代碼為5,“拒絕訪問”。好,我有些累了,不能再糾纏了,轉入下一節!留個作業如何?嘗試使用SetParent這個API,改變窗口的Parent,觀察運行情況,并思考這樣做有什么不好之處。

    三、如何體現WS_CLIPSIBLING和WS_CLIPCHILD?

    看了這個標題,應該怎么做?我想你十有八九是打開MSDN,輸入這兩個關鍵字去搜索吧?OK,不用了,我把MSDN對這兩個窗口風格的說明貼出來:

    WS_CLIPCHILDREN?? Excludes the area occupied by child windows when you draw within the parent window. Used when you create the parent window.

    WS_CLIPSIBLINGS?? Clips child windows relative to each other; that is, when a particular child window receives a paint message, the WS_CLIPSIBLINGS style clips all other overlapped child windows out of the region of the child window to be updated. (If WS_CLIPSIBLINGS is not given and child windows overlap, when you draw within the client area of a child window, it is possible to draw within the client area of a neighboring child window.) For use with the
    WS_CHILD style only.

    找到是不難,但如果光看這個就明白的話我也不必要寫這種文章了,沒有適當的代碼去實踐,估計很多人是不懂這兩個風格什么含義的。OK,現在我來帶你實踐。spy++開著不?哈,別關啊,后面還要用到。用spy++觀察各個top-level window(非Child窗口)的屬性,是不是都有個WS_CLIPSIBLINGS?想找個沒有的都不行,如果你不服氣,你要自己創建一個沒有WS_CLIPSIBLINGS風格的頂層窗口,好吧,我在這里等你一會兒(……一會兒過去了……),你垂頭喪氣地回來了:“不行,即便我不指定這個風格,Windows也強制幫我加上。”那……你可以強制剝離掉這個風格啊,這樣:

  • DWORD?dwStyle?=?GetWindowLong(hWnd,?GWL_STYLE);
  • dwStyle?&=?~(WS_CLIPSIBLINGS);
  • SetWindowLong(hWnd,?GWL_STYLE);
  • 執行后用spy++一看,還是沒有把WS_CLIPSIBLINGS風格去掉,看來Windows是吃定你的了。嗯,前面說的都是top-level window,那對于child window呢?創建一個MFC對話框,在上面加幾個button,然后增加/刪除這幾個button的WS_CLIPSIBLINGS風格?你除了發現child window對與WS_CLIPSIBLING風格不再是強制的之外,恐怕仍然一無所獲吧。還是得Follow me,我還是不用MFC,用最簡單的Windows API。模仿第二節的創建幾個popup窗口A、B、C的那個例子,只不過現在的CreateWindowEx改成這樣:

  • g_hwndA?=?CreateWindowEx(NULL,?TEXT("child_window"),?TEXT("A"),?
  • ?WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW,?30,?30,?400,?300,?hWnd,?NULL,?hInst,?NULL);
  • g_hwndB?=?CreateWindowEx(NULL,?TEXT("child_window"),?TEXT("B"),
  • ?WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW,?60,?60,?400,?300,?hWnd,?NULL,?hInst,?NULL);
  • g_hwndC?=?CreateWindowEx(NULL,?TEXT("child_window"),?TEXT("C"),?
  • ?WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW,?90,?90,?400,?300,?hWnd,?NULL,?hInst,?NULL);
  • 創建出來的效果如圖:

    圖14

    一眼看沒什么奇怪的,但嘗試拖動里邊的窗口就出現些問題了,首先是顯示在最前端的C窗口不能拖動(其實是被擋住了),然后你發現B也不能拖動,A可以,A一拖,就出現這種情況:

    圖15

    如果你嘗試拖動B,C,情況可能更奇怪,總之就是窗口似乎不能正常繪制。那如何才能正常呢?我不說你都知道了,就是這節的主題,給這幾個child window加上WS_CLIPSIBLINGS風格,就OK了,那如何解釋?現在看圖14,表面上看是C疊在B上面,而B疊在A上面,事實上正好相反不是,(關于窗口Z order的問題看下一節)事實是B疊在C之上,A疊在B上面,所以企圖拖C,其實點到的是A的客戶區,C當然“拖不動”,那為什么看起來是C疊B,B疊A?這跟繪制順序有關系,A先繪,然后B,最后C,也許你又要我驗證了,好,我改一下代碼,打個log出來給你看。把Do nothing的那個窗口過程改為:

  • LRESULT?CALLBACK?WndProcDoNothing(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
  • {
  • ?switch(message)?
  • ?{
  • ?case?WM_PAINT:
  • ??{
  • ???TCHAR?szOut[20];
  • ???TCHAR?szWindowTxt[10];
  • ???GetWindowText(hWnd,?szWindowTxt,?10);
  • ???wsprintf(szOut,?TEXT("%s?Paint/n"),?szWindowTxt);
  • ???OutputDebugString(szOut);
  • ??}
  • ??break;
  • ?}
  • ?return?DefWindowProc(hWnd,?message,?wParam,?lParam);
  • }
  • 打印結果為:
    A Paint
    B Paint
    C Paint

    那B為什么繪在A的上面?那就是因為沒有指定WS_CLIPSIBLINGS,WS_CLIPSIBLINGS這個風格會在窗口繪制的時候裁掉“它被它的兄弟姐妹擋住的區域”,被裁掉的區域當然不會被繪制。對子窗口來說,這個風格不是一定有的,因為微軟考慮到大多數子窗口,比如dialog上的控件,基本上都是固定不會移動的,不會產生互相疊起來的現象。那對于top-level窗口,如果可以沒有這個風格,那我們的界面可能很容易混亂,所以這個風格是強制的。也許你要問:“那為什么我移動A的時候,A自己不會重繪?”當然不會了,因為我移動A,A本來就是在最頂層,完全可見的,沒有什么區域變得無效需要重新繪制,所以它不會被重繪,這個可以通過log看出來。

    現在分析下一個風格WS_CLIPCHILDREN,前一個是裁兄弟姐妹,這個是裁孩子,微軟也夠狠的。不多說了,直接改代碼來體會這個風格的作用,按照這個意思,有這個風格的父窗口在繪制的時候,不會把東西繪到子窗口的區域上去,這個嘛,簡單,我們只要在父窗口的WM_PAINT里畫點東西試試看就好了。代碼還是前面的代碼,把A,B,C都加上WS_CLIPSIBLINGS,主窗口不要WS_CLIPCHILDREN風格,我們看看是不是能把東西畫到子窗口的區域去。

  • case?WM_PAINT:
  • ?hdc?=?BeginPaint(hWnd,?&ps);
  • ?RECT?rt;
  • ?GetClientRect(hWnd,?&rt);
  • ?DrawText(hdc,?szHello,?strlen(szHello),?&rt,?DT_CENTER);
  • ?MoveToEx(hdc,?0,?0,?NULL);
  • ?LineTo(hdc,?600,?400);??//To?be?simple,?just?a?line.
  • ?EndPaint(hWnd,?&ps);
  • ?break;
  • 運行結果如圖:

    ?

    圖16

    嗯?沒有穿過啊?為什么?先動腦想想半分鐘。
    那是因為我們的實驗不夠嚴謹,現在在主窗口WM_PAINT消息的處理中加入一個Debug內容:

  • OutputDebugString(TEXT("Main?window?paint/n"));
  • 再看看debug出來的log:
    Main window paint
    A Paint
    B Paint
    C Paint
    因為是主窗口先繪制,然后才是子窗口,所以即便這根線是穿過子窗口區域的,恐怕也看不出來了。那我們就不要在WM_PAINT里繪制,我們增加一個菜單項,叫paint a line,點這個菜單就執行下面的代碼:

  • //在主窗口的WM_COMMAND消息處理中
  • switch?(wmId)
  • {
  • ?//...
  • ?case?ID_PAINT_A_LINE:
  • ?{
  • ??HDC?hdc?=?GetDC(hWnd);
  • ??MoveToEx(hdc,?0,?0,?NULL);
  • ??LineTo(hdc,?600,?400);??//To?be?simple,?just?a?line.
  • ??ReleaseDC(hWnd,?hdc);
  • ?}
  • }
  • 運行程序,點菜單“paint a line”,看運行效果:

    ?

    圖17

    算是“成功穿越”了,這時候你再給父窗口加上WS_CLIPCHILDREN看看,結果我就不說了,就算不嘗試其實也能想得到。相信大家到此為止都理解了這兩個風格的作用了。

    再順便說些實踐經驗,有時候我們會發覺程序在頻繁重繪的時候閃爍比較厲害,還是拿這個例子改裝一下吧,先把主窗口的WS_CLIPCHILDREN風格拿掉,然后在其窗口處理函數中加入些代碼:

  • case?WM_CREATE:
  • ?//...
  • ?SetTimer(hWnd,?1,?200,?NULL);
  • ?break;
  • case?WM_TIMER:
  • ?if?(wParam==1)
  • ??InvalidateRect(hWnd,?NULL,?TRUE);
  • ?break;
  • 意思是說每0.2秒重繪一次主窗口,大家看看,是不是閃爍得厲害,閃爍過程中,我們依稀看到了這根線穿過了子窗口的區域……然后把WS_CLIPCHILDREN風格賦予主窗口,其余不變,再看看,是不是閃爍現象大為減少?通過這個例子告訴大家什么叫“把現有的技術用得最好”(參考我上一篇博文),有時候就差那么一點點。

    四、Foreground、Active、Focus及對Z order的理解

    看前面的這個“MDI”例子,也許你發現它跟MFC向導創建出來的MDI界面的最大不同就是子窗口無法“激活”,你怎么點,怎么拖都不行,它們的caption恒定是灰色的,我曾經為此苦思冥想……spy++是個好東西,前面主要是用它來查看窗口的屬性,現在我們用它來查看窗口消息,(不知道怎么做的看看spy++的幫助)在消息過濾中,我們只選擇一個消息,就是WM_NCACTIVATE,MSDN對這個消息的說明是:The WM_NCACTIVATE message is sent to a window when its nonclient area needs to be changed to indicate an active or inactive state. 那就是窗口激活狀態改變的時候,會收到這個消息啰?而我觀察下來的結果是,The WM_NCACTIVATE never came.

    辦法總該是有的,比如利用SetActiveWindow這個API,在主界面上做個按鈕,點一下這個按鈕,就SetActiveWindow(g_hwndA),這樣來激活A窗口,而事實上這樣做是徒勞,A既沒有被激活,也沒有收到WM_NCACTIVATE。但我還是有辦法的,大家看下面的代碼,在那個叫WndProcDoNothing的窗口里加入對WM_MOUSEACTIVATE消息的處理:

  • case?WM_MOUSEACTIVATE:
  • {
  • ?HWND?hwndFind=NULL;
  • ?while(TRUE)
  • ?{
  • ??hwndFind?=?FindWindowEx(g_hwndMain,?hwndFind,?TEXT("child_window"),?NULL);
  • ??if?(hwndFind==NULL)
  • ???break;
  • ??if?(hwndFind==hWnd)
  • ???PostMessage(hwndFind,?WM_NCACTIVATE,?TRUE,?NULL);
  • ??else
  • ???PostMessage(hwndFind,?WM_NCACTIVATE,?FALSE,?NULL);
  • ?}
  • }
  • break;
  • 現在再嘗試運行程序,點擊A,B,C窗口,是不是就可以把它們的caption變為彩色(我的是默認的淺藍色)了?什么道理?雖然這幾個子窗口不能真正地被激活(Windows機制決定的,只有top-level window才能被激活),但可以通過發WM_NCACTIVATE消息來欺騙它們,讓它們以為自己被激活了,于是把自己的caption繪制為淺藍色。如圖:

    圖18

    也許你還發現,點擊子窗口的客戶區不能讓子窗口調整到其它子窗口的前面,窗口那個前,那個后的這種次序叫“Z order”,又譯作“Z軸”,order是“序”的意思,這其實是窗口管理器維護的一個鏈表,沒錯,是鏈表,不是數組,不是隊列,不是堆棧,為什么是鏈表?因為窗口的次序經常發生變化,鏈表是最方便修改次序的了,只需要改變節點的指針,這點性能考慮,微軟是肯定做過的。下面是窗口的Z order的描述(我的描述,從MSDN改編):

    桌面是最底層的窗口,不能改變的;對于top-level window,如果存在owner,一定會顯示在owner之上(owner一定不會擋住它),不存在擁有關系的top-level窗口,互相之間都有可能會阻擋,用戶的操作,窗口顯示隱藏最大最小化還原,或者顯式調用API設定等都有可能影響它們的次序,但微軟為了使得有些窗口總是能夠顯示在最頂或最底,還設立了一套特殊的規則,那就是top most window,SetWindowPos這個API就有調整次序的功能,或者把某窗口設置為top most,top most總是顯示在其它非top most窗口的上面,如果兩個窗口同時是top most,那么誰更上面呢?——都有可能,top most之間又是“公平競爭”的關系了,雖然他們對非top most總是保持著優勢,那把一個owner設置為top most,會怎么樣呢?由于被擁有的窗口必須在其owner的上面,所以那些被擁有的窗口也都全部變成了top most,盡管你沒有給他們指定top most,用spy++觀察top most窗口的屬性,在Extended Style欄目中,能看到一個“WS_EX_TOPMOST”屬性,這就是top most窗口的標志了。OK,top-level window的情況看來都沒什么問題了,那child window的情況呢?大家都知道,child是繪制在其parent的客戶區中的,不可能超出其parent的界限,相當于是其parent的一部分,那我們可不能以認為其child的z order跟其parent的是一致的呢?對于其它top-level窗口來說,這樣看是沒問題的,因為一個top-level窗口被移到了前面,它的child也會跟著它顯示在前面,反之亦然,但一個在Parent窗口內部,哪個child在前,哪個在后,又是有自己的一套private z order的,所謂國有國法,家有家規嘛,這樣看,我想就沒什么問題了。哦,不對,還有一點沒說,對于child來說,不能是top most窗口,用SetWindowPos設置也是沒用的。

    那我們如何來知道整個Z order的鏈表?可以這樣:

  • void?ListZOrder(HWND?hParent)
  • {
  • ?TCHAR?szOutput[10];
  • ?HWND?hwnd?=?GetTopWindow(hParent);
  • ?while(hwnd!=NULL)
  • ?{
  • ??wsprintf(szOutput,?TEXT("%08X/n"),?(UINT)hwnd);
  • ??OutputDebugString(szOutput);
  • ??hwnd?=?GetNextWindow(hwnd,?GW_HWNDNEXT);
  • ?}
  • }
  • 這個函數會把某個Parent的子窗口句柄值,按照z order次序,從最頂打印到最底。如果hParent為NULL,那么就從桌面的最頂窗口開始,列出所有桌面的窗口,這樣意義不大,為什么?因為你會找出來很多很多窗口,可見的,不可見的,奇奇怪怪的,變來變去的,所以這種列窗口的方法通常是用于列子窗口的。

    最后我想提提Foreground、Active和Focus這三者,非常容易讓人搞混的三個概念,我給出一些提示和方法,讀者自己去編程序體驗。

    首先是Foreground窗口,說起Foreground就不能不說Foreground線程,Windows同時管理著很多線程,但為了給用戶操作起來“爽”一些,需要更快地響應用戶的操作,就弄了這么個Foreground線程的概念。比如用戶在玩掃雷,那掃雷這個程序的某個線程(據我所知掃雷只有一個線程)就被提升為Foreground線程,這個線程擁有比別的線程略高的優先級,能獲取更多的cpu時間片,以此更快一些地響應用戶,用戶正在使用的這個掃雷程序的主界面,就是Foreground窗口。那Active窗口是什么呢?Active窗口就是目前用戶正在使用的那個窗口……厄,這種解釋也未免太敷衍人了,那它跟Foreground窗口有什么異同啊?首先說“同”,那就是它們都必須是top-level window,而不能是child window,不同嘛……還是等等再說,那現在輪到Focus窗口了,Focus窗口就是目前直接接收到用戶鍵盤輸入消息的那個窗口,可以是child window。我就給那么多提示吧。

    我不想直接告訴你它們究竟還有什么不同,我現在給出三個API:GetFocus、GetActiveWindow和GetForegroundWindow,大家用這三個API去做些實驗就知道了。




    總結

    以上是生活随笔為你收集整理的Windows窗口分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    无码人妻出轨黑人中文字幕 | 国产片av国语在线观看 | 少妇厨房愉情理9仑片视频 | 午夜精品久久久内射近拍高清 | 国产黄在线观看免费观看不卡 | 日本一区二区三区免费播放 | 亚洲区欧美区综合区自拍区 | 国产精品嫩草久久久久 | 无码乱肉视频免费大全合集 | 一二三四社区在线中文视频 | 亚洲一区二区三区国产精华液 | 亚洲日韩乱码中文无码蜜桃臀网站 | 丰满岳乱妇在线观看中字无码 | 中文字幕无码视频专区 | 久久久亚洲欧洲日产国码αv | 亚洲狠狠色丁香婷婷综合 | 国产精品无码永久免费888 | 中文字幕无码人妻少妇免费 | 水蜜桃亚洲一二三四在线 | 国精产品一区二区三区 | ass日本丰满熟妇pics | 小sao货水好多真紧h无码视频 | 国产精品美女久久久 | 麻豆国产97在线 | 欧洲 | 又湿又紧又大又爽a视频国产 | 国语精品一区二区三区 | 一区二区传媒有限公司 | 国产成人综合美国十次 | 亚洲va中文字幕无码久久不卡 | 曰韩少妇内射免费播放 | 人妻少妇精品无码专区二区 | 玩弄少妇高潮ⅹxxxyw | 黑人巨大精品欧美一区二区 | 人妻与老人中文字幕 | 成人无码影片精品久久久 | 少妇被黑人到高潮喷出白浆 | 四虎国产精品一区二区 | 无码人中文字幕 | 亚洲中文字幕无码一久久区 | 午夜时刻免费入口 | 久久无码中文字幕免费影院蜜桃 | 又大又硬又爽免费视频 | 久久aⅴ免费观看 | 2020久久超碰国产精品最新 | 亚洲国产精品无码一区二区三区 | a国产一区二区免费入口 | 成熟人妻av无码专区 | 福利一区二区三区视频在线观看 | 成人一在线视频日韩国产 | 狠狠色欧美亚洲狠狠色www | 在线播放无码字幕亚洲 | 成人女人看片免费视频放人 | 少妇性荡欲午夜性开放视频剧场 | 丰满岳乱妇在线观看中字无码 | 国产综合久久久久鬼色 | 97资源共享在线视频 | 久久伊人色av天堂九九小黄鸭 | 亚洲区欧美区综合区自拍区 | 麻豆成人精品国产免费 | 永久免费观看美女裸体的网站 | 77777熟女视频在线观看 а天堂中文在线官网 | 人妻与老人中文字幕 | 国产国语老龄妇女a片 | 欧美一区二区三区视频在线观看 | 麻豆国产人妻欲求不满 | 国产精品久久国产三级国 | 亚洲精品一区二区三区在线观看 | 人妻夜夜爽天天爽三区 | 999久久久国产精品消防器材 | 国产精品人人爽人人做我的可爱 | 免费无码av一区二区 | 无套内谢老熟女 | 久久精品国产一区二区三区肥胖 | 国产精品无码mv在线观看 | 国产在热线精品视频 | 久久亚洲中文字幕精品一区 | 美女黄网站人色视频免费国产 | 国产午夜无码视频在线观看 | 国产精品福利视频导航 | 国产精品无码久久av | 99久久精品无码一区二区毛片 | 内射巨臀欧美在线视频 | 在线观看欧美一区二区三区 | 亚洲国产精品无码久久久久高潮 | 精品国产麻豆免费人成网站 | 亚洲人亚洲人成电影网站色 | 蜜桃无码一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 黑森林福利视频导航 | 日韩无套无码精品 | 久久人人爽人人人人片 | 亚洲一区二区三区国产精华液 | 国产精品丝袜黑色高跟鞋 | 扒开双腿疯狂进出爽爽爽视频 | 思思久久99热只有频精品66 | 国内精品久久久久久中文字幕 | 欧美丰满少妇xxxx性 | 亚洲精品国产第一综合99久久 | 爽爽影院免费观看 | 日韩精品乱码av一区二区 | 国产婷婷色一区二区三区在线 | 久久久久99精品成人片 | 国内丰满熟女出轨videos | 亚洲国产一区二区三区在线观看 | 国产香蕉尹人视频在线 | 亚洲精品一区国产 | 高清国产亚洲精品自在久久 | 国产精品久久国产三级国 | 久久人人爽人人人人片 | 国产乱人伦av在线无码 | 色一情一乱一伦一视频免费看 | 人妻体内射精一区二区三四 | 国产人妻久久精品二区三区老狼 | 无码av中文字幕免费放 | 秋霞成人午夜鲁丝一区二区三区 | 沈阳熟女露脸对白视频 | 国产精品久久国产三级国 | 日韩精品无码免费一区二区三区 | 亚洲日本va午夜在线电影 | 领导边摸边吃奶边做爽在线观看 | 国内揄拍国内精品少妇国语 | 亚洲成a人一区二区三区 | 欧美三级a做爰在线观看 | 亚洲最大成人网站 | 欧美zoozzooz性欧美 | 亚洲国产日韩a在线播放 | 国产av无码专区亚洲a∨毛片 | 国产精品怡红院永久免费 | 国产激情精品一区二区三区 | 精品 日韩 国产 欧美 视频 | 亚洲色欲色欲欲www在线 | 日本爽爽爽爽爽爽在线观看免 | 亚洲精品久久久久中文第一幕 | 牲欲强的熟妇农村老妇女 | 亚洲爆乳大丰满无码专区 | 国产香蕉尹人综合在线观看 | 亚洲日韩一区二区三区 | 日韩精品无码一本二本三本色 | 无码精品人妻一区二区三区av | 99riav国产精品视频 | 中文字幕乱码中文乱码51精品 | 撕开奶罩揉吮奶头视频 | 激情内射亚州一区二区三区爱妻 | 精品欧美一区二区三区久久久 | 三级4级全黄60分钟 | 国产精品嫩草久久久久 | 亚洲成a人一区二区三区 | 色综合久久久久综合一本到桃花网 | 99久久99久久免费精品蜜桃 | 无码吃奶揉捏奶头高潮视频 | 国产精品igao视频网 | 日日碰狠狠躁久久躁蜜桃 | 国产精品多人p群无码 | 六月丁香婷婷色狠狠久久 | 色噜噜亚洲男人的天堂 | 亚洲精品一区二区三区婷婷月 | 九月婷婷人人澡人人添人人爽 | 扒开双腿吃奶呻吟做受视频 | 国产午夜视频在线观看 | 精品无码成人片一区二区98 | 久久婷婷五月综合色国产香蕉 | 亚洲一区二区三区含羞草 | 呦交小u女精品视频 | 荫蒂被男人添的好舒服爽免费视频 | 99久久久无码国产aaa精品 | 久久国语露脸国产精品电影 | 麻豆av传媒蜜桃天美传媒 | 玩弄少妇高潮ⅹxxxyw | 乱人伦人妻中文字幕无码久久网 | 久久久久久久女国产乱让韩 | 日本精品人妻无码免费大全 | 中文字幕无码人妻少妇免费 | 日韩av无码一区二区三区不卡 | 美女毛片一区二区三区四区 | 亚洲欧美日韩国产精品一区二区 | 国产卡一卡二卡三 | 国产无遮挡又黄又爽免费视频 | 亚洲乱码日产精品bd | 无码播放一区二区三区 | 97无码免费人妻超级碰碰夜夜 | 正在播放东北夫妻内射 | 十八禁视频网站在线观看 | 55夜色66夜色国产精品视频 | 成年美女黄网站色大免费视频 | 亚洲国产精品毛片av不卡在线 | 少妇久久久久久人妻无码 | 人人爽人人爽人人片av亚洲 | 一本一道久久综合久久 | 欧美 日韩 亚洲 在线 | 免费无码的av片在线观看 | 色综合久久88色综合天天 | 日韩精品无码免费一区二区三区 | 呦交小u女精品视频 | 久久国产精品萌白酱免费 | 精品 日韩 国产 欧美 视频 | 99国产欧美久久久精品 | 国产成人av免费观看 | 精品夜夜澡人妻无码av蜜桃 | 亚洲精品国产第一综合99久久 | 国产午夜视频在线观看 | 久久精品女人天堂av免费观看 | 欧洲美熟女乱又伦 | 国产suv精品一区二区五 | 国产午夜亚洲精品不卡 | 伊人色综合久久天天小片 | 综合人妻久久一区二区精品 | 成年女人永久免费看片 | 国产亚洲精品久久久久久久 | 国产亚洲精品久久久ai换 | 中文字幕乱码人妻二区三区 | 精品一区二区三区波多野结衣 | 少妇无码一区二区二三区 | 性开放的女人aaa片 | 在线播放无码字幕亚洲 | 国产欧美精品一区二区三区 | 性生交大片免费看l | 欧美野外疯狂做受xxxx高潮 | 天天摸天天透天天添 | 动漫av一区二区在线观看 | 亚洲国产欧美日韩精品一区二区三区 | 久久久精品人妻久久影视 | 任你躁国产自任一区二区三区 | 亚洲精品久久久久久一区二区 | 精品无码av一区二区三区 | 日韩欧美成人免费观看 | 精品午夜福利在线观看 | 成人女人看片免费视频放人 | 国产农村乱对白刺激视频 | 无码国模国产在线观看 | 又色又爽又黄的美女裸体网站 | 欧美丰满少妇xxxx性 | 青青久在线视频免费观看 | 少妇太爽了在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 在线观看国产一区二区三区 | 波多野结衣高清一区二区三区 | 中文字幕乱码亚洲无线三区 | 国产精品自产拍在线观看 | 丰满少妇人妻久久久久久 | 亚洲精品无码国产 | 亚洲精品国产第一综合99久久 | 精品无人区无码乱码毛片国产 | 国产午夜手机精彩视频 | 国产午夜福利100集发布 | 久久久久久久人妻无码中文字幕爆 | 精品一区二区三区波多野结衣 | 日本熟妇人妻xxxxx人hd | 国产人妻人伦精品 | 18禁黄网站男男禁片免费观看 | 亚洲精品无码国产 | 国产精品久久久久久亚洲毛片 | 亚洲熟妇色xxxxx亚洲 | 白嫩日本少妇做爰 | 日韩精品a片一区二区三区妖精 | 97久久国产亚洲精品超碰热 | 99久久久国产精品无码免费 | 亚洲乱码国产乱码精品精 | 国产成人精品视频ⅴa片软件竹菊 | 曰韩无码二三区中文字幕 | 熟妇人妻中文av无码 | 一个人看的视频www在线 | 性啪啪chinese东北女人 | 九九在线中文字幕无码 | 狠狠cao日日穞夜夜穞av | 午夜无码人妻av大片色欲 | 久久久亚洲欧洲日产国码αv | 国产精品久久精品三级 | 国产猛烈高潮尖叫视频免费 | 国产综合久久久久鬼色 | 无码人妻精品一区二区三区下载 | 伊人久久婷婷五月综合97色 | 97se亚洲精品一区 | 无码av岛国片在线播放 | 免费乱码人妻系列无码专区 | 国精产品一品二品国精品69xx | 国产9 9在线 | 中文 | 免费无码午夜福利片69 | 久久99国产综合精品 | 国产精品va在线观看无码 | 国产xxx69麻豆国语对白 | 国产成人无码午夜视频在线观看 | 一本色道久久综合亚洲精品不卡 | 亚洲中文字幕在线观看 | 四虎影视成人永久免费观看视频 | а√资源新版在线天堂 | 成人欧美一区二区三区黑人免费 | 无码播放一区二区三区 | 亚拍精品一区二区三区探花 | 午夜精品久久久内射近拍高清 | 超碰97人人做人人爱少妇 | 亚洲成熟女人毛毛耸耸多 | 亚洲综合色区中文字幕 | 国产精品人人妻人人爽 | 男女性色大片免费网站 | 午夜丰满少妇性开放视频 | 亚洲综合色区中文字幕 | 51国偷自产一区二区三区 | 一区二区三区乱码在线 | 欧洲 | 丝袜 中出 制服 人妻 美腿 | 日韩欧美群交p片內射中文 | 免费无码的av片在线观看 | 免费男性肉肉影院 | 在线播放亚洲第一字幕 | 久久久中文字幕日本无吗 | 夜先锋av资源网站 | 狠狠综合久久久久综合网 | 精品国偷自产在线视频 | 精品无人国产偷自产在线 | 国产色在线 | 国产 | 国产手机在线αⅴ片无码观看 | 国产精品自产拍在线观看 | 精品亚洲韩国一区二区三区 | 在线播放免费人成毛片乱码 | 内射后入在线观看一区 | 亚洲熟妇色xxxxx亚洲 | 男人的天堂2018无码 | 性生交大片免费看l | 97人妻精品一区二区三区 | 波多野结衣一区二区三区av免费 | 久久人人爽人人爽人人片ⅴ | 精品国产一区二区三区四区在线看 | 国产精品福利视频导航 | 成人无码视频在线观看网站 | 熟女俱乐部五十路六十路av | 成人欧美一区二区三区黑人 | 国产精品亚洲一区二区三区喷水 | 蜜桃视频插满18在线观看 | 亚洲中文字幕乱码av波多ji | 国产精品久久久久久亚洲毛片 | 亚洲色无码一区二区三区 | 亚洲s码欧洲m码国产av | 97资源共享在线视频 | 国产亚洲欧美日韩亚洲中文色 | 我要看www免费看插插视频 | 亚洲欧美国产精品专区久久 | 亚洲熟妇色xxxxx亚洲 | 日日橹狠狠爱欧美视频 | 成人aaa片一区国产精品 | 天堂а√在线地址中文在线 | 国产无套粉嫩白浆在线 | 亚洲无人区午夜福利码高清完整版 | 欧美国产日产一区二区 | 亚洲欧美日韩成人高清在线一区 | 7777奇米四色成人眼影 | 男女超爽视频免费播放 | 久久国产精品二国产精品 | 亚洲熟悉妇女xxx妇女av | 动漫av网站免费观看 | 国产精品第一区揄拍无码 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲热妇无码av在线播放 | 小sao货水好多真紧h无码视频 | 久久精品一区二区三区四区 | 性生交片免费无码看人 | 宝宝好涨水快流出来免费视频 | 女人被男人爽到呻吟的视频 | 最新版天堂资源中文官网 | 女人和拘做爰正片视频 | 亚洲国产日韩a在线播放 | 久久久精品成人免费观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久久久久久久888 | 亚洲一区二区三区国产精华液 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲国产av美女网站 | 亚洲精品久久久久avwww潮水 | 丰满肥臀大屁股熟妇激情视频 | 人人妻人人藻人人爽欧美一区 | 爱做久久久久久 | 狠狠躁日日躁夜夜躁2020 | 2019nv天堂香蕉在线观看 | 国产色精品久久人妻 | 荫蒂被男人添的好舒服爽免费视频 | 一二三四社区在线中文视频 | 日韩av激情在线观看 | 国产高清av在线播放 | 国产网红无码精品视频 | 综合激情五月综合激情五月激情1 | 97人妻精品一区二区三区 | 国产午夜手机精彩视频 | 一本加勒比波多野结衣 | 欧洲熟妇色 欧美 | 在线观看欧美一区二区三区 | 又粗又大又硬又长又爽 | 亚洲 欧美 激情 小说 另类 | 国产亚洲精品久久久久久国模美 | 亚洲啪av永久无码精品放毛片 | 国产97在线 | 亚洲 | 内射后入在线观看一区 | 久久99精品久久久久久 | 成人综合网亚洲伊人 | 国产激情无码一区二区app | 中文字幕久久久久人妻 | 亚洲精品国偷拍自产在线麻豆 | 狠狠综合久久久久综合网 | 丰满肥臀大屁股熟妇激情视频 | 亚洲精品一区三区三区在线观看 | 国产精品高潮呻吟av久久4虎 | av在线亚洲欧洲日产一区二区 | 国产一区二区三区日韩精品 | 伊人久久大香线蕉av一区二区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产精品久久久午夜夜伦鲁鲁 | 国产欧美精品一区二区三区 | 国产亚洲精品久久久久久久 | 狠狠亚洲超碰狼人久久 | 精品无码成人片一区二区98 | 国产精品爱久久久久久久 | 午夜精品一区二区三区的区别 | 免费无码一区二区三区蜜桃大 | 国产麻豆精品精东影业av网站 | 亚洲爆乳无码专区 | 久久国产精品二国产精品 | 国产三级精品三级男人的天堂 | 精品国产麻豆免费人成网站 | 欧美freesex黑人又粗又大 | 九一九色国产 | 熟妇人妻激情偷爽文 | 亚洲中文字幕乱码av波多ji | 性色欲情网站iwww九文堂 | 夜夜高潮次次欢爽av女 | 国产国产精品人在线视 | 国产在线aaa片一区二区99 | 日本一卡二卡不卡视频查询 | 欧美精品在线观看 | 久久这里只有精品视频9 | 中文字幕av日韩精品一区二区 | 18无码粉嫩小泬无套在线观看 | 男女超爽视频免费播放 | 东京热男人av天堂 | 一个人看的视频www在线 | 午夜福利一区二区三区在线观看 | 成人性做爰aaa片免费看不忠 | 亚洲综合另类小说色区 | 无码av免费一区二区三区试看 | 亚洲综合精品香蕉久久网 | 国产精品人妻一区二区三区四 | 激情亚洲一区国产精品 | 秋霞成人午夜鲁丝一区二区三区 | 国产精品对白交换视频 | 午夜肉伦伦影院 | 成人欧美一区二区三区黑人免费 | 在教室伦流澡到高潮hnp视频 | 日韩视频 中文字幕 视频一区 | 18禁止看的免费污网站 | 在线观看国产午夜福利片 | 久久国语露脸国产精品电影 | 精品国产一区二区三区四区在线看 | 久久无码中文字幕免费影院蜜桃 | 国产精品99爱免费视频 | 欧美成人午夜精品久久久 | 人妻无码久久精品人妻 | www国产亚洲精品久久久日本 | 日欧一片内射va在线影院 | 无码av岛国片在线播放 | 国产成人午夜福利在线播放 | 亚洲精品一区二区三区大桥未久 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲精品美女久久久久久久 | 国产绳艺sm调教室论坛 | 免费视频欧美无人区码 | 午夜精品一区二区三区的区别 | 无码精品人妻一区二区三区av | 成人无码精品1区2区3区免费看 | 国产精品无码成人午夜电影 | 国产区女主播在线观看 | 欧美国产日韩亚洲中文 | 最近的中文字幕在线看视频 | 亚洲第一网站男人都懂 | 西西人体www44rt大胆高清 | 欧美野外疯狂做受xxxx高潮 | 亚洲精品一区二区三区大桥未久 | 欧美三级不卡在线观看 | 乱人伦人妻中文字幕无码 | 国产黑色丝袜在线播放 | 无码av岛国片在线播放 | 久久久久久av无码免费看大片 | 欧美自拍另类欧美综合图片区 | 婷婷色婷婷开心五月四房播播 | 国产精品久久精品三级 | 久久精品视频在线看15 | 九九热爱视频精品 | 中文字幕乱码人妻无码久久 | 美女张开腿让人桶 | 黑森林福利视频导航 | 国产精品理论片在线观看 | 在线看片无码永久免费视频 | 亚洲日韩av一区二区三区中文 | 日韩亚洲欧美中文高清在线 | 亚洲国产精品毛片av不卡在线 | 美女极度色诱视频国产 | 久久精品人妻少妇一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 无码国产乱人伦偷精品视频 | 高清不卡一区二区三区 | 久青草影院在线观看国产 | 久久精品丝袜高跟鞋 | 国产精品igao视频网 | 国产成人av免费观看 | 国内精品一区二区三区不卡 | 国产av一区二区三区最新精品 | 一本久道久久综合狠狠爱 | av人摸人人人澡人人超碰下载 | 成人无码精品1区2区3区免费看 | 久激情内射婷内射蜜桃人妖 | 免费看男女做好爽好硬视频 | 天天做天天爱天天爽综合网 | 乱码av麻豆丝袜熟女系列 | 久久久精品人妻久久影视 | 乱人伦人妻中文字幕无码久久网 | 性欧美牲交xxxxx视频 | 狠狠cao日日穞夜夜穞av | 亚洲 另类 在线 欧美 制服 | 帮老师解开蕾丝奶罩吸乳网站 | 九九久久精品国产免费看小说 | 国产成人无码a区在线观看视频app | 欧美日韩人成综合在线播放 | 中文无码成人免费视频在线观看 | 日本高清一区免费中文视频 | 亚洲国产欧美国产综合一区 | 男女性色大片免费网站 | 波多野结衣av一区二区全免费观看 | 99精品国产综合久久久久五月天 | 蜜桃视频韩日免费播放 | 综合人妻久久一区二区精品 | 水蜜桃色314在线观看 | 欧美丰满老熟妇xxxxx性 | 亚洲人成网站在线播放942 | 色窝窝无码一区二区三区色欲 | 伊人久久大香线焦av综合影院 | 成 人 免费观看网站 | 久久久久久国产精品无码下载 | 亚洲第一无码av无码专区 | 久久精品成人欧美大片 | 人妻少妇精品久久 | 亚洲s色大片在线观看 | 午夜男女很黄的视频 | 久久久成人毛片无码 | 精品国偷自产在线视频 | 国产乱人偷精品人妻a片 | 久久久久久国产精品无码下载 | av小次郎收藏 | 午夜不卡av免费 一本久久a久久精品vr综合 | 7777奇米四色成人眼影 | 狠狠噜狠狠狠狠丁香五月 | 国产超碰人人爽人人做人人添 | 日韩欧美中文字幕公布 | 7777奇米四色成人眼影 | 精品国产一区av天美传媒 | 国产一区二区不卡老阿姨 | 欧美人与善在线com | 国产精品欧美成人 | 玩弄中年熟妇正在播放 | 性色av无码免费一区二区三区 | 亚洲欧美日韩综合久久久 | 人妻少妇被猛烈进入中文字幕 | 久久97精品久久久久久久不卡 | 老头边吃奶边弄进去呻吟 | 亚洲精品久久久久久久久久久 | 精品国产一区二区三区四区在线看 | 波多野结衣 黑人 | 男人和女人高潮免费网站 | 激情爆乳一区二区三区 | 红桃av一区二区三区在线无码av | 中文字幕日韩精品一区二区三区 | 国产欧美亚洲精品a | 成 人影片 免费观看 | 狂野欧美性猛xxxx乱大交 | 久久99精品久久久久婷婷 | www国产亚洲精品久久久日本 | 亚洲性无码av中文字幕 | 性色欲情网站iwww九文堂 | 青青草原综合久久大伊人精品 | 中文字幕乱码人妻二区三区 | 久久精品国产大片免费观看 | 俺去俺来也www色官网 | 台湾无码一区二区 | 秋霞特色aa大片 | 狠狠色欧美亚洲狠狠色www | 最近的中文字幕在线看视频 | 中文久久乱码一区二区 | 欧美一区二区三区视频在线观看 | 欧美日韩一区二区三区自拍 | 老熟女重囗味hdxx69 | 青青青手机频在线观看 | 久久zyz资源站无码中文动漫 | 男人的天堂av网站 | 中文字幕人妻无码一夲道 | 无遮挡国产高潮视频免费观看 | 天下第一社区视频www日本 | 青春草在线视频免费观看 | 撕开奶罩揉吮奶头视频 | 美女扒开屁股让男人桶 | 欧美日韩人成综合在线播放 | 未满小14洗澡无码视频网站 | 熟女俱乐部五十路六十路av | 国产婷婷色一区二区三区在线 | 精品国产青草久久久久福利 | 久久婷婷五月综合色国产香蕉 | www国产精品内射老师 | 美女黄网站人色视频免费国产 | 欧美黑人性暴力猛交喷水 | 国产精品亚洲а∨无码播放麻豆 | 午夜精品一区二区三区在线观看 | 欧洲vodafone精品性 | 免费无码一区二区三区蜜桃大 | 在线观看国产一区二区三区 | 久久精品国产一区二区三区 | 色婷婷综合激情综在线播放 | 2020久久香蕉国产线看观看 | 天堂无码人妻精品一区二区三区 | 好屌草这里只有精品 | 亚洲一区二区三区含羞草 | 特黄特色大片免费播放器图片 | 少妇厨房愉情理9仑片视频 | 少女韩国电视剧在线观看完整 | 久久综合给合久久狠狠狠97色 | 国产亚洲日韩欧美另类第八页 | 精品一区二区三区无码免费视频 | 国产精品久久久av久久久 | 人妻aⅴ无码一区二区三区 | 成熟妇人a片免费看网站 | 男女猛烈xx00免费视频试看 | 扒开双腿吃奶呻吟做受视频 | 小sao货水好多真紧h无码视频 | 国产精品久久久久久亚洲影视内衣 | 欧美国产日韩久久mv | 日韩亚洲欧美中文高清在线 | 高清国产亚洲精品自在久久 | av无码不卡在线观看免费 | www成人国产高清内射 | 丰满妇女强制高潮18xxxx | 国产亚av手机在线观看 | 国产av一区二区精品久久凹凸 | 亚洲欧洲日本无在线码 | 国产精品久久久久久亚洲影视内衣 | 超碰97人人射妻 | 国产va免费精品观看 | 欧美 日韩 亚洲 在线 | 97无码免费人妻超级碰碰夜夜 | 久久久久久久久蜜桃 | 亚洲成熟女人毛毛耸耸多 | 玩弄少妇高潮ⅹxxxyw | 黑人大群体交免费视频 | 野狼第一精品社区 | 亚洲精品一区二区三区在线观看 | 婷婷六月久久综合丁香 | 3d动漫精品啪啪一区二区中 | 成人无码视频在线观看网站 | 国产精品理论片在线观看 | 女人被男人爽到呻吟的视频 | 欧美日韩色另类综合 | 国产午夜精品一区二区三区嫩草 | 我要看www免费看插插视频 | 免费国产黄网站在线观看 | 亚洲国产一区二区三区在线观看 | 又色又爽又黄的美女裸体网站 | 国产av无码专区亚洲awww | 伊在人天堂亚洲香蕉精品区 | 国产人妻大战黑人第1集 | 国产精品久久久久影院嫩草 | 噜噜噜亚洲色成人网站 | 精品国产一区二区三区四区 | 青青草原综合久久大伊人精品 | 久久久久成人精品免费播放动漫 | 18无码粉嫩小泬无套在线观看 | 亚洲自偷自拍另类第1页 | 久久人人爽人人爽人人片ⅴ | 最新国产乱人伦偷精品免费网站 | 亚洲 激情 小说 另类 欧美 | 国产在线精品一区二区三区直播 | 亚洲综合精品香蕉久久网 | 欧美人与物videos另类 | 精品一区二区三区波多野结衣 | 人妻体内射精一区二区三四 | 熟妇女人妻丰满少妇中文字幕 | 国产农村妇女高潮大叫 | 久久久久成人片免费观看蜜芽 | 大地资源中文第3页 | 久久精品无码一区二区三区 | 欧美日韩人成综合在线播放 | 日韩精品成人一区二区三区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 欧美激情一区二区三区成人 | 国产精品香蕉在线观看 | 日本熟妇乱子伦xxxx | 377p欧洲日本亚洲大胆 | 国产精品久久久久7777 | www国产亚洲精品久久久日本 | 中文字幕久久久久人妻 | 大屁股大乳丰满人妻 | 亚洲欧洲无卡二区视頻 | 久久久久国色av免费观看性色 | 亚洲а∨天堂久久精品2021 | 国产激情一区二区三区 | 国产精品亚洲lv粉色 | 国语自产偷拍精品视频偷 | 性欧美熟妇videofreesex | 丰满人妻翻云覆雨呻吟视频 | 无码毛片视频一区二区本码 | 亚洲一区二区观看播放 | 高清不卡一区二区三区 | 精品久久综合1区2区3区激情 | 色欲av亚洲一区无码少妇 | 夫妻免费无码v看片 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产av无码专区亚洲a∨毛片 | 国产麻豆精品精东影业av网站 | 丰满少妇女裸体bbw | 亚洲乱码国产乱码精品精 | ass日本丰满熟妇pics | 国产av无码专区亚洲a∨毛片 | 宝宝好涨水快流出来免费视频 | 亚洲人成影院在线观看 | 色一情一乱一伦一视频免费看 | 亚洲色欲久久久综合网东京热 | 国产内射爽爽大片视频社区在线 | av无码久久久久不卡免费网站 | 国产精品自产拍在线观看 | 久久久久久久女国产乱让韩 | 波多野结衣av一区二区全免费观看 | 中文字幕乱妇无码av在线 | 久久亚洲国产成人精品性色 | 久久熟妇人妻午夜寂寞影院 | 欧美 丝袜 自拍 制服 另类 | 九一九色国产 | 国产办公室秘书无码精品99 | 俄罗斯老熟妇色xxxx | 亚洲国产成人a精品不卡在线 | 麻豆av传媒蜜桃天美传媒 | 又大又硬又爽免费视频 | 免费看男女做好爽好硬视频 | 久久久成人毛片无码 | 4hu四虎永久在线观看 | 国产av人人夜夜澡人人爽麻豆 | 久久国产精品偷任你爽任你 | 免费看少妇作爱视频 | 人人妻人人藻人人爽欧美一区 | 午夜精品一区二区三区的区别 | 精品国产一区二区三区四区在线看 | 夫妻免费无码v看片 | 中文精品久久久久人妻不卡 | 免费人成在线视频无码 | 无码免费一区二区三区 | 日日摸日日碰夜夜爽av | 图片小说视频一区二区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 色狠狠av一区二区三区 | 久久aⅴ免费观看 | 欧美亚洲日韩国产人成在线播放 | 综合网日日天干夜夜久久 | 日韩精品久久久肉伦网站 | 中文毛片无遮挡高清免费 | 特级做a爰片毛片免费69 | 宝宝好涨水快流出来免费视频 | 成人免费视频视频在线观看 免费 | 国产精品亚洲一区二区三区喷水 | 成 人 免费观看网站 | 精品久久久久香蕉网 | 亚洲啪av永久无码精品放毛片 | 台湾无码一区二区 | 久久99精品久久久久婷婷 | 国产午夜无码精品免费看 | 国产真人无遮挡作爱免费视频 | 无码人妻出轨黑人中文字幕 | 国产午夜无码精品免费看 | 一本色道久久综合亚洲精品不卡 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 久久午夜无码鲁丝片秋霞 | 日韩欧美群交p片內射中文 | 人妻中文无码久热丝袜 | 18禁黄网站男男禁片免费观看 | 国产真实伦对白全集 | 亚洲日本一区二区三区在线 | 国产精品亚洲专区无码不卡 | 日日干夜夜干 | 无码国产色欲xxxxx视频 | 人人澡人人妻人人爽人人蜜桃 | 中文字幕av伊人av无码av | 国产成人无码av在线影院 | 任你躁国产自任一区二区三区 | 熟女少妇人妻中文字幕 | 午夜精品久久久内射近拍高清 | 国产成人精品久久亚洲高清不卡 | 欧美丰满熟妇xxxx性ppx人交 | 少妇无码一区二区二三区 | 疯狂三人交性欧美 | 秋霞特色aa大片 | 亚洲综合在线一区二区三区 | 久久精品国产亚洲精品 | 国产精品久久久av久久久 | 日本欧美一区二区三区乱码 | 亚洲欧美精品aaaaaa片 | 国产精品二区一区二区aⅴ污介绍 | 天天拍夜夜添久久精品大 | 国产特级毛片aaaaaaa高清 | 国产精品人人爽人人做我的可爱 | 亚洲人成网站色7799 | 国产成人一区二区三区在线观看 | 成人欧美一区二区三区黑人 | 国产精品无码mv在线观看 | 99国产精品白浆在线观看免费 | 国产又爽又猛又粗的视频a片 | 日韩精品a片一区二区三区妖精 | 亚洲va中文字幕无码久久不卡 | 久久久久久久女国产乱让韩 | 国产成人久久精品流白浆 | 无码人妻黑人中文字幕 | 欧美老妇与禽交 | 黑人玩弄人妻中文在线 | 小sao货水好多真紧h无码视频 | 亚洲一区二区三区 | 欧美色就是色 | 国产精品对白交换视频 | 亚洲小说春色综合另类 | 国模大胆一区二区三区 | 国产av无码专区亚洲awww | 欧美人与善在线com | 久久午夜夜伦鲁鲁片无码免费 | 精品国精品国产自在久国产87 | 国产艳妇av在线观看果冻传媒 | 亚洲男人av天堂午夜在 | 午夜免费福利小电影 | 水蜜桃亚洲一二三四在线 | 国产精品久久久久久无码 | 一本色道久久综合狠狠躁 | 国产三级精品三级男人的天堂 | 国产精品人人爽人人做我的可爱 | 亚洲精品国产第一综合99久久 | 成人无码精品1区2区3区免费看 | 亚洲日韩av一区二区三区四区 | 精品人妻中文字幕有码在线 | 亚洲 激情 小说 另类 欧美 | 精品熟女少妇av免费观看 | 国产欧美精品一区二区三区 | 亚无码乱人伦一区二区 | 精品国产av色一区二区深夜久久 | 国产精华av午夜在线观看 | 精品一区二区三区波多野结衣 | 伊人久久大香线蕉av一区二区 | 2020久久超碰国产精品最新 | 成人三级无码视频在线观看 | 日日夜夜撸啊撸 | 中文毛片无遮挡高清免费 | 人人妻人人澡人人爽欧美一区九九 | 欧美兽交xxxx×视频 | 日韩欧美中文字幕在线三区 | 国产精品久久久久久亚洲毛片 | 99久久久无码国产aaa精品 | 中文字幕日韩精品一区二区三区 | 特大黑人娇小亚洲女 | 免费无码av一区二区 | 亚洲精品中文字幕 | 精品久久久久久亚洲精品 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 中文字幕无码免费久久9一区9 | 最新国产麻豆aⅴ精品无码 | 国产人妻大战黑人第1集 | 欧美 日韩 人妻 高清 中文 | 妺妺窝人体色www在线小说 | 天海翼激烈高潮到腰振不止 | 狠狠cao日日穞夜夜穞av | 又湿又紧又大又爽a视频国产 | 日日躁夜夜躁狠狠躁 | 熟妇人妻中文av无码 | 日韩无套无码精品 | 成人欧美一区二区三区黑人 | 亚洲国产精品无码一区二区三区 | 久久久久久亚洲精品a片成人 | 亚洲人成网站色7799 | 国产无遮挡又黄又爽免费视频 | 青青草原综合久久大伊人精品 | 免费人成在线视频无码 | 亚洲综合久久一区二区 | 四虎影视成人永久免费观看视频 | 国产亚洲欧美日韩亚洲中文色 | 人人超人人超碰超国产 | 亚洲国产精品无码一区二区三区 | 日本一卡2卡3卡四卡精品网站 | 波多野结衣av一区二区全免费观看 | 久久亚洲日韩精品一区二区三区 | 老司机亚洲精品影院无码 | 撕开奶罩揉吮奶头视频 | 中文字幕人妻丝袜二区 | 久久99热只有频精品8 | 国产精品a成v人在线播放 | 国产精品美女久久久 | 日韩精品无码一区二区中文字幕 | 欧美三级不卡在线观看 | 波多野42部无码喷潮在线 | 亚洲精品鲁一鲁一区二区三区 | 男女性色大片免费网站 | 国产偷抇久久精品a片69 | 国产福利视频一区二区 | 亚洲精品中文字幕久久久久 | 亚洲精品国产第一综合99久久 | 国产人妻大战黑人第1集 | 国产97人人超碰caoprom | 强开小婷嫩苞又嫩又紧视频 | 久久久精品456亚洲影院 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 无码中文字幕色专区 | 免费看男女做好爽好硬视频 | 国产在线无码精品电影网 | 久久综合色之久久综合 | 98国产精品综合一区二区三区 | 久久午夜无码鲁丝片午夜精品 | 久久亚洲中文字幕无码 | 色诱久久久久综合网ywww | 亚洲 日韩 欧美 成人 在线观看 | 国产成人精品三级麻豆 | 最新国产麻豆aⅴ精品无码 | 午夜精品久久久久久久久 | 日日橹狠狠爱欧美视频 | 少妇性荡欲午夜性开放视频剧场 | 婷婷五月综合激情中文字幕 | 男人的天堂2018无码 | 国产av无码专区亚洲a∨毛片 | 国产亚洲视频中文字幕97精品 | www国产亚洲精品久久久日本 | 国产成人综合美国十次 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 久久精品国产一区二区三区肥胖 | 亚洲精品成人av在线 | 国产亚洲精品久久久ai换 | 国产深夜福利视频在线 | 在线亚洲高清揄拍自拍一品区 | 无码人妻av免费一区二区三区 | 特黄特色大片免费播放器图片 | a片在线免费观看 | 成 人 网 站国产免费观看 | 亚洲国产精品无码一区二区三区 | 天堂а√在线地址中文在线 | 国产精品久久福利网站 | √天堂中文官网8在线 | 久久久中文字幕日本无吗 | 亚洲成色在线综合网站 | 国产精品-区区久久久狼 | 欧美精品无码一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 丝袜足控一区二区三区 | 国内精品九九久久久精品 | 国产激情无码一区二区app | 日韩视频 中文字幕 视频一区 | 一区二区三区高清视频一 | 国产偷国产偷精品高清尤物 | 国产网红无码精品视频 | 亚洲综合在线一区二区三区 | 无码人妻丰满熟妇区毛片18 | 又大又黄又粗又爽的免费视频 | 亚洲国产精品久久久久久 | 国产肉丝袜在线观看 | 强开小婷嫩苞又嫩又紧视频 | 97资源共享在线视频 | 久久精品视频在线看15 | 亚洲精品久久久久中文第一幕 | 亚洲精品国偷拍自产在线观看蜜桃 | 一本久久a久久精品vr综合 | 国产在线精品一区二区高清不卡 | 2020久久超碰国产精品最新 | 性做久久久久久久免费看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 东北女人啪啪对白 | 国产又爽又猛又粗的视频a片 | 性欧美大战久久久久久久 | 老子影院午夜精品无码 | 香蕉久久久久久av成人 | 无码国产乱人伦偷精品视频 | 国产乱人伦偷精品视频 | 少妇被黑人到高潮喷出白浆 | 国产偷国产偷精品高清尤物 | 亚洲の无码国产の无码影院 | 亚洲自偷自偷在线制服 | 色狠狠av一区二区三区 | 亚洲a无码综合a国产av中文 | 亚洲精品无码人妻无码 | 少妇无码一区二区二三区 | 高清无码午夜福利视频 | 无码人妻精品一区二区三区不卡 | 国产无套粉嫩白浆在线 | 亚洲国产成人a精品不卡在线 | 国产精品亚洲五月天高清 | 少妇邻居内射在线 | 亚洲大尺度无码无码专区 | 鲁鲁鲁爽爽爽在线视频观看 | 欧美黑人乱大交 | 51国偷自产一区二区三区 | 无码人妻久久一区二区三区不卡 | 日本护士xxxxhd少妇 | 六十路熟妇乱子伦 | 亚洲国产精品一区二区美利坚 | 宝宝好涨水快流出来免费视频 | 国产超碰人人爽人人做人人添 | 国产卡一卡二卡三 | 国产欧美亚洲精品a | 久久www免费人成人片 | 久久精品国产日本波多野结衣 | 久久成人a毛片免费观看网站 | 午夜无码人妻av大片色欲 | 精品久久久久香蕉网 | 97久久国产亚洲精品超碰热 | 亚洲一区二区三区国产精华液 | 免费国产成人高清在线观看网站 | 亚洲一区二区三区无码久久 | 超碰97人人做人人爱少妇 | 四虎国产精品免费久久 | 久久成人a毛片免费观看网站 | www国产精品内射老师 | 国产精品亚洲综合色区韩国 | 亚洲精品欧美二区三区中文字幕 | 2020久久超碰国产精品最新 | 久久久久av无码免费网 | 老太婆性杂交欧美肥老太 | 欧美 日韩 人妻 高清 中文 | 又大又黄又粗又爽的免费视频 | 人人超人人超碰超国产 | 55夜色66夜色国产精品视频 | 亚洲欧美日韩成人高清在线一区 | 亚洲精品无码人妻无码 | 欧美喷潮久久久xxxxx | 国产无套粉嫩白浆在线 | 无码人中文字幕 | 免费国产黄网站在线观看 | 国产精品亚洲а∨无码播放麻豆 | 啦啦啦www在线观看免费视频 | 无人区乱码一区二区三区 | 性史性农村dvd毛片 | 欧美一区二区三区视频在线观看 | 欧美黑人巨大xxxxx | 亚洲国精产品一二二线 | 免费无码的av片在线观看 | 国产免费久久精品国产传媒 | 一本大道伊人av久久综合 | 欧美精品国产综合久久 | 欧洲美熟女乱又伦 | 久久久久久久久蜜桃 | 永久免费精品精品永久-夜色 | 日本一卡二卡不卡视频查询 | av无码久久久久不卡免费网站 | 国产精品久久久久无码av色戒 | 久久精品女人天堂av免费观看 | 国产另类ts人妖一区二区 | 午夜精品一区二区三区的区别 | 久久精品中文闷骚内射 | 色综合久久久久综合一本到桃花网 | 亚洲精品一区二区三区婷婷月 | 国产在线一区二区三区四区五区 | 免费男性肉肉影院 | 性啪啪chinese东北女人 | 国产香蕉尹人视频在线 | 亚洲中文字幕成人无码 | 亚洲码国产精品高潮在线 | 日本大乳高潮视频在线观看 | 国产成人精品无码播放 | 好男人社区资源 | 又紧又大又爽精品一区二区 | 精品国偷自产在线 | 国产无遮挡又黄又爽又色 | 国产精品欧美成人 | 亚洲春色在线视频 | 曰本女人与公拘交酡免费视频 | www国产亚洲精品久久久日本 | 日韩精品a片一区二区三区妖精 | 熟妇人妻中文av无码 | 国产亚洲欧美在线专区 | 在线欧美精品一区二区三区 | 日韩av无码一区二区三区不卡 | 麻豆国产丝袜白领秘书在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 无码一区二区三区在线观看 | 99久久精品无码一区二区毛片 | 日韩成人一区二区三区在线观看 | 免费男性肉肉影院 | 亚洲精品久久久久久一区二区 | 日产国产精品亚洲系列 | 亚洲精品久久久久久一区二区 | 强开小婷嫩苞又嫩又紧视频 | 中文字幕人妻丝袜二区 | 国产sm调教视频在线观看 | 亚洲国产精品久久人人爱 | 国产suv精品一区二区五 | 人人澡人人透人人爽 | 亚洲熟妇色xxxxx欧美老妇 | 日本在线高清不卡免费播放 | 曰韩无码二三区中文字幕 | 亚洲日韩一区二区三区 | 乱人伦人妻中文字幕无码久久网 | 国产尤物精品视频 | 人妻有码中文字幕在线 | 国产疯狂伦交大片 | 狠狠躁日日躁夜夜躁2020 | 亚洲一区二区三区无码久久 | 久久精品无码一区二区三区 | 国产在线一区二区三区四区五区 | 大肉大捧一进一出视频出来呀 | 亚洲精品成a人在线观看 | 亚洲中文字幕无码一久久区 | 日本精品高清一区二区 | 亚洲一区二区三区在线观看网站 | 亚洲精品国产精品乱码视色 | 狠狠色噜噜狠狠狠狠7777米奇 | 2019午夜福利不卡片在线 | 内射巨臀欧美在线视频 | 亚洲成a人片在线观看日本 | 色婷婷香蕉在线一区二区 | 妺妺窝人体色www婷婷 | 青青久在线视频免费观看 | 国产卡一卡二卡三 | 午夜性刺激在线视频免费 | 亚洲va欧美va天堂v国产综合 | 亚洲va中文字幕无码久久不卡 | 国产亚洲精品久久久久久久 | 色狠狠av一区二区三区 | 久久久www成人免费毛片 | 国产人妻精品一区二区三区 | 无码人妻出轨黑人中文字幕 | 我要看www免费看插插视频 | 中国大陆精品视频xxxx | 国产内射爽爽大片视频社区在线 | 国产美女精品一区二区三区 | 无码国产激情在线观看 | 国产精品美女久久久 | 男女作爱免费网站 | 国产精品爱久久久久久久 | 国产成人午夜福利在线播放 | 无码中文字幕色专区 | 十八禁真人啪啪免费网站 | 少妇人妻大乳在线视频 | 国产成人人人97超碰超爽8 | 亚洲精品午夜国产va久久成人 | 内射爽无广熟女亚洲 | 国产精品人人妻人人爽 | 久久99精品久久久久久动态图 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 欧美成人家庭影院 | 亚洲最大成人网站 | 亚洲中文字幕久久无码 | 亚洲成av人影院在线观看 | 色噜噜亚洲男人的天堂 | 国产麻豆精品精东影业av网站 | 四十如虎的丰满熟妇啪啪 | 国产精品视频免费播放 | 欧美日韩色另类综合 | 黑人巨大精品欧美黑寡妇 | 一本大道久久东京热无码av | 久久久久成人片免费观看蜜芽 | 国语精品一区二区三区 | 日本爽爽爽爽爽爽在线观看免 | 久久精品中文闷骚内射 | 国产成人一区二区三区别 | 国产色视频一区二区三区 | 伊人色综合久久天天小片 | 九九在线中文字幕无码 | 国产疯狂伦交大片 | 国产乱人无码伦av在线a | 中文字幕色婷婷在线视频 | 精品久久久无码中文字幕 | 无码av免费一区二区三区试看 | 熟妇人妻无乱码中文字幕 | 初尝人妻少妇中文字幕 | 一个人看的视频www在线 | 乱码av麻豆丝袜熟女系列 | 国产sm调教视频在线观看 | 久久无码专区国产精品s | 免费看男女做好爽好硬视频 | 99视频精品全部免费免费观看 | 国产色在线 | 国产 | 欧美日韩一区二区三区自拍 | 亚洲无人区午夜福利码高清完整版 | 丰满护士巨好爽好大乳 | 亚洲伊人久久精品影院 | 亚洲男人av香蕉爽爽爽爽 | av香港经典三级级 在线 | 国产特级毛片aaaaaaa高清 | 欧美精品一区二区精品久久 | 色综合天天综合狠狠爱 | 男人扒开女人内裤强吻桶进去 | 国产成人精品久久亚洲高清不卡 | 成年美女黄网站色大免费全看 | 亚洲综合无码一区二区三区 | 国产69精品久久久久app下载 | 成人无码精品1区2区3区免费看 | 51国偷自产一区二区三区 | 亚洲精品鲁一鲁一区二区三区 | 久久久久久av无码免费看大片 | 久久久久久久女国产乱让韩 | 亚洲性无码av中文字幕 | 中文无码伦av中文字幕 | 四虎4hu永久免费 | 国产在线aaa片一区二区99 | 爆乳一区二区三区无码 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产精品久久久久7777 | 丰满岳乱妇在线观看中字无码 | 精品无码av一区二区三区 | 久久精品女人天堂av免费观看 | 国产精品对白交换视频 | 欧美性生交活xxxxxdddd | 国产精品久久久久久久9999 | 久久亚洲中文字幕精品一区 | 亚洲熟妇色xxxxx欧美老妇 | 欧美变态另类xxxx | 色老头在线一区二区三区 | 精品国产精品久久一区免费式 | 国产精品久免费的黄网站 | 欧美国产日产一区二区 | 亚洲七七久久桃花影院 | 欧美乱妇无乱码大黄a片 | 内射巨臀欧美在线视频 | 日本乱偷人妻中文字幕 | 疯狂三人交性欧美 | 久久人人爽人人爽人人片ⅴ | 大屁股大乳丰满人妻 | 狠狠色色综合网站 | 中文无码成人免费视频在线观看 | 国产精品久久久久久无码 | 欧美人与物videos另类 | 欧美黑人巨大xxxxx | 免费无码肉片在线观看 | 少妇人妻大乳在线视频 | 亚洲日本va中文字幕 | 久久久av男人的天堂 | 狠狠色噜噜狠狠狠7777奇米 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 日日摸天天摸爽爽狠狠97 | 国产亚洲tv在线观看 | 熟女俱乐部五十路六十路av | 久久国产精品萌白酱免费 | 亚洲啪av永久无码精品放毛片 | 特黄特色大片免费播放器图片 | 国产午夜精品一区二区三区嫩草 | 人妻人人添人妻人人爱 | 无码国内精品人妻少妇 | 少妇无套内谢久久久久 | 色五月五月丁香亚洲综合网 | 亚洲精品成人av在线 | 漂亮人妻洗澡被公强 日日躁 | 亚洲va中文字幕无码久久不卡 | 成年美女黄网站色大免费全看 | 亚洲色www成人永久网址 | 亚洲日本va午夜在线电影 | 日本精品高清一区二区 | 久久久久久国产精品无码下载 | 国产午夜手机精彩视频 | 人人爽人人爽人人片av亚洲 | 亚洲色www成人永久网址 | 欧美 日韩 亚洲 在线 | 六月丁香婷婷色狠狠久久 | 精品久久8x国产免费观看 | 色婷婷久久一区二区三区麻豆 | 中文字幕 亚洲精品 第1页 | 国产在线精品一区二区三区直播 | 一二三四社区在线中文视频 | 蜜臀av在线观看 在线欧美精品一区二区三区 | ass日本丰满熟妇pics | 欧美亚洲国产一区二区三区 | 免费无码的av片在线观看 | 在线а√天堂中文官网 | 少妇高潮一区二区三区99 | 奇米影视7777久久精品人人爽 | av在线亚洲欧洲日产一区二区 | 精品无人区无码乱码毛片国产 | 日本熟妇大屁股人妻 | 国产精品永久免费视频 | 少妇一晚三次一区二区三区 | 香蕉久久久久久av成人 | 久久久久人妻一区精品色欧美 | 欧美国产亚洲日韩在线二区 | 99久久精品国产一区二区蜜芽 | 亚洲精品中文字幕乱码 | 国产激情艳情在线看视频 | 中国大陆精品视频xxxx | 奇米影视888欧美在线观看 | 久久99精品久久久久久 | 成熟妇人a片免费看网站 | 日日夜夜撸啊撸 | 亚洲一区av无码专区在线观看 | 野狼第一精品社区 | a国产一区二区免费入口 | 成在人线av无码免观看麻豆 | 免费观看又污又黄的网站 | 久久久国产精品无码免费专区 | 5858s亚洲色大成网站www | 国产办公室秘书无码精品99 | 欧美熟妇另类久久久久久不卡 | 国产欧美精品一区二区三区 | 牲欲强的熟妇农村老妇女视频 | 欧美一区二区三区 | 中文字幕无码av波多野吉衣 | 精品欧美一区二区三区久久久 | 日韩精品a片一区二区三区妖精 | 天堂亚洲免费视频 | 国产精品久久国产精品99 | 国产午夜福利亚洲第一 | 六月丁香婷婷色狠狠久久 | 国产办公室秘书无码精品99 | 国产婷婷色一区二区三区在线 | 国内精品人妻无码久久久影院蜜桃 | 狂野欧美激情性xxxx | 色老头在线一区二区三区 | 色偷偷人人澡人人爽人人模 | 国产精品久久久久影院嫩草 | 大地资源网第二页免费观看 | 亚洲 高清 成人 动漫 | 国产免费观看黄av片 | 亚洲精品久久久久avwww潮水 | 扒开双腿吃奶呻吟做受视频 | 国产亲子乱弄免费视频 | 欧美丰满少妇xxxx性 | 日本高清一区免费中文视频 | 日韩欧美中文字幕在线三区 | 狂野欧美性猛xxxx乱大交 | 国产午夜精品一区二区三区嫩草 | 天天摸天天碰天天添 | 妺妺窝人体色www婷婷 | 香港三级日本三级妇三级 | 鲁大师影院在线观看 | 色老头在线一区二区三区 | 成人免费视频在线观看 | 欧美自拍另类欧美综合图片区 | 国产精品亚洲五月天高清 | aⅴ在线视频男人的天堂 | 国模大胆一区二区三区 | 亚洲精品国偷拍自产在线麻豆 | 内射白嫩少妇超碰 | 久久亚洲中文字幕精品一区 | 亚洲无人区午夜福利码高清完整版 | 中文字幕乱码亚洲无线三区 | 动漫av网站免费观看 | 亚洲国产一区二区三区在线观看 | 日韩欧美中文字幕在线三区 | 内射爽无广熟女亚洲 | 国产无遮挡吃胸膜奶免费看 | 东北女人啪啪对白 | 无码国产色欲xxxxx视频 | 在线a亚洲视频播放在线观看 | 永久免费观看国产裸体美女 | 人人澡人人透人人爽 | 又黄又爽又色的视频 | 中文字幕乱妇无码av在线 | 欧洲美熟女乱又伦 | 免费中文字幕日韩欧美 | 国产免费观看黄av片 | 特级做a爰片毛片免费69 | 亚洲码国产精品高潮在线 | 国产人妖乱国产精品人妖 | 骚片av蜜桃精品一区 | 国产亚洲精品久久久久久大师 | 少妇无码一区二区二三区 | 日韩在线不卡免费视频一区 | 激情国产av做激情国产爱 | 亚洲日本一区二区三区在线 | 国产手机在线αⅴ片无码观看 | 天天拍夜夜添久久精品大 | 中文字幕无线码 | 女高中生第一次破苞av | 中文字幕人成乱码熟女app | 国产明星裸体无码xxxx视频 | 一本久道久久综合婷婷五月 | 18无码粉嫩小泬无套在线观看 | 中文字幕乱码人妻无码久久 | 激情国产av做激情国产爱 | 久久这里只有精品视频9 | 国产乱人伦av在线无码 | 特级做a爰片毛片免费69 | 狠狠躁日日躁夜夜躁2020 | ass日本丰满熟妇pics | 亚洲国产精品一区二区第一页 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 精品久久久中文字幕人妻 | 日本又色又爽又黄的a片18禁 | 久久精品国产一区二区三区肥胖 | 色 综合 欧美 亚洲 国产 | 2019nv天堂香蕉在线观看 | 欧美国产日韩久久mv | 澳门永久av免费网站 | 中文字幕乱码人妻二区三区 | 久久久久成人片免费观看蜜芽 | 亚洲国产日韩a在线播放 | 大地资源中文第3页 | 日日夜夜撸啊撸 | 欧美怡红院免费全部视频 | 色欲久久久天天天综合网精品 | 四虎4hu永久免费 | 日本va欧美va欧美va精品 | 无码人妻丰满熟妇区毛片18 | 欧美性色19p | 99国产精品白浆在线观看免费 | 国产精品第一区揄拍无码 | 亚洲精品一区三区三区在线观看 | 久久亚洲国产成人精品性色 | 少妇性l交大片欧洲热妇乱xxx | 久久久久久久人妻无码中文字幕爆 | 18无码粉嫩小泬无套在线观看 | 久久久中文字幕日本无吗 | 俺去俺来也在线www色官网 | 强辱丰满人妻hd中文字幕 | 东京热无码av男人的天堂 | 欧美 丝袜 自拍 制服 另类 | 又色又爽又黄的美女裸体网站 | 国产成人综合色在线观看网站 | 亚洲人交乣女bbw | 俄罗斯老熟妇色xxxx | 小sao货水好多真紧h无码视频 | 欧美成人家庭影院 | 最新国产乱人伦偷精品免费网站 | 日本一区二区三区免费播放 | 欧美性黑人极品hd | aⅴ在线视频男人的天堂 | 国产区女主播在线观看 | 18无码粉嫩小泬无套在线观看 | 天天做天天爱天天爽综合网 | 久久综合给久久狠狠97色 | 久久久久久久女国产乱让韩 | 美女扒开屁股让男人桶 | 国产suv精品一区二区五 | 国产一精品一av一免费 | 国产色视频一区二区三区 | 精品人妻人人做人人爽 | 5858s亚洲色大成网站www | 成人一区二区免费视频 | 欧美日韩色另类综合 | 国产成人无码av在线影院 | 亚洲一区二区三区香蕉 | 国内少妇偷人精品视频 | 青春草在线视频免费观看 | 精品一区二区不卡无码av | 日本www一道久久久免费榴莲 | 狠狠噜狠狠狠狠丁香五月 | 久久久久亚洲精品中文字幕 | 日本熟妇浓毛 | 中文亚洲成a人片在线观看 | 亚洲国产欧美日韩精品一区二区三区 | 久久久无码中文字幕久... | 久久精品国产一区二区三区 | 日本乱人伦片中文三区 | 亚洲gv猛男gv无码男同 | 伊在人天堂亚洲香蕉精品区 | 国产乱人偷精品人妻a片 | 图片区 小说区 区 亚洲五月 | 欧美老人巨大xxxx做受 | 久久99精品国产.久久久久 | 亚洲欧美国产精品专区久久 | 成在人线av无码免费 | 亚洲成色在线综合网站 | 日韩精品成人一区二区三区 | 亚洲人成人无码网www国产 | 精品厕所偷拍各类美女tp嘘嘘 | 色欲综合久久中文字幕网 | 欧美放荡的少妇 | 最新国产麻豆aⅴ精品无码 | 久久久久99精品成人片 | 玩弄中年熟妇正在播放 | av无码电影一区二区三区 | 国产精品a成v人在线播放 | 亚洲成色www久久网站 | 亚洲精品一区二区三区四区五区 | 日本一本二本三区免费 | 中文无码精品a∨在线观看不卡 | 动漫av一区二区在线观看 | 国产农村乱对白刺激视频 | 国产办公室秘书无码精品99 | 人人爽人人澡人人高潮 | 人妻少妇精品视频专区 | 好屌草这里只有精品 | 久久无码专区国产精品s | 精品一二三区久久aaa片 | 国产女主播喷水视频在线观看 | 欧美激情内射喷水高潮 | 国产人妻精品一区二区三区不卡 | 免费人成在线视频无码 | 成人av无码一区二区三区 | 国产精品久久福利网站 | 激情内射亚州一区二区三区爱妻 | 成人试看120秒体验区 | 高潮喷水的毛片 | 天天燥日日燥 | 精品熟女少妇av免费观看 | 午夜嘿嘿嘿影院 | 乱人伦人妻中文字幕无码久久网 | 麻豆人妻少妇精品无码专区 | 国产乱人偷精品人妻a片 | 国产色视频一区二区三区 | 国产特级毛片aaaaaa高潮流水 | 亚洲精品成人av在线 | 十八禁视频网站在线观看 | 无码中文字幕色专区 | 77777熟女视频在线观看 а天堂中文在线官网 | 一区二区三区高清视频一 | 国产疯狂伦交大片 | 领导边摸边吃奶边做爽在线观看 | 无码精品国产va在线观看dvd | 无码吃奶揉捏奶头高潮视频 | 欧美人与善在线com | 少妇性l交大片欧洲热妇乱xxx | 久久人人爽人人爽人人片ⅴ | 高潮毛片无遮挡高清免费视频 | aⅴ在线视频男人的天堂 | 亚无码乱人伦一区二区 | 国产麻豆精品一区二区三区v视界 | 日日碰狠狠躁久久躁蜜桃 | 久久精品无码一区二区三区 | 我要看www免费看插插视频 | 中文毛片无遮挡高清免费 | 亚洲一区二区三区在线观看网站 | 午夜成人1000部免费视频 | 亚洲自偷自拍另类第1页 | 免费人成在线观看网站 | 又大又紧又粉嫩18p少妇 | 亚洲欧美日韩成人高清在线一区 | 国产欧美熟妇另类久久久 | 成人试看120秒体验区 | 亚洲一区二区观看播放 | 极品嫩模高潮叫床 | 18精品久久久无码午夜福利 | 成人免费视频视频在线观看 免费 | 亚洲国产午夜精品理论片 | 久久人人97超碰a片精品 | 蜜桃av抽搐高潮一区二区 | 麻豆精品国产精华精华液好用吗 | 大地资源网第二页免费观看 | 日本大乳高潮视频在线观看 | 欧美一区二区三区 | 一本久道久久综合婷婷五月 | 久久www免费人成人片 | 久久人人爽人人人人片 | 亚洲日本在线电影 | 亚洲日本一区二区三区在线 | 久久精品国产99久久6动漫 | 国产精品美女久久久久av爽李琼 | 老头边吃奶边弄进去呻吟 | 巨爆乳无码视频在线观看 | 午夜成人1000部免费视频 | 久热国产vs视频在线观看 | 亚洲色欲久久久综合网东京热 | 性生交大片免费看l | 久久久av男人的天堂 | 亚洲日本一区二区三区在线 | 国产偷自视频区视频 | 亚洲区小说区激情区图片区 | 国产精品无码永久免费888 | 正在播放老肥熟妇露脸 | 国产精品无码一区二区三区不卡 | 国产激情无码一区二区 | 亚洲爆乳无码专区 | 无码人中文字幕 | 99精品视频在线观看免费 | 久久精品一区二区三区四区 | 无码av免费一区二区三区试看 | 在线a亚洲视频播放在线观看 | 欧美自拍另类欧美综合图片区 | yw尤物av无码国产在线观看 | 激情内射亚州一区二区三区爱妻 | 真人与拘做受免费视频 | 国产亚洲tv在线观看 | 国产午夜无码精品免费看 | 无码人妻精品一区二区三区不卡 | 国语精品一区二区三区 | 国产无遮挡又黄又爽免费视频 | 人妻天天爽夜夜爽一区二区 | 国产亚洲美女精品久久久2020 | 国产猛烈高潮尖叫视频免费 | 久久久www成人免费毛片 | 又大又黄又粗又爽的免费视频 | 久久久久久久人妻无码中文字幕爆 | 天堂亚洲2017在线观看 | 99久久久无码国产精品免费 | 久久久亚洲欧洲日产国码αv | 无码国模国产在线观看 | 亚洲区欧美区综合区自拍区 | 国内精品人妻无码久久久影院蜜桃 | 亚洲 日韩 欧美 成人 在线观看 | 人妻少妇精品无码专区动漫 | 精品国偷自产在线视频 | 亚洲成av人片在线观看无码不卡 | 国产三级久久久精品麻豆三级 | 久久久久成人精品免费播放动漫 | aⅴ亚洲 日韩 色 图网站 播放 | 无套内谢的新婚少妇国语播放 | 亚洲国产精品无码一区二区三区 | 色一情一乱一伦一区二区三欧美 | 99久久精品午夜一区二区 | 久久久久成人片免费观看蜜芽 | 色综合久久久久综合一本到桃花网 | 97无码免费人妻超级碰碰夜夜 | 亚洲精品综合五月久久小说 | 精品夜夜澡人妻无码av蜜桃 | 一本久久伊人热热精品中文字幕 | 无码国产激情在线观看 | 精品国精品国产自在久国产87 | 国产精品亚洲专区无码不卡 | 国产精品无码永久免费888 | 久久人人爽人人人人片 | 亚洲一区av无码专区在线观看 | 丰满人妻翻云覆雨呻吟视频 | 无码av中文字幕免费放 | 欧美熟妇另类久久久久久多毛 | 永久免费精品精品永久-夜色 | yw尤物av无码国产在线观看 | 国产成人午夜福利在线播放 | 无码人妻丰满熟妇区毛片18 | 亚洲欧美精品aaaaaa片 | 骚片av蜜桃精品一区 | 俺去俺来也在线www色官网 | 好屌草这里只有精品 | 高清国产亚洲精品自在久久 | 波多野结衣乳巨码无在线观看 | 色情久久久av熟女人妻网站 | 精品无码一区二区三区的天堂 | 日本一卡2卡3卡四卡精品网站 | 无码人妻久久一区二区三区不卡 | 99久久婷婷国产综合精品青草免费 | 成人无码视频免费播放 | 亚洲区欧美区综合区自拍区 | 亚洲成熟女人毛毛耸耸多 | 精品 日韩 国产 欧美 视频 | 300部国产真实乱 | 色综合久久88色综合天天 | 国产熟妇高潮叫床视频播放 | 国产黄在线观看免费观看不卡 | 青青青爽视频在线观看 | 色妞www精品免费视频 | 女人被男人爽到呻吟的视频 | 亚洲狠狠色丁香婷婷综合 | 久久婷婷五月综合色国产香蕉 | 午夜无码区在线观看 | 国产免费无码一区二区视频 | 一本色道久久综合狠狠躁 | 亚洲欧美国产精品专区久久 | 久久婷婷五月综合色国产香蕉 | 男女性色大片免费网站 | 玩弄中年熟妇正在播放 | 东京热无码av男人的天堂 | 色情久久久av熟女人妻网站 | 久久久成人毛片无码 | 人人澡人人妻人人爽人人蜜桃 | 特黄特色大片免费播放器图片 | 婷婷五月综合缴情在线视频 | 久久午夜无码鲁丝片秋霞 | 激情爆乳一区二区三区 | 亚洲中文字幕无码一久久区 | 特级做a爰片毛片免费69 | 国产精品手机免费 | 中文字幕无码日韩欧毛 | 亚洲人成人无码网www国产 | 精品久久8x国产免费观看 | 成人片黄网站色大片免费观看 | 99麻豆久久久国产精品免费 | 一本精品99久久精品77 | 国产精品久久久久久亚洲毛片 | 性啪啪chinese东北女人 | 少妇性俱乐部纵欲狂欢电影 | 东京热一精品无码av | 一个人看的www免费视频在线观看 | 亚洲中文字幕在线观看 | 熟女少妇人妻中文字幕 | 亚洲国产精品毛片av不卡在线 | 荡女精品导航 | 高清无码午夜福利视频 | 天下第一社区视频www日本 | 亚洲色www成人永久网址 | 国产疯狂伦交大片 | av香港经典三级级 在线 | 青青草原综合久久大伊人精品 | 国产精品无码mv在线观看 | 天堂无码人妻精品一区二区三区 | 久久综合九色综合97网 | 婷婷五月综合激情中文字幕 | 久久综合给合久久狠狠狠97色 | 亚洲色在线无码国产精品不卡 | 无码帝国www无码专区色综合 | 内射爽无广熟女亚洲 | 亚洲熟熟妇xxxx | 久久人人爽人人爽人人片ⅴ | 欧美午夜特黄aaaaaa片 | 伊人久久大香线焦av综合影院 |