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

elva

Visual Studio 2005:在 Visual C++ 中開(kāi)發(fā)自定義的繪圖控件

本文討論的重點(diǎn)介于兩者之間 — 公共控件賦予您想要的大部分功能,但控件的外觀并不是您想要的。例如,列表視圖控件提供在許多視圖風(fēng)格中顯示數(shù)據(jù)列表的方式 — 小圖標(biāo)、大圖標(biāo)、列表和詳細(xì)列表(報(bào)告)。然而,如果您想要一個(gè)網(wǎng)格控件,那結(jié)果怎樣呢?盡管公共控件庫(kù)里沒(méi)有特別包含網(wǎng)格,但是列表視圖控件與它較為接近,它以行和列顯示數(shù)據(jù),并有一個(gè)相關(guān)的標(biāo)頭控件。因此,許多人以一個(gè)標(biāo)準(zhǔn)的列表視圖控件為起點(diǎn)創(chuàng)建自己的網(wǎng)格控件,然后重寫(xiě)該控件及其子項(xiàng)的呈現(xiàn)方式或繪制方式。

主宰繪圖操作
即使“只”進(jìn)行繪制,您仍然有至少四種選項(xiàng)可用,它們都具有鮮明的優(yōu)缺點(diǎn):

• 處理 WM_PAINT

• 所有者繪制

• 自定義繪制

• 處理 WM_CTLCOLOR


處理 WM_PAINT

最極端的選擇是執(zhí)行一個(gè) WM_PAINT 處理程序,并且自己完成所有的繪制。這意味著,您的代碼將需要進(jìn)行一些與呈現(xiàn)控件相關(guān)的瑣事 — 創(chuàng)建適當(dāng)?shù)脑O(shè)備上下文(一個(gè)或多個(gè)),決定控件的大小和位置,繪制控件等。在繪制過(guò)程中,很少需要這種級(jí)別的控件。

所有者繪制

控制控件繪制的另一種方法是利用所有者繪制。事實(shí)上,您也許聽(tīng)開(kāi)發(fā)人員提到過(guò)所有者繪制控件,因?yàn)樗怯糜陂_(kāi)發(fā)自定義控件最普通的技術(shù)。該技術(shù)普遍使用的主要原因在于,Windows 可為您提供很多幫助。在呈現(xiàn)控件的那一刻,Windows 就已經(jīng)創(chuàng)建并填寫(xiě)了設(shè)備上下文,決定了控件的大小和位置,并且向您傳遞信息以使您了解此刻繪制的需求。對(duì)于列表控件(例如,列表框和列表視圖),Windows 將為列表中的每一項(xiàng)調(diào)用繪制代碼,這意味著您只需繪制這些項(xiàng),而無(wú)需考慮控件的其他方面。注意,所有者繪制可用于大多數(shù)控件。然而,它不能用于編輯控件;并且考慮到列表控件,它只能用于報(bào)表視圖樣式。

自定義繪制

對(duì)于繪制自己的控件而言,這可能是最少為人所知的技術(shù)。事實(shí)上,許多技術(shù)能力較高的開(kāi)發(fā)人員也混淆了術(shù)語(yǔ)所有者繪制 (owner-draw) 和自定義繪制 (custom-draw)。關(guān)于自定義控件,首先需要了解,它僅針對(duì)于指定的公共控件:標(biāo)頭、列表視圖、rebar、工具欄、工具提示、跟蹤條和樹(shù)視圖。此外,盡管所有者繪制只允許繪制報(bào)告視圖風(fēng)格的列表視圖控件,而自定義繪制則使您能夠處理列表視圖控件所有視圖風(fēng)格的繪制。使用自定義繪制的另一個(gè)明顯優(yōu)勢(shì)是,您可以對(duì)希望繪制的內(nèi)容進(jìn)行嚴(yán)格挑選。實(shí)現(xiàn)方式是,在控件繪制的每個(gè)階段由 Windows 向代碼發(fā)送一個(gè)消息。這樣,您可以決定在每個(gè)階段是自己進(jìn)行所有的繪制工作,增加默認(rèn)的繪制,還是允許 Windows 為該階段執(zhí)行所有的繪制。(鑒于自定義繪制是本文的一個(gè)主題,因此您很快會(huì)看到它的工作方式。)

