青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

luqingfei@C++

為中華之崛起而崛起!
兼聽則明,偏聽則暗。

Win32匯編--使用資源--對話框(一)

 

使用資源對話框

 

簡介

顧名思義,對話框完成的是“對話”功能,應用程序一般建立一個主窗口用做工作界面,大部分的工作分在主窗口的客戶區完成,但程序往往需要和用戶交互,如輸入參數和輸入文本等,這些界面不必要全部放在主窗口中,習慣的做法是通過選擇菜單項彈出一個窗口,然后在這個窗口中完成對話,這個窗口就是“對話框”,對話框中的按鈕、文本框和圖標等稱為“子窗口控件”。

 

為了提示用戶,習慣于在會引出對話框的菜單項后面加上省略號。如“文件”菜單中的“另存為”表示會引出一個選擇文件名的對話框,所以“另存為”3個字后面加了個省略號。對話框最典型的例子就是寫字板“查找”菜單彈出的窗口以及IE瀏覽器中選擇“Internet 選項”菜單項彈出的設置窗口。

 

1、對話框的類型

對話框分兩類:modal對話框和modeless對話框,翻譯成中文就是“模態的”和“非模態的”(也有的地方翻譯成“模式的”和“非模式的”,Visual FoxPro中文版式就是這樣),它們之間的區別在于是否允許用戶在不同窗口間進行切換:當顯示非模態對話框時,用戶可以隨意在這個對話框和其它窗口之間切換;而顯示一個模態對話框時,用戶在關閉對話框之前不允許切換到同一程序的其它窗口中,但可以切換到其他程序的窗口中;如果顯示的是操作系統所屬的模態對話框(即“系統模態的”),則切換到其他任何程序的窗口都是不允許的。

 

Windows在資源文件中定義對話框,然后在程序中利用這個模板創建對話框,模態對話框和非模態對話框的資源定義是相同的,只是創建時調用的函數不同而已。

 

2、對話框的工作原理

很明顯,對話框和普通窗口之間有很多相似之處,實際上對話框就是基于窗口的,對話框的窗口風格使用的就是普通窗口的風格定義,對話框也有一個類似于窗口過程的對話框過程,但對話框和普通窗口在實現上又有很多不同之處,模態對話框和非模態對話框的實現也是不同的。普通的窗口在建立之前需要用RegisterClass注冊一個窗口類,然后用CreateWindow建立窗口,建立窗口所需的參數如窗口風格、大小位置和窗口過程地址等由窗口類以及CreateWindow中的參數共同提供。

 

建立對話框的時候并不使用CreateWindow函數,取而代之,建立模態對話框的函數是DialogBoxParam,建立非模態對話框的函數是CreateDialogParam,調用這兩個函數創建對話框窗口之前不需要注冊對話框的窗口類。

 

Windows在這兩個函數的內部調用CreateWindowEx來建立對話框,使用的風格、大小和位置參數取自資源中定義的對話框模板,使用的窗口類則是Windows內部定義的類,如果讀者用一些工具去查看,會發現類名是“#32770之類的字符串,在這個名字奇特的窗口類中,窗口過程被定義到了Windows內部的“對話框管理器”代碼中,Windows在這里處理對話框的大部分消息,如維護客戶區的刷新,鍵盤接口(按Tab鍵在不同子窗口之間切換、按回車調用默認按鈕等),對話框管理器在初始化對話框時會根據對話框模板中定義的子窗口控件建立對話框中所有的子窗口。

 

用戶程序中的對話框過程是由對話框管理器調用的,在處理消息前,對話框管理器會先調用用戶指定的對話框過程,再根據對話框過程的返回值決定是否處理它們。

 

Windows對模態對話框,和非模態對話框的處理有些不同。在創建并顯示模態對話框后,Windows會為它在內部建立一個消息循環,在這個消息循環中把消息發送給對話框管理器,對話框管理器在處理消息的過程中會調用用戶定義的對話框過程,當對話框關閉的時候,Windows退出內建的消息循環,并從DialogBoxParam函數返回。而對于非模態對話框,CreateDialogParam函數在創建對話框后直接返回,對話框窗口的消息是通過用戶程序中的消息循環派送的。

 

