• <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>

            luqingfei@C++

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

            Win32匯編--使用資源--對話框--在對話框中使用子窗口控件(2)

             

            2、子窗口控件的通用使用方法

                   由于子窗口控件實際上就是窗口,大部分窗口函數對它們都是適用的,如可以用EnableWindow在灰化和允許狀態之間切換,可以用ShowWindow在顯示和隱藏之間切換,可以用GetWindowTextSetWindowText來改變上面的文字,也可以用MoveWindow來改變大小和移動位置等。在Control.asm中用“顯示圖片”復選框切換圖片框的隱藏和顯示,用的就是ShowWindow函數,處理“允許更換圖片”復選框時切換“更換圖片”按鈕的狀態,用的是EnableWindow函數。

             

                   除了可以用對子窗口控件使用窗口的通用函數外,還可以使用針對它們的專用函數。下面介紹一些常用的函數。

             

                   在資源腳本文件中定義的是控件的ID,當這些子窗口控件被創建以后同樣會有一個窗口句柄,但既然它們不是由我們由自己創建的,那么怎么知道它們的窗口句柄呢?有一個函數可以從ID中獲取子窗口句柄:

                   invoke GetDlgItem, hDlg, dwIDDlgItem

                   mov    hDlgItem, eax

                   函數的輸入參數是對話框句柄和ID值,返回值是子窗口句柄;反過來,有兩種方法可以從子窗口句柄獲取ID

                   1invoke GetDlgCtrolID, hWndCtrl ;輸入子窗口句柄,返回值是控件ID

                   2invoke GetWindowLong, hWndCtrl, GWL_ID

             

                   當需要向控件發送消息的時候,當然可以先用GetDlgItem獲取子窗口句柄再用SendMessage函數,但有一個函數更為簡便:

                   invoke SendDlgItemMessage, hDlg, dwIDDlgItem, Msg, wParam, lParam

             

                   這個函數可以直接向控件發送消息,只需要在參數中指定對話框句柄和子窗口ID(注意:并沒有PostDlgItemMessage這樣的函數!)。

             

                   如果要想知道在一個控件上按下了Tab鍵或Shift+Tab鍵會跳到哪一個控件上去,也就是說下一個或上一個Tab停留位在哪里,可以使用GetNextDlgTabItem函數:

                   invoke GetNextDlgTabItem, hDlg, hCtl, bPrevious

                   .if eax

                    mov hWinNext, eax

            .endif

             

            其中的bPrevious參數指定了搜索的方向;與之相似,使用GetNextDlgGroupItem函數可以返回下一個分組的位置:

            invoke GetNextDlgGroupItem, hDlg, hCtl, bPrevious

            .if eax

               mov hWinNext, eax

            .endif

             


            3
            、使用單選鈕和復選框

                   單選鈕是互斥的選擇鈕,同一組的多個單選鈕只能有一個被選中,單選鈕的外形是一個圓形的標記加上文本,圓形中有黑點表示被選中。復選框不是互斥的,多個復選框的狀態不會互相影響,復選框的外形是一個方框加上文本,方框中可以用有無對鉤來表示是否被選中。

             

                   單選鈕和復選框控件都是基于Button類的,只不過它們的窗口風格分別是BS_RADIOBUTTONBS_CHECKBOX。既然它們是特殊的“按鈕”,所以和它們有關的函數都帶有“Button”一詞,查看一個單選鈕或復選框是否被選中可以用下面的函數來檢測:

                   invoke IsDlgButtonChecked, hDlg, nIDButton

                   函數的返回值可能是BST_CHECKED(選中狀態),BST_INDETERMINATE3態復選框的灰化狀態)或BST_UNCHECKED(未選中狀態)。也可以用向子窗口控件發送BM_GETCHECK消息的方法來檢測,返回值和上面的函數是一樣的。

             

                   如果想設置單選鈕或復選框的狀態,可以使用下面的語句:

                   invoke CheckDlgButton, hDlg, nIDButton, uCheck

                   參數uCheckBST_CHECKEDBST_INDETERMINATEBST_UNCHECKED來表示需要設置的狀態,含義同上。向控件發送BM_SETCHECK消息也可以取得同樣的效果,這時消息的wParam中放置需要設置的狀態。

             

                   復選框是不互斥的,所以可以隨意設置狀態。而對于BS_RADIOBUTTON風格的單選鈕來說,并不是把某個按鈕設置為選中狀態以后,同組的其他按鈕就會自動變成非選中狀態,所以用CheckDlgButton函數選中了一個單選鈕以后,如果不是手動把同組的其他按鈕全部改為非選中狀態(逐個地調用CheckDlgButton),就會看到同時有兩個單選鈕是選中的。但把同組的所有單選鈕逐個地設置顯得有點麻煩,所以針對單選鈕有一個專用函數:

                   invoke CheckRadioButton, hDlg, nIDFirstButton, nIDLastButton, nIDCheckButton

                   這個函數把IDnIDFirstButtonnIDLastButton之間的單選鈕全部設置為非選中狀態,只有nIDCheckButton是選中狀態,當然在使用中要注意將這一批ID定義為連續的數值。

                   如果還嫌CheckRadioButton有點麻煩,還有一種最簡單的辦法——使用自動單選鈕,同組的AUTORADIOBUTTON會隨著用戶選中一個而自動清除其他單選鈕的狀態,所以在程序中只需要在初始化的時候預設一次,其他時間就可以不必關心設置問題了,以后唯一用到的就是調用IsDlgButtonChecked檢查狀態了。

             

            4、使用靜態控件

                   靜態控件是基于Static類的子窗口控件,之所以叫“靜態”控件,是因為它是“安靜”的——它們不向對話框發送WM_COMMAND消息,所以靜態控件的ID一般是沒有用處的,定義時常常將它們定義為-1,如果需要在程序中改變屬性,那么也可以為靜態控件指定一個唯一的ID

             

                   資源腳本文件中可以使用縮寫的基于Static類的有LTEXTCTEXTRTEXT(文本框)和ICON(圖標框),除了這些常用的類型之外,Static類還可以用CONTROL語句通過指定不同的窗口風格派生出不同用途的控件來。

             

                   下面說明靜態控件的一些用法。

                   對于文本框,文本長度超過邊界的時候默認是自動換行的,但如果同時指定SS_SIMPLE風格的話,就不會自動換行。讀者可以在程序中用SetWindowText或發送WM_SETTEXT消息來動態改變顯示的文本,同樣,也可以用GetWindowText或發送WM_GETTEXT消息來獲取其中的文本。

             

                   靜態控件可以用來構筑簡單的線條和圖形,如果指定SS_BLACKFRAMESS_GRAYFRAMESS_WHITEFRAME風格,那么靜態控件顯示為填充的矩形,填充顏色分別是黑色、灰色或白色;而指定SS_BLACKRECTSS_GRAYRECTSS_WHITERECT風格的話,則顯示為非填充的矩形框,邊線顏色是黑色、灰色或白色。

             

                   靜態控件也可以用來做立體感的線條或邊框,指定SS_ETCHEDHORZ風格顯示為橫線,指定SS_ETCHEDVERT風格顯示為豎線,指定SS_ETCHEDFRAME風格則顯示為立體的矩形框,視覺上的效果似于沒有文字的GROUPBOX

             

                   靜態控件還有一個用途是做圖形顯示,當圖形是圖標的時候,用ICON語句就可能定義了,其默認的風格是SS_ICON,如果想使用位圖,那么可以指定SS_BITMAP風格,例子程序中的圖片框就是這樣定義的。

            CONTROL IDB_1, IDC_BMP, “Static”, SS_BITMAP | WS_CHILD | WS_VISIBLE, 5, 5, 40, 95

                   在這里,“文字”部分指定位圖資源的ID,前面已經把Picture1.bmp的資源ID定義為IDB_1IDC_BMP是圖片框自己的ID,如果不需要在程序中改變圖片的話,那么這里可以定義為-1

             

                   在程序中可以通過向控件發送STM_SETIMAGE消息來設置新的圖片,消息的wParam指定圖片的格式,取值可以是IMAGE_BITMAPIMAGE_CURSORIMAGE_ICON,分別對應新圖片的格式,lParam是圖片的句柄,如果是位圖,lParam就是用LoadBitmap裝入的位圖句柄,同樣,圖片類型是光標和圖標的時候,這里就是用LoadCursorLoadIcon裝入的句柄。

             

                   在例子程序中,用來改變圖片框圖片的語句是:

                   invoke SendDlgItemMessage, hWnd, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP, eax

                   eax中是位圖句柄,IDC_BMP是圖片框的IDwParamIMAGE_BITMAP表示要設置的圖片類型是位圖。

             

            5、使用文本編輯控件

                   文本編輯控件是基于Edit類的控件,可以用縮寫EDITTEXT定義,讀者可以在文本編輯控件中輸入并編輯文本。每當用戶在文本編輯控件中輸入一個字符的時候,控件就會向對話框過程發送一個WM_COMMAND消息,所以在例子程序中,當在自定義文字的編輯框中每輸入一個字,標題欄文字就會馬上改變。

             

                   要獲取編輯框中的文本有多種方法,可以用GetWindowText,也可以用發送WM_GETTEXT消息的辦法,要設置文本,同樣可以用SetWindowText或發送WM_SETTEXT,但最簡便的辦法還是使用下面的函數:

                   invoke GetDlgItemText, hDlg, nIDDlgItem, lpString, nMaxCount      ;取文本

                   invoke SetDlgItemText, hDlg, nIDDlgItem, lpString                         ;設置文本

                   lpString是放置字符的緩沖區地址,用GetDlgItemText函數來獲取文本的時候,要用nMaxCount參數指定緩沖區的最大長度,以免獲取的文本長度超過緩沖區長度引起溢出,設置的時候若使用SetDlgItemText函數時就不需要這個參數。

             

                   在實際使用中,經常要在文本編輯控件中輸入輸出數值型參數,將文本轉換為數值比較麻煩,把數值轉換為文本也要經過一個wsprintf調用,為了簡化操作,Windows提供了兩個函數來處理這個問題:

                   invoke SetDlgItemInt, hDlg, nIDDlgItem, uValue, bSigned                ;設置控件中的數值

                   invoke GetDlgItemInt, hDlg, nIDDlgItem, lpTranslated, bSigned              ;取控件中的數值

                   SetDlgItemInt函數將uValue參數先轉換成字符串格式,然后設置到文本編輯控件中,bSigned參數指定了uValue的格式,如果是TRUE的話,表示uValue是有符號數;是FALSE的話,表示uValue是無符號數。

                   GetDlgItemInt函數則將對話框中的文本轉換成數值型返回,同樣,用bSigned指定轉換的方式,TRUE表示按照符號數格式轉換,這時函數會檢測文本的第一個字符是不是負號;FALSE則按照無符號數轉換。參數lpTranslated是指向一個dword型變量的指針,GetDlgItemInt會在這個變量中返回BOOL類型值表示函數是否調用成功,成功則返回TRUE,有這樣一個參數的原因是函數的返回值用來返回轉換后的數值了,以至于沒有地方可以表示函數是否執行成功。當然,lpTranslated參數也可以輸入NULL,這樣,當函數返回0的時候就無法知道是文本框是“0還是文本不符合格式造成轉換失敗。

             

                   SetDlgItemIntGetDlgItemInt函數不僅適用于文本編輯控件,所有對其上面的文本可以修改的控件都可以使用它們。

             

                   使用文本編輯控件的時候,文本的長度也是個需要注意的問題。如果控件的寬度定義得過窄,當字符填充到最右邊的時候,編輯框就不允許繼續輸入了,為了繼續輸入并讓文本自動卷動,可以指定WS_HSCROLL風格;反之,定義WS_HSCROLL風格后輸入文本的長度不受限制又不好,那么可以用向控件發送EM_LIMITTEXT消息的方式來設定最大長度。

             

                   下面的例子將IDC_EDIT的輸入最大長度定為10個字符:

                   invoke SendDlgItemMessage, hDlg, IDC_EDIT, EM_LIMITTEXT, 10, NULL

             

                   另外,有時候可能需要把編輯框設置為只讀的(和灰化不同,灰化的編輯框中文本無法進行任何操作,包括卷動操作,而只讀的僅僅是不能修改),要把初始狀態定義為只讀的,只需在定義語句中加上ES_READONLY風格,在程序中需要動態改變只讀狀態可以發送EM_SETREADONLY消息,下面的第一句把編輯框設為只讀,第二句把編輯框改回到可寫狀態:

                   invoke SendDlgItemMessage, hDlg, IDC_EDIT, EM_SETREADONLY, TRUE, NULL ;只讀

                   invoke SendDlgItemMessage, hDlg, IDC_EDIT, EM_SETREADONLY, FALSE, NULL;可寫

             

                   文本編輯框在默認狀態下是單行的,也可以通過加上EM_MULTILINE風格變成多行的,這時可以同時加上WS_VSCROLL風格顯示一個垂直方向的滾動條。

             

            6、使用滾動條

                   滾動條有水平和垂直兩種,默認的SCROLLBAR語句定義的是水平的滾動條,它的默認風格是SBS_HORZ,例子程序中用下面的語句定義了一個水平滾動條:

                   SCROLLBAR IDC_SCROLL, 6, 118, 125, 10

                   如果要定義垂直的滾動條,那么要指明SBS_VERT風格:

                   SCROLLBAR IDC_SCROLL, x, y, 寬度, 高度, SBS_VERT

             

                   和其他子窗口控件發送WM_COMMAND消息不同,水平滾動條向對話框窗口發送WM_HSCROLL消息,而垂直滾動條則發送WM_VSCROLL消息,所以針對兩種方式的滾動條要分別處理不同的消息。

             

                   WM_xSCROLL消息的參數如下所示:

                   wParam的低16 = nScrollCode             ;動作碼

                   wParam的高16 = nPos                       ;滾動條當前位置

                   lParam = hwndScrollBar                                   ;滾動條控件的窗口句柄

             

                   其中nScrollCode代表了滾動條的當前動作,定義值及其含義如下:

                   SB_BOTTOM                      滾動條移到了最下/右邊。

                   SB_ENDSCROLL                用戶停止了滾動動作。

                   SB_THUMBPOSITION        滾動條被拖動到某處。

                   SB_THUMBTRACK             滾動條在拖動中。

                   SB_TOP                              滾動條移到了最上/左邊。

                   SB_LINELEFT                    滾動條左移了一格(對于水平滾動條)。

                   SB_LINERIGHT                  滾動條右移了一格(對于水平滾動條)。

                   SB_PAGELEFT                    滾動條左移了一頁(對于水平滾動條)。

                   SB_PAGERIGHT                 滾動條右移了一頁(對于水平滾動條)。

                   SB_LINEDOWN                  滾動條下移了一格(對于垂直滾動條)。

                   SB_LINEUP                        滾動條上移了一格(對于垂直滾動條)。

                   SB_PAGEDOWN                 滾動條下移了一頁(對于垂直滾動條)。

                   SB_PAGEUP                        滾動條上移了一頁(對于垂直滾動條)。

             

                   nPos的值只有當動作碼是SB_THUMBPOSITIONSB_THUMBTRACK時才有效,其他的時候為0

             

                   第一眼看到SB_xxx動作碼的時候,讀者可能會以為水平滾動條和垂直滾動條的動作碼是不相同的——水平滾動條是SB_xxxLEFTSB_xxxRIGHT,而垂直滾動條是SB_xxxUPSB_xxxDOWN,但在Windows.inc中查看一下就可以發現,SB_xxxLEFTSB_xxxUP在數值上是相同的,SB_xxxRIGHTSB_xxxDOWN也是如此,所以不同定義方法只是為了直觀起見而已。

             

                   以水平滾動條為例,處理滾動條消息的代碼一般是如下結構:

                   .elseif eax == WM_HSCROLL          ;窗口的消息處理分支,eaxwMsg

                          mov eax, lParam

                       .if    eax == hWnd滾動條1

                             mov eax, wParam

                             .if ax == SB_LINELEFT

                                 dec 位置變量

                             .elseif ax == SB_LINERIGHT

                                 inc   位置變量

                             .elseif ax == SB_PAGELEFT

                                 sub   位置變量,頁長

                             .elseif ax == SB_PAGERIGHT

                                 add   位置變量,頁長

                             .elseif ax == SB_THUMBPOSITION || ax == SB_THUMBTRACK

                                 mov   eax, wParam

                                 shr    eax, 16

                                 mov   位置變量,eax

                             .endif

                   .elseif eax == hWnd滾動條2

                       ;處理滾動條2的代碼,同上面的結構

            .endif

             

            在例子程序Control.asm中只定義了一個滾動條,所有的消息肯定都是它發出的,所以去掉了判斷lParam是哪個滾動條的步驟直接處理wParam中的動作碼。

             

            在用戶按動滾動條后,滾動條不會自己移動位置,它只是將用戶的動作以WM_xSCROLL消息的形式反饋給程序,真正要移動它還是要靠程序來設置,所以代碼中要根據不同的動作首先計算新的位置,并判斷新的位置是否越界,例子程序中的這些代碼判斷新的位置是否超出0~100的范圍,如果是,則校正到0~100之間:

            cmp dwPos, 0

            jge @F

            mov dwPos, 0

            @@:

            cmp dwPos, 100

            jle @F

            mov dwPos,100

             

            在介紹MASM語句的時候提到過,.if dwPos > 0語句只可以用來比較無符號數,所以在這里使用cmp指令自己測試分支而不是使用.if偽指令。

            不計算好新位置的時候要將位置設置回去,用戶才會看到滾動條移動了,方法是向滾動發送SBM_SETPOS消息:

            invoke SendDlgItemMessage, hWnd, IDC_SCROLL, SBM_SETPOS, dwPos, TRUE

            最后一個參數為TRUE表示設置后重新繪畫滾動條。

            在初始化的時候,要給滾動條發送SBM_SETRANGE消息來設定滾動范圍:

            invoke SendDlgItemMessage, hWnd, IDC_SCROLL, SBM_SETRANGE, 最小值, 最大值

             

            如果需要獲取滾動條的信息,可以嘗試發送下面兩個消息:SBM_GETPOS可以獲取滾動條的當前位置,也就是上一次用SBM_SETPOS設置的值;SBM_GETRANGE可以獲取滾動的范圍,也就是用SBM_SETRANGE設置的值。

             

            7、使用組合框

                   顧名思義,組合框是一個“組合”起來的東西,它由一個可供選擇的列表和一個可供輸入的edit類組合而成。組合框讓用戶既可以自己輸入文本,也可以選擇列表中的某一項當做輸入。用不同的風格定義可以產生3種類型的組合框。

                   CBS_SIMPLE風格的組合框,它的上面可以輸入文本,下面的列表可供選擇預設文本;

                   CBS_DROPDOWN風格的組合框,上面同樣可以輸入文本,但下面的列表是下拉式的,平時處于收起狀態,點擊編輯框右邊的三角形才會拉下來;

                   CBS_DROPDOWNLIST風格的組合框,它僅是一個下拉的選擇框,上面的框中不允許輸入文字。

             

                   組合框中還有幾種常用的、可以附加的風格:

                   CBS_AUTOHSCROLL          輸入過長的文本時輸入框自動卷動。

                   CBS_LOWERCASE              自動將所有的文本轉換成小寫。

                   CBS_SORT                         自動將插入的文本項排序。

                   CBS_UPPERCASE        自動將所有的文本轉換成大寫。

             

                   組合框中列表框部分的文字添加、項目的選擇等操作都是通過發送消息來完成的,主要的消息如下表所示:

            組合框的消息

            消息

            wParam

            lParam

            說明

            CB_ADDSTRING

            0

            字符串地址

            把一個字符串添加到列表中

            CB_INSERTSTRING

            位置索引

            字符串地址

            把一個字符串插入到列表中

            CB_FINDSTRING

            開始查找的位置索引

            查看的字符串

            在列表中查找以lParam字符串開頭的項,找到則返回位置索引,未找到則返回CB_ERP

            CB_FINDSTRINGEXACT

            位置索引

            查找的字符串

            精確查找字符串

            CB_DELETESTRING

            位置索引

            0

            刪除一個列表項

            CB_RESETCONTENT

            0

            0

            刪除所有的列表項

            CB_GETLBTEXT

            位置索引

            緩沖區地址

            獲取指定列表項的字符串,緩沖區必須足夠大

            CB_GETLBTEXTLEN

            位置索引

            0

            獲取指定列表項的字符串長度

            CB_GETCOUNT

            0

            0

            獲取列表項的總項數

            CB_SETCURSEL

            位置索引

            0

            選中一個列表項,并將列表項中的文字拷貝到編輯控件中

            CB_SELECTSTRING

            開始查找的位置索引

            字符串地址

            查找以lParam指定的字符串開始的列表項,如果找到則選中它并將字符串拷貝到編輯控件中

            CB_GETCURSEL

            0

            0

            獲取當前選中的位置索引,沒有選中的項目則返回CB_ERR

            CB_SHOWDROPDOWN

            狀態

            0

            打開(狀態為TRUE)或收起(狀態為FALSE)下拉列表

            CB_GETDROPPEDSTATE

            0

            0

            檢測列表的當前下拉狀態,返回TRUE表示拉下,FALSE表示收起

             

                   當用戶在組合框中進行選擇操作時,Windows向對話框過程發送WM_COMMAND消息,消息中wParam參數的低16位是組合框ID,高16位是通知碼,用來表示用戶的操作,通知碼的定義如下表所示。

            用戶操作組合框后的通知碼

            通知碼

            說明

            CBN_SELCHANGE

            用戶將要選擇一個項目(鼠標移動到了這個項目上)

            CBN_CLOSEUP

            下拉列表關閉(可能是選擇完成也可以是取消選擇)

            CBN_SELENDOK

            用戶完成選擇項目

            CBN_SELENDCANCEL

            用戶取消選擇(鼠標移動到了某個項目上,但并沒有按下而是點擊了其他控件,或按動了Esc鍵)

            CBN_DBLCLK

            CBS_SIMPLE的組合框中雙擊了一個列表項

            CBN_DROPDOWN

            用戶打開了下拉框(按動了編輯框的下拉按鈕)

             

                   如果想在用戶選擇了一個項目后做相應的動作,最好的辦法就是處理CBN_SELENDOK通知碼,因為這才意味著用戶真正完成了一個選擇動作,例子程序中就是這樣處理的:

            .elseif ax == IDC_TITLETEXT         ;WM_COMMAND消息中

                   shr eax,16

                   .if ax == CBN_SELENDOK

                       invoke SendDlgItemMessage, hWnd, IDC_TITLETEXT, CB_GETCURSEL, 0, 0

                             ;根據返回的eax值做相應動作

                   .endif

             

                   以上的操作都是針對下拉列表部分的,另外也有很多消息是針對組合框中的編輯控件的,對組合框的窗口句柄發送WM_GETTEXTWM_SETTEXT,操作的對象就是組合框的編輯控件;如果要限制控件中文本的最大輸入長度,可以發送CB_LIMITTEXT的消息,這時候wParam參數指定最大數量;當用戶在編輯框中編輯文本的時候,Windows在用戶輸入之后、字符顯示之前會發送CBN_EDITUPDATE通知碼;當字符在編輯框中顯示以后,又會發送CBN_EDITCHANGE通知碼。所以在處理WM_COMMAND消息時通過處理這兩個通知碼可以檢測到用戶的輸入操作。

             

                   組合框是子窗口控件中比較復雜的一種,這里僅介紹了常用的消息和通知碼。

             

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

            導航

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統計

            留言簿(6)

            隨筆分類(109)

            隨筆檔案(105)

            Blogers

            Game

            Life

            NodeJs

            Python

            Useful Webs

            大牛

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲va久久久噜噜噜久久天堂| 成人精品一区二区久久 | 国产AV影片久久久久久| 九九热久久免费视频| 亚洲欧美成人久久综合中文网| 超级碰碰碰碰97久久久久| 伊人久久精品无码av一区| 欧美综合天天夜夜久久| 亚洲一区精品伊人久久伊人| 无码人妻少妇久久中文字幕蜜桃| 久久精品嫩草影院| 久久午夜福利无码1000合集| 高清免费久久午夜精品| 久久久久九九精品影院| 91久久婷婷国产综合精品青草| 久久精品国产黑森林| 狠狠色婷婷久久一区二区三区| 久久久久久国产精品无码下载| 久久精品夜夜夜夜夜久久| 亚洲AV伊人久久青青草原| 久久久久久a亚洲欧洲aⅴ| 国内精品九九久久精品| 久久综合久久鬼色| 日韩精品久久久久久| 久久亚洲私人国产精品vA| 人妻系列无码专区久久五月天| 精品久久久久久久| 久久精品人人做人人爽97| 久久强奷乱码老熟女网站 | 久久精品国产亚洲av麻豆色欲 | 亚洲精品乱码久久久久久| 色偷偷91久久综合噜噜噜噜| 亚洲国产天堂久久综合网站| 麻豆AV一区二区三区久久| 一本色道久久HEZYO无码| 亚洲天堂久久久| 久久人人爽人人爽人人片AV麻烦| 亚洲国产成人久久精品99| 人妻无码精品久久亚瑟影视| 色婷婷综合久久久久中文字幕| 久久综合给合综合久久|