處理 WM_CTLCOLOR

這可能是幫助決定如何呈現(xiàn)控件最簡(jiǎn)單的方式。正如消息名所指,當(dāng)要繪制一個(gè)控件,并且它能讓您的代碼決定要使用的畫(huà)筆時(shí),發(fā)送 WM_CTLCOLOR 消息。通常情況下,如果您只想更改控件的顏色,并且不提供除控件本身之外的更多功能,則使用該技術(shù)。此外,對(duì)于由 Internet Explorer 引入的公共控件(列表視圖、樹(shù)視圖、rebar 等),不發(fā)送該消息,并且它只與標(biāo)準(zhǔn)控件(編輯、列表框等)協(xié)同使用。

實(shí)現(xiàn)自定義繪制的三步曲
既然您已經(jīng)了解了繪制控件可用的各種選項(xiàng)(包括使用自定義繪制的好處),那么,讓我們來(lái)看看實(shí)現(xiàn)一個(gè)自定義繪制控件需要的三個(gè)主要步驟。

• 執(zhí)行一個(gè) NM_CUSTOMDRAW 消息處理程序。

• 指定處理所需的繪制階段。

• 篩選特定的繪制階段(在這些階段中,您需要加入自己的特定于控件的繪制代碼)。


執(zhí)行一個(gè)NM_CUSTOMDRAW 消息處理程序

當(dāng)需要繪制一個(gè)公共控件時(shí),MFC 會(huì)將控件的自定義繪制通知消息(最初發(fā)送到控件的父窗口)以 NM_CUSTOMDRAW 消息的形式反饋給控件。以下是一個(gè) NM_CUSTOMDRAW 處理程序的示例。

void CMyCustomDrawControl::OnCustomDraw(NMHDR* pNMHDR,
                                        LRESULT* pResult)
{
  LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
  ...
}

正如您所見(jiàn),NM_CUSTOMDRAW 處理程序?qū)⒁粋€(gè)指針傳遞給 NMHDR 類(lèi)型的結(jié)構(gòu)。然而,該值不足以用于象 NMHDR 這樣只包含三個(gè)成員(hwndFrom、idFrom 和 code)的結(jié)構(gòu)。

因此,您通常需要將該結(jié)構(gòu)指針轉(zhuǎn)換為信息量更大的結(jié)構(gòu) — LPNMCUSTOMDRAW。LPNMCUSTOMDRAW 指向 NMCUSTOMDRAW,它包含諸如 dwDrawStage、dwItemSpec 和 uItemState 這樣的成員 — 它們是決定當(dāng)前繪制階段及確切繪制(例如,控件本身、或控件的一個(gè)項(xiàng)目或子項(xiàng))所必需的。

這里值得注意的是,還可以將 NMHDR 指針指向特定于正在繪制控件的類(lèi)型的結(jié)構(gòu)。表 1 顯示控件的一個(gè)列表及其相關(guān)的自定義繪制結(jié)構(gòu)類(lèi)型名。

表 1:控件及其相關(guān)的自定義繪制結(jié)構(gòu)
控件 結(jié)構(gòu)(在 commctrl.h 中定義)
Rebar、Trackbar、AuthTicket、My.Resources、My.Settings、My.User 和 My.WebServices。
NMCUSTOMDRAW

List-view
NMLVCUSTOMDRAW

Toolbar
NMTBCUSTOMDRAW

Tooltip
NMTTCUSTOMDRAW

Tree-view
NMTVCUSTOMDRAW


指定處理所需的繪制階段