由于模態對話框的特征,使得用戶它來做小程序的主窗口非常方便,因為用一句DialogBoxParam函數就可以搞定了,既不用注冊窗口類,也不用寫消息循環,這對看到創建窗口的幾十句代碼就煩的讀者來說可真是個福音,這種方法的缺點就是無法使用依賴消息循環來完成的功能,很明顯,加速鍵就不能用了。

 

 

對話框的資源定義

對話框資源定義的語法

在資源腳本中定義對話框的語法是:

       對話框ID      DIALOG        [DISCARDABLE] x坐標, y坐標, 寬度, 高度

       [可選屬性]

       BEGIN

                     子窗口控件

                    

       END

 

對話框中的子窗口控件語句定義在BEGIN/END(當然也可以以用花括號)之中,在這之前,可以定義對話框的一些可選屬性,每種屬性單獨用一行定義,常用的可選屬性如下表所示:

                     對話框的可選屬性

屬性

定義語法

說明

標題文字

CAPTION “文字

定義顯示在窗口標題欄上的文字

窗口類

CLASS “類名

定義對話框窗口使用的窗口類,如果不定義,則使用Windows內建的類

窗口風格

STYLE 風格組合

定義對話框的窗口風格,同CreateWindowEx中的dwStyle參數

擴展風格

EXSTYLE風格組合

定義對話框的擴展窗口風格,同CreateWindowEx中的dwExStyle參數

字體

FONT 大小, “字體名

定義對話框包括子窗口控件使用的字體

菜單

MENU 菜單 ID

對話框中使用的菜單,菜單ID在同一個資源腳本文件中定義

 

本節例子程序的資源腳本文件Dialog.rc定義如下:

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#include    <resource.h>

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#define         ICO_MAIN        0x1000      //圖標

#define         DLG_MAIN        1

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN        ICON            "Main.ico"

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DLG_MAIN        DIALOG 50, 50, 113, 64

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "對話框模板"

FONT 9, "宋體"

{

    ICON    ICO_MAIN, -1, 10, 11, 18, 21

    CTEXT   "簡單的對話框例子\n Win32ASM編寫", -1, 36, 14, 70, 19

    DEFPUSHBUTTON "退出(&X)", IDOK, 58, 46, 50, 14

    CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 39, 103, 1

}

 

腳本文件中除了定義圖標之外,另外還定義了一個ID1的對話框,對話框中有4個子窗口控件,分別是圖標、文本、按鈕和一個橫線,按鈕的IDIDOK,其他的子窗口控件由于是靜態控件,不會向對話框過程發送命令,所以ID就設置為-1,這些控件的具體用法將在后面的內容中詳細介紹。

 

定義中還指定了一些可選屬性,STYLE語句定義了對話框窗口的風格,CAPTION語句把標題欄定義為“對話框模板”,FONT語句指定了對話框使用的字體是大小為9的宋體。

 

對話框的位置為(5050),大小為寬113單位,高64單位,讀者可能已經注意到:這個對話框的大小好像比寬113像素、高64像素的窗口要大,事實上的確如此,這也正是大小是“單位”而不是“像素”的原因。對話框的位置、大小以及所有子窗口控件的度量單位是根據系統字體的大小來決定的,橫向(x坐標和寬度)每單位為系統字符平均寬度的1/4,縱向(y坐標和高度)每單位為字符平均高度的1/8,由于系統字體的字符高度大致為寬度的兩倍,所以雖然這種計算方法有些費解,但橫向和縱向的數值在視覺上還是成比例的,但和以“像素”為單位在數值上肯定是不同的。如果讀者一定要知道這個值換算成像素后是多少,那么可以用GetDialogBaseUnits函數來獲取系統字體的高度和寬度再進行計算。

 

當一些英文版的軟件在中文Windows上運行的時候,對話框中有些文本往往被砍掉了尾巴,原因就是這些程序是在英文Windows上調試的,文本框的尺寸是以英文Windows系統字符的大小來度量的,到了其他語言的Windows上后,系統字符的大小可能改變,對話框的大小也隨著改變,結果就是原來剛好的寬度可能會變得不夠,這也算是對話框尺寸度量方法的缺點吧!

 

使用文本編輯器直接書寫對話框腳本定義不是很直觀,所以在創建對話框資源時最好使用可視化的資源編輯器,如VC++ResourceWorkshop等。

 

在子窗口控件的ID定義中有兩個特殊的ID值——IDOKIDCANCEL,在Resource.h中它們的值定義為12IDOK是默認的“確定”IDIDCANCEL是默認的“取消”ID。如果一個按鈕的IDIDOK,當焦點沒有停留在其他按鈕上的時候,在任何地方按下回車鍵就相當于按下了這個按鈕,而按下Esc鍵的時候,就相當于按下了IDIDCANCEL的按鈕。

 

2Tab停留位和組

對話框中可以定義多個子窗口控件,有的了窗口控件可以擁有輸入焦點(如按鈕、文本框與組合框等),有些則不能(如圖標與文本等),當對話框中有多個允許擁有輸入焦點的子窗口控件時(有WS_TABSTOP風格),用戶可以用Tab鍵將輸入焦點切換到下一個有WS_TABSTOP風格的子窗口控件上,也可以用Shift+Tab鍵切換到上一個,Tab鍵切換的順序就叫做Tab停留位。

 

Tab停留位并不是系統根據子窗口控件的坐標位置自動排列的,而是按照子窗口控件在資源腳本文件中的定義順序來排列的,所以讀者在定義的時候最好根據子窗口控件的位置適當排列語句的先后,以免按動Tab鍵切換的時候焦點上下左右無規則的地跳來跳去。如果使用可視化的資源編輯器,那么菜單中一般會有“Tab停留位”菜單項,在編輯完成后也要進到這個菜單項中設置一下,資源編輯器會根據設置調整rc文件中定義語句的先后順序。

 

對話框中往往有一些排列在一起的同類子窗口控件,如幾個單選鈕,幾個單選鈕之間的選中標記是互斥的,在對話框的其他地方可能又有一組互斥的單選鈕用來代表其他功能,在對話框中規定所有的單選鈕都是互斥的顯然不現實,解決的方法就是將不同的子窗口控件“分組”,這就是“組”的含義。使用中可以選擇一些子窗口控件定義WS_GROUP屬性,兩個有WS_GROUP屬性的子窗口控件之間的所有子窗口控件同屬同一組。

 

使用對話框

使用對話框的代碼分為創建部分和對話框過程兩個部分,完整代碼如下所示:

                .386

                .model flat, stdcall

                option casemap :none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Include 文件定義

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include         windows.inc

include         user32.inc

includelib      user32.lib

include         kernel32.inc

includelib      kernel32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Equ 等值定義

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN        equ         1000h       ;圖標

DLG_MAIN        equ         1           ;對話框

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 數據段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                .data?

hInstance       dd      ?

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 代碼段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                .code

_ProcDlgMain    proc    uses ebx edi esi hWnd, wMsg, wParam, lParam

                mov     eax, wMsg

                .if     eax == WM_CLOSE

                        invoke EndDialog, hWnd, NULL

                .elseif eax == WM_INITDIALOG

                        invoke LoadIcon, hInstance, ICO_MAIN

                        invoke SendMessage, hWnd, WM_SETICON, ICON_BIG, eax

                .elseif eax == WM_COMMAND

                        mov     eax, wParam

                        .if     eax == IDOK

                                invoke EndDialog, hWnd, NULL

                        .endif

                .else

                        mov     eax, FALSE

                        ret

                .endif

                mov     eax, TRUE

                ret

               

_ProcDlgMain    endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

start:

                invoke GetModuleHandle, NULL

                mov     hInstance, eax

                invoke DialogBoxParam, hInstance, DLG_MAIN, NULL, offset _ProcDlgMain, NULL

                invoke ExitProcess, NULL

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                end     start

 

讀者可以發現,相對于普通窗口的使用,對話框的使用顯得特別簡單,最明顯的區別在于主程序中的一大堆代碼不見了,換成了一個DialogBoxParam語句。

 

1、創建模態對話框

創建模態對話框的函數是DialogBoxParam,它的使用方法是:

       invoke     DialogBoxParam, hInstance, lpTemplateName, hWndParent, \

                     lpDialogFunc, dwInitParam