正如我在前面提到的,繪制一個(gè)控件存在一些“階段”。特別是,您可以將繪制過(guò)程理解為一系列階段,其中控件通知其父窗口需要繪制的內(nèi)容。事實(shí)上,控件甚至?xí)诶L制控件及其各項(xiàng)前后發(fā)送一個(gè)通知,從而讓編程人員更好地控制該過(guò)程。

在所有情況下,單一的 NM_CUSTOMDRAW 處理程序在每個(gè)繪制階段都進(jìn)行調(diào)用。然而,謹(jǐn)記:自定義繪制允許您在自己的繪制中合并默認(rèn)的控件繪制,您需要指定您將處理哪個(gè)繪制階段。這通過(guò)設(shè)置 NM_CUSTOMDRAW 處理程序的第二個(gè)參數(shù) (pResult) 完成。事實(shí)上,如果您從未設(shè)置該值,則用初始階段的 CDDS_PREPAINT 調(diào)用函數(shù)后,您的函數(shù)將不再被調(diào)用!

從技術(shù)上講,只有兩個(gè)階段指定需要的繪制階段(CDDS_PREPAINT 和 CDDS_ITEMPREPAINT),它們影響發(fā)送通知消息的內(nèi)容。然而,通常只在處理程序的最后指定代碼將處理的繪制階段。表 2 列出用于指定所需繪制階段(代碼關(guān)注的)的值。

表 2:自定義繪制返回標(biāo)志
自定義繪制返回標(biāo)志 含義
CDRF_DEFAULT
指示控件自行繪制。該值為默認(rèn)值,不應(yīng)該將它與其他值組合在一起。

CDRF_SKIPDEFAULT
用于指定控件根本不進(jìn)行任何繪制。

CDRF_NEWFONT
當(dāng)代碼更改繪制項(xiàng)/子項(xiàng)的字體時(shí)使用。

CDRF_NOTIFYPOSTPAINT
使通知信息在控件或每個(gè)項(xiàng)/子項(xiàng)繪制后發(fā)送。

CDRF_NOTIFYITEMDRAW
指出項(xiàng)(或子項(xiàng))將進(jìn)行繪制。注意,它下面的值與 CDRF_NOTIFYSUBITEMDRAW 相同。

CDRF_NOTIFYSUBITEMDRAW
指出子項(xiàng)(或項(xiàng))將進(jìn)行繪制。注意,它下面的值與 CDRF_NOTIFYITEMDRAW 相同。

CDRF_NOTIFYPOSTERASE
當(dāng)刪除控件后需要通知代碼時(shí)使用。


以下為一個(gè)示例,其中的代碼指定,當(dāng)繪制控件的項(xiàng) (CDRF_NOTIFYITEMDRAW) 及子項(xiàng) (CDRF_NOTIFYPOSTPAINT),以及繪制完成時(shí),應(yīng)該調(diào)用 NM_CUSTOMDRAW 處理程序。

void CListCtrlWithCustomDraw::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
  LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);

  ...
  
  *pResult = 0; // Initialize value
  *pResult |= CDRF_NOTIFYITEMDRAW;
  *pResult |= CDRF_NOTIFYSUBITEMDRAW;
  *pResult |= CDRF_NOTIFYPOSTPAINT;
}

篩選指定的繪制階段

一旦指定要關(guān)注的階段后,您需要處理這些階段。因?yàn)槔L制過(guò)程的每個(gè)階段只有一個(gè)消息要發(fā)送,慣例是執(zhí)行一個(gè) switch 語(yǔ)句以決定準(zhǔn)確的繪制階段。不同的繪制階段由以下標(biāo)志定義:

CDDS_PREPAINT
CDDS_ITEM
CDDS_ITEMPREPAINT
CDDS_ITEMPOSTPAINT
CDDS_ITEMPREERASE
CDDS_ITEMPOSTERASE
CDDS_SUBITEM
CDDS_POSTPAINT
CDDS_PREERASE
CDDS_POSTERASE

對(duì)于一個(gè) CListCtrl 派生的類(lèi),有一個(gè) NM_CUSTOMDRAW 處理程序的示例,其中您可以發(fā)現(xiàn),代碼決定當(dāng)前繪制階段的方式:

void CMyCustomDrawControl::OnCustomDraw(NMHDR* pNMHDR,
                                        LRESULT* pResult)
{
  LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
  switch(pNMCD->dwDrawStage)
  {
    case CDDS_PREPAINT:
      ...
    break;
   
    case CDDS_ITEMPREPAINT:
      ...
    break;

    case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
      ...
    break;
   
    ...
  }

  *pResult = 0;
}

注意,為了決定子項(xiàng)(例如,列表視圖控件)繪制的階段,您必需使用按位 or 操作符,它有兩個(gè)值:其中一個(gè)為 CDDS_ITEMPREPAINT 或者 CDDS_ITEMPOSTPAINT,另一個(gè)為 CDDS_SUBITEM。

要說(shuō)明它,我們假定您想在繪制列表視圖項(xiàng)之前進(jìn)行一些處理。將編寫(xiě) switch 語(yǔ)句來(lái)處理 CDDS_ITEMPREPAINT。

case CDDS_ITEMPREPAINT:
...
break;

然而,如果是您所關(guān)注子項(xiàng)的預(yù)繪制階段,則將如下操作:

case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
...
break;

示例:創(chuàng)建一個(gè)列表視圖控件自定義繪制控件
如前面提到的,您可以完全控制控件及其項(xiàng)的繪制,或者僅執(zhí)行一小部分特定于應(yīng)用程序的繪制,并讓控件繼續(xù)進(jìn)行。本文的焦點(diǎn)更多地偏重于控件繪制技術(shù)而非高級(jí)的繪制技術(shù),我們將演練一個(gè)簡(jiǎn)單的示例,其中列表視圖控件是一個(gè)自定義的繪制,因此項(xiàng)的文本將在創(chuàng)建拼接外觀的交替單元中顯示為不同的顏色。

• 創(chuàng)建一個(gè)基于 Visual C++ 2005 對(duì)話(huà)框的項(xiàng)目,名為 ListCtrlColor。

• 從 Class View 中選擇 Project 菜單選項(xiàng),并單擊 Add Class 調(diào)用 Add Class 對(duì)話(huà)框。

• 從分類(lèi)列表中選擇 MFC,然后從模板列表中選擇 MFC Class。

• 單擊 Add 按鈕,調(diào)用 MFC Class Wizard 對(duì)話(huà)框。

• 對(duì)于 Class name,鍵入值 CListCtrlWithCustomDraw 并選擇 CListCtrl 的 Base class。

• 單擊 Finish 按鈕,生成類(lèi)的標(biāo)頭和執(zhí)行文件。

• 對(duì)于 Class View,右鍵單擊 CListCtrlWithCustomDraw 類(lèi),并選擇 Properties 上下文菜單選項(xiàng)。

• 顯示 Properties 窗口時(shí),單擊頂部的 Messages 按鈕,顯示一個(gè)兩列的消息列表,您可以為其實(shí)現(xiàn)處理程序。

• 在消息列表中單擊 NM_CUSTOMDRAW 項(xiàng),然后下拉第二列的組合框箭頭,并選擇值 OnNMCustomdraw。

• 現(xiàn)在,處理繪制代碼。這里,我們只簡(jiǎn)單處理項(xiàng)和子項(xiàng)預(yù)繪制階段,指定基于當(dāng)前行(項(xiàng))和列(子項(xiàng))的文本和背景色。要進(jìn)行此操作,按如下所示修改 OnNMCustomdraw 函數(shù):