函數的各參數說明如下:

·hInstancelpTemplateName——函數從hInstance參數指定的模塊中裝入lpTemplateName參數指定的對話框資源,然后顯示對話框窗口。例子程序中的lpTemplateName參數用的就是我們定義的DLG_MAIN

·hWndParent——對話框的父窗口,對話框關閉之前將無法切換到父窗口所屬的其它窗口中,例子中用對話框做主窗口,所以父窗口句柄是NULL,在其他程序中使用時,這個參數設置為主窗口的句柄。

·lpDialogFunc——指定了對話框過程的地址,例子程序中是_ProcDlgMain

·dwInitParam——當做WM_INITDIALOG消息的lParam傳給對話框過程,讀者可以用它來做自定義的用途。

 

要結束模態對話框,必須在對話框過程的WM_CLOSE消息中使用EndDialog函數:

       invoke     EndDialog, hDlg, dwResult

不能使用通常的DestroyWindow函數,參數中的hDlg就是對話框窗口的句柄,dwResult參數是退出時的返回值,這個值最后由DialogBoxParam函數返回到主程序中。

 

2、創建非模態對話框

創建非模態對話框的函數是CreateDialogParam,它的參數定義和DialogBoxParam一模一樣:

       invoke     CreateDialogParam, hInstance, lpTemplateName, hWndParent, \

                                                 lpDialogFunc, dwInitParam

       mov        hDlg, eax

 

CreateDialogParamDialogBoxParam在使用中有幾個不同點:

·CreateDialogParam在創建對話框后,會根據對話框模板的風格是否定義了WS_VISIBLE來決定是否顯示對話框窗口。如果定義了則顯示,沒有的話,則程序需要在以后自行調用ShowWindow來顯示它;而DialogBoxParam函數不管是否定義了WS_VISIBLE風格都會顯示對話框。

·CreateDialogParam在建立對話框窗口后直接返回,返回值是對話框窗口的句柄;而DialogBoxParam要在對話框關閉后才返回,返回值是EndDialog中的dwResult參數。

·在CreateDialogParam返回后,應用程序在自己的消息循環中獲取對話框消息,所以如果要用非模態對話框做程序的主窗口,消息循環的代碼還是要寫的;而DialogBoxParam是使用Windows為它內建的消息循環。

·關閉非模態對話框使用DestroyWindow函數,注意在這里不要用EndDialog函數。

 

3、對話框過程

Windows在“對話框管理器”——也就是為對話框內建的窗口過程中處理對話框消息,在處理前會首先調用用戶定義的對話框過程,程序可以在這里選擇是否自行處理某些消息。讀者在理解時可以把“對話框管理器”看成是對話框的“DefWindowProc”,凡是自己不想處理的消息都由它來處理。

 

和窗口過程一樣,對話框過程是一個“回調”子程序,它由程序定義,Windows來調用,模態對話框和非模態對話框的對話框過程是一樣的。

 

對話框過程和窗口過程的輸入參數是一樣的,也是:

       DialogProc     proc        hwndDlg, uMsg, wParam, lParam

在程序里面一般編寫對話框過程的分支結構如下:

_ProcDlgMain        proc        uses ebx edi esi hWnd, wMsg, wParam, lParam

                            mov        eax, wMsg

                            .if           eax == WM_CLOSE

                                          ;模態對話框用EndDialog關閉


                                          ;非模態對話框用DestroyWindow關閉

                            .elseif      eax == WM_INITDIALOG

                                          ;初始化代碼

                            .elseif      eax == WM_COMMAND

                                          ;子窗口控件發送的消息

                                          ;wParam的低16位為子窗口控件ID

                            .elseif      eax == WM_XXXX

                                          ;處理其他需要處理的消息

                            .else

                                          mov        eax, FALSE

                                          ret

                            .endif

                            mov        eax, TRUE

                            ret

_ProcDlgMain        endp

 

注意對話框過程和普通的窗口過程在使用上有以下區別:

·窗口過程對應于不同的消息有各種不同含義的返回值,而對話框過程返回BOOL類型的值,返回TRUE表示已經處理了某條消息,返回FALSE表示沒有處理。“對話框管理器”代碼會根據返回值決定是否繼續處理某一條消息(唯一的例外是WM_INITDIALOG消息)。

·對于不處理的消息,不需要調用DefWindowProc來處理,這事情由“對話框管理器”來做。

 

“對話框管理器”不會把WM_CREATE消息轉發給對話框過程,取而代之,它會以WM_INITDIALOG消息來調用對話框過程,程序可以在這里進行一些初始化的操作,WM_INITDIALOG消息的返回值有點特殊,如果程序想自行設置輸入焦點,那么可以用SetFocus函數把輸入焦點設置到需要的子窗口控件上,然后返回FALSE;如果返回TRUE的話,那么Windows會自動將輸入焦點設置到第一個有WS_TABSTOP的子窗口控件上。

 

對話框過程在WM_COMMAND消息中處理子窗口控件發送的命令,當用戶在對話框中按下了按鈕,輸入文字或選擇復選框等操作時,子窗口控件會向對話框過程發送WM_COMMAND消息,wParam是子窗口控件的ID,如例子程序中處理“退出”按鈕的消息,在里面用EndDialog函數關閉對話框。

 

對話框窗口的標題欄上默認沒有定義圖標,如果要像普通窗口一樣顯示一個圖標,那么可以像例子程序中那樣,在WM_INIDIALOG中用WM_SETICON消息來設置。

 

posted on 2010-09-01 16:57 luqingfei 閱讀(4514) 評論(0)  編輯 收藏 引用 所屬分類: Win32匯編程語言序設計

導航

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

統計

留言簿(6)

隨筆分類(109)

隨筆檔案(105)

Blogers

Game

Life

NodeJs

Python

Useful Webs