void CListCtrlWithCustomDraw::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
  LPNMLVCUSTOMDRAW lpLVCustomDraw = reinterpret_cast(pNMHDR);

  switch(lpLVCustomDraw->nmcd.dwDrawStage)
  {
    case CDDS_ITEMPREPAINT:
    case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
      if (0 == ((lpLVCustomDraw->nmcd.dwItemSpec + lpLVCustomDraw->iSubItem) % 2))
      {
        lpLVCustomDraw->clrText = RGB(255,255,255); // white text
        lpLVCustomDraw->clrTextBk = RGB(0,0,0); // black background
      }
      else
      {
        lpLVCustomDraw->clrText = CLR_DEFAULT;
        lpLVCustomDraw->clrTextBk = CLR_DEFAULT;
      }
    break;

    default: break;   
  }

  *pResult = 0;
  *pResult |= CDRF_NOTIFYPOSTPAINT;
  *pResult |= CDRF_NOTIFYITEMDRAW;
  *pResult |= CDRF_NOTIFYSUBITEMDRAW;
}



現(xiàn)在,我們來(lái)測(cè)試新控件。要進(jìn)行此操作,您只需使用 CListCtrlWithCustomDraw 類(lèi)將列表視圖控件放在對(duì)話(huà)框中,并對(duì)其進(jìn)行子類(lèi)派生。下面是完成該操作的步驟。

• 在 Resource 視圖中,打開(kāi)應(yīng)用程序的主對(duì)話(huà)框 (IDD_LISTCTRLCOLOR_DIALOG)。

• 從 Toolbox 中,將一個(gè) List Control 拖放到該對(duì)話(huà)框。

• 右鍵單擊列表控件,并選擇 Properties 上下文菜單選項(xiàng)。

• 將 View 屬性設(shè)置為 Report。

• 右鍵單擊控件,并選擇 Add Variable 上下文菜單選項(xiàng)。

• 出現(xiàn) Add Member Variable Wizard 對(duì)話(huà)框時(shí),指定 m_lstBooks 的 Variable name,并單擊 Finish 按鈕。

• 這時(shí),您就有了一個(gè) CListCtrl 派生類(lèi) (m_lstBooks),它將對(duì)話(huà)框上的列表視圖控件進(jìn)行子類(lèi)派生。然而,m_lstBooks 需要從最新創(chuàng)建的 CListCtrlWithCustomDraw 派生,以便于調(diào)用您的繪制代碼。因此,打開(kāi)對(duì)話(huà)框的標(biāo)題文件 (ListCtrlColorDlg.h),將 m_lstBooks 更改為 CListCtrlWithCustomDraw 類(lèi)型。

• 在 CListCtrlColorDlg 類(lèi)開(kāi)始之前,添加以下指令。

#include "ListCtrlWithCustomDraw.h"


• 將下面的代碼添加到對(duì)話(huà)框的 OnInitDialog 成員函數(shù),這樣我們就能夠看到一些列表視圖行。