大牛

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久综合网天天| 欧美精品一区二区精品网| 欧美一区二区三区在线| 99在线精品视频在线观看| 亚洲精品国久久99热| 99国产精品一区| 在线亚洲欧美视频| 亚洲自拍偷拍一区| 久久免费视频在线| 亚洲国产乱码最新视频| 亚洲国产日韩欧美| 亚洲一区二区三区乱码aⅴ| 欧美一区影院| 欧美激情视频给我| 国产精品夜色7777狼人| 在线看片成人| 亚洲欧美日韩系列| 欧美xx69| 亚洲午夜精品久久久久久浪潮| 久久国产色av| 欧美日韩第一区日日骚| 国产欧美精品xxxx另类| 亚洲日本电影| 久久不见久久见免费视频1| 欧美不卡视频| 亚洲一区二区三区久久 | 最新中文字幕一区二区三区| 亚洲精品一区在线观看香蕉| 午夜在线不卡| 亚洲经典在线| 久久久999| 国产精品v欧美精品v日本精品动漫 | 在线高清一区| 亚洲欧美国产日韩中文字幕| 久久精品电影| 在线一区免费观看| 蜜桃av一区二区三区| 国产精品腿扒开做爽爽爽挤奶网站 | 久久久亚洲国产天美传媒修理工| 欧美精品www在线观看| 狠狠色狠色综合曰曰| 欧美国产先锋| 国产亚洲va综合人人澡精品| 一区二区三区视频在线播放| 久久成人精品电影| 中文国产一区| 久久综合狠狠| 国产亚洲综合精品| 欧美在线免费| 一区二区三欧美| 欧美日韩在线电影| 亚洲美女av网站| 欧美成人午夜激情在线| 欧美一区激情视频在线观看| 国产欧美精品日韩| 午夜精品一区二区三区在线视| 亚洲精品久久久久中文字幕欢迎你 | 午夜性色一区二区三区免费视频| 欧美日韩123| 在线一区欧美| 妖精视频成人观看www| 欧美精品激情在线| 亚洲久久一区| 亚洲激情黄色| 欧美日本簧片| 亚洲尤物影院| 亚洲自拍啪啪| 国产视频欧美视频| 久久久久国产精品厨房| 欧美在线视频免费| 国产一区日韩欧美| 欧美成人激情在线| 欧美黑人在线播放| 夜夜嗨av一区二区三区四区| 99视频精品免费观看| 欧美系列电影免费观看| 先锋影院在线亚洲| 久久aⅴ国产欧美74aaa| 亚洲第一在线综合在线| 91久久精品国产91性色tv| 欧美日韩aaaaa| 午夜视频久久久| 久久精品国产99精品国产亚洲性色 | 欧美在线视频不卡| 欧美va亚洲va日韩∨a综合色| 久久福利毛片| 亚洲激情在线视频| 亚洲肉体裸体xxxx137| 欧美日韩一区二区三区视频| 亚洲视屏一区| 午夜伦理片一区| 亚洲第一精品在线| 一区二区欧美在线| 国产亚洲欧美日韩一区二区| 欧美成年视频| 欧美无砖砖区免费| 久久久夜夜夜| 欧美日韩精品一区| 久久久久久久网站| 欧美日韩亚洲另类| 久久人人97超碰精品888| 欧美暴力喷水在线| 亚洲欧美另类国产| 国产午夜精品理论片a级大结局 | 欧美激情一区二区三区全黄| 亚洲免费一区二区| 久久久久国产精品一区| 亚洲视频一区二区免费在线观看| 先锋影音国产一区| 亚洲影院高清在线| 欧美jizz19性欧美| 久久精品国产欧美激情| 欧美日韩高清在线播放| 久久久水蜜桃av免费网站| 欧美亚日韩国产aⅴ精品中极品| 欧美日韩视频一区二区| 久久精品国产清自在天天线| 欧美日韩高清不卡| 亚洲第一天堂无码专区| 国产一区二区三区高清在线观看| 亚洲免费观看在线观看| 亚洲国产激情| 久久精品二区三区| 欧美在线视频导航| 国产精品v欧美精品∨日韩| 亚洲成人在线视频播放 | 夜夜嗨av色一区二区不卡| 久久精品综合| 久久久久九九视频| 国产乱码精品一区二区三区不卡 | 欧美风情在线| 免费观看亚洲视频大全| 国内偷自视频区视频综合| 亚洲无线视频| 午夜亚洲精品| 国产精品第13页| 亚洲午夜精品| 久久国产精品久久久久久久久久 | 一区二区三区高清在线 | 亚洲国产综合在线| 免费日韩av片| 91久久一区二区| 亚洲视频一区| 国产精品一区二区a| 午夜在线精品| 免费观看欧美在线视频的网站| 亚洲高清在线视频| 欧美精品国产精品| 亚洲天堂av在线免费观看| 欧美一区二区三区久久精品茉莉花 | 国产精品一区二区女厕厕| 午夜精品久久一牛影视| 久久精品亚洲一区二区三区浴池| 国产婷婷一区二区| 久久久五月天| 亚洲国产另类 国产精品国产免费| 亚洲乱码视频| 欧美日韩在线视频一区二区| 亚洲一区二区三区欧美 | 久久国产精品电影| 黄色成人在线| 欧美成人免费大片| 欧美综合第一页| 激情亚洲成人| 欧美精品久久99| 亚洲专区在线| 久久婷婷蜜乳一本欲蜜臀| 亚洲精品免费网站| 欧美亚一区二区| 久久精品国产91精品亚洲| 欧美大片在线看| 亚洲欧美日韩在线| 亚洲国产99精品国自产| 欧美日本亚洲| 性xx色xx综合久久久xx| 亚洲福利国产| 欧美一进一出视频| 亚洲激情在线观看视频免费| 国产精品在线看| 欧美激情第一页xxx| 欧美一级视频| 日韩一区二区精品葵司在线| 久久人人爽人人爽爽久久| 亚洲一区二区免费在线| 亚洲国产精品成人va在线观看| 国产精品av免费在线观看| 欧美成人免费大片| 久久久久久亚洲精品杨幂换脸| 一区二区免费看| 亚洲国产高清自拍| 久久久一二三| 亚洲欧美999| 日韩视频一区二区三区在线播放| 国产在线麻豆精品观看| 国产精品久久久久久亚洲毛片| 欧美高清免费| 久热re这里精品视频在线6| 亚洲欧美日韩国产精品| 一区二区三区免费在线观看| 欧美激情按摩|