// Insert the columns
m_lstBooks.InsertColumn(0, _T("Author");
m_lstBooks.InsertColumn(1, _T("Book");

// Define the data
static struct
{
  TCHAR m_szAuthor[50];
  TCHAR m_szTitle[100];
} BOOK_INFO[] = {
_T("Tom Archer", _T("Visual C++.NET Bible",
_T("Tom Archer", _T("Extending MFC with the .NET Framework",
_T("Brian Johnson", _T("XBox 360 For Dummies"
};

// Insert the data
int idx;
for (int i = 0; i < sizeof BOOK_INFO / sizeof BOOK_INFO[0]; i++)
{
  idx = m_lstBooks.InsertItem(i, BOOK_INFO.m_szAuthor);
  m_lstBooks.SetItemText(i, 1, BOOK_INFO.m_szTitle);
}


• 現(xiàn)在,建立并運(yùn)行應(yīng)用程序。圖 1 為應(yīng)用程序外觀的一個(gè)示例。



圖 1. 自定義繪制示例應(yīng)用程序



小結(jié)
當(dāng) Windows 首次作為“下一代”操作系統(tǒng)引入到應(yīng)用程序開(kāi)發(fā)之中時(shí),它作為新圖形用戶(hù)界面的一個(gè)主要論據(jù)就是其一致性。該論據(jù)的要點(diǎn)所在是其具有一個(gè)通用的外觀:統(tǒng)一的菜單項(xiàng)、通用控件等。這一通用性的感覺(jué)可能會(huì)一直延續(xù),直到有第二家公司想設(shè)計(jì)其自己的應(yīng)用程序。簡(jiǎn)單說(shuō),提供外觀與其他應(yīng)用程序雷同的應(yīng)用程序,任何公司都不會(huì)逃離這一怪圈。

要建立一個(gè)唯一的且讓人過(guò)目難忘的用戶(hù)界面,其中一種方式是為應(yīng)用程序設(shè)計(jì)并開(kāi)發(fā)自定義的控件。希望本文能對(duì)您有所幫助,現(xiàn)在,您了解到一種非常強(qiáng)大的技術(shù),它使您的應(yīng)用程序能從眾多競(jìng)爭(zhēng)對(duì)手的應(yīng)用程序中脫穎而出。

posted on 2009-01-22 10:27 葉子 閱讀(4700) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): C\C++

Feedback

# re: Visual Studio 2005:在 Visual C++ 中開(kāi)發(fā)自定義的繪圖控件 2009-01-22 11:18 葉子

補(bǔ)充:需要子項(xiàng)繪制:
case CDDS_ITEMPREPAINT | CDDS_SUBITEM: 時(shí),需要在:

case CDDS_ITEMPREPAINT: 中加入:

*pResult = CDRF_NOTIFYSUBITEMDRAW;  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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综合电影在线视频| 女仆av观看一区| 久久人人看视频| 午夜伦理片一区| 午夜精品久久久久久久99水蜜桃| 亚洲一本大道在线| 亚洲综合色丁香婷婷六月图片| 中文有码久久| 欧美日本中文| 欧美日韩国产一级| 国产精品无码永久免费888| 国产精品欧美一区喷水| 国产一二三精品| 亚洲盗摄视频| 一本色道久久99精品综合| 亚洲一区在线视频| 久久网站免费| 亚洲国产mv| 亚洲国产高清一区二区三区| 亚洲精品乱码久久久久久黑人| 一本大道久久a久久精品综合| 亚洲一区二区高清视频| 久久久久久久一区二区三区| 国产精品日韩电影| 国产精品户外野外| 国内久久婷婷综合| 亚洲精品小视频| 久久av一区二区三区| 男女激情视频一区| 亚洲午夜电影在线观看| 久久影院午夜论| 国产精品免费电影| 亚洲精品国精品久久99热一| 欧美一区免费| 亚洲精品你懂的| 亚洲伊人一本大道中文字幕| 久久久久久九九九九| 欧美日韩一级黄| 亚洲高清123| 欧美中文日韩| 99ri日韩精品视频| 嫩草伊人久久精品少妇av杨幂| 国产精品亚洲不卡a| 亚洲精品影视在线观看| 久久亚洲精品网站| 亚洲一区高清| 国产精品二区二区三区| 亚洲精选大片| 嫩模写真一区二区三区三州| 先锋影音国产一区| 国产精品久久久久影院亚瑟| 亚洲免费观看| 亚洲国产欧美另类丝袜| 久久亚洲综合| 在线播放豆国产99亚洲| 久久精品视频在线观看| 亚洲一级在线| 国产精品久久久久一区二区三区共 | 欧美视频中文字幕| 亚洲人成免费| 欧美激情乱人伦| 久久综合狠狠综合久久综合88 | 精品动漫3d一区二区三区| 一本久道综合久久精品| 亚洲精品国产精品国产自| 久久一区国产| 伊人久久综合| 另类激情亚洲| 久久久久久97三级| 红桃视频成人| 免费观看在线综合色| 久久久久久久久久久久久久一区 | 国产精品白丝jk黑袜喷水| 一区二区三区精品| 夜夜嗨av一区二区三区网站四季av| 欧美高清视频一区二区三区在线观看 | 欧美三区在线视频| 亚洲欧美国产另类| 亚洲——在线| 国产在线精品自拍| 久久中文字幕一区| 女同一区二区| 亚洲午夜激情| 欧美一区二区黄色| 亚洲国产三级网| 亚洲三级影院| 国产欧美一区二区三区另类精品| 久久精品国产欧美亚洲人人爽| 欧美在线视频一区二区三区| 在线电影国产精品| 亚洲美女中文字幕| 国产一区二区av| 欧美国产视频在线| 欧美午夜不卡在线观看免费 | 午夜在线一区| 久久久久国产一区二区三区四区| 亚洲国产精品精华液2区45| 亚洲人成人一区二区在线观看| 国产精品xxxxx| 久久亚洲精选| 国产精品久久久一区二区三区| 久久综合国产精品台湾中文娱乐网| 欧美成人嫩草网站| 午夜视频在线观看一区| 欧美99久久| 久久精品一本| 欧美视频不卡| 欧美激情亚洲视频| 国产区在线观看成人精品| 亚洲国产欧美一区二区三区同亚洲| 国产精品家教| 亚洲国产精品99久久久久久久久| 国产精品三级视频| 亚洲三级免费| 亚洲第一网站| 欧美一级理论性理论a| 久久精品国产免费看久久精品| 久久久久国产免费免费| 在线亚洲精品福利网址导航| 久久国内精品自在自线400部| 日韩视频一区二区在线观看| 欧美资源在线观看| 亚洲欧美综合网| 欧美国产三区| 欧美成年人视频| 国产一区二区三区四区| 在线一区二区日韩| 99在线精品免费视频九九视| 久久精品日产第一区二区| 亚洲欧美另类中文字幕| 欧美另类专区| 亚洲国产精品va在线看黑人| 国产在线不卡精品| 久久aⅴ乱码一区二区三区| 午夜日韩av| 国产精品久久久久一区二区| 日韩视频在线观看免费| 日韩五码在线| 欧美激情视频在线播放| 免费亚洲婷婷| 伊人天天综合| 蜜桃视频一区| 亚洲电影网站| 亚洲国产免费| 欧美精品精品一区| 亚洲欧洲在线观看| 亚洲免费高清| 欧美视频中文字幕| 亚洲制服丝袜在线| 欧美一区二区久久久| 国产精品人人做人人爽| 亚洲欧美国产精品va在线观看 | 久久久国产精彩视频美女艺术照福利| 亚洲女爱视频在线| 国产精品久久久久77777| 中文精品视频| 久久狠狠久久综合桃花| 国产在线拍揄自揄视频不卡99| 欧美一区二区免费| 老司机免费视频久久| 亚洲电影免费观看高清完整版在线 | 亚洲欧美日韩在线一区| 国产精品卡一卡二卡三| 亚洲欧美日本日韩| 久久欧美中文字幕| 亚洲国产经典视频| 欧美女同视频| 亚洲视频精选| 蜜臀av在线播放一区二区三区 | 亚洲国产欧美一区二区三区同亚洲| 久久躁日日躁aaaaxxxx| 最新日韩欧美| 性娇小13――14欧美| 激情久久影院| 欧美日韩国语| 久久国产精品久久w女人spa| 欧美va天堂va视频va在线| 亚洲伊人观看| 小处雏高清一区二区三区| 欧美日韩精品免费看| 亚洲视频www| 欧美成人高清视频| 一区二区三区欧美视频| 国产美女精品视频| 免费看亚洲片| 亚洲欧美资源在线| 亚洲国产女人aaa毛片在线| 性欧美videos另类喷潮| 亚洲黄色一区二区三区| 国产精品久久久久久一区二区三区 | 欧美日韩一区二区视频在线| 午夜日本精品| 亚洲三级色网| 欧美成人激情视频| 午夜在线a亚洲v天堂网2018| 亚洲国产免费| 韩日视频一区| 国产欧美一区二区三区国产幕精品 | 亚洲午夜精品久久久久久浪潮 | 亚洲国产婷婷香蕉久久久久久99 |