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

積木

No sub title

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

原諒轉載自http://tech.ddvip.com/2008-11/122662837992492.html

Visual C++中提供的MFC類CtreeCtrl(樹型控件)用來顯示具有一定層次結構的數據項時方便、直觀,所以它已經被廣泛地應用在各種軟件中,如資源管理器中的磁盤目錄就用的是樹型控件,我們在編程中也會經常用到這個控件,但是這個控件也有缺陷,那就是它并不直接支持拖動節點等高級特性,這使得程序員在編程時使用它受到了很大限制,同時又給軟件用戶帶來了一些不便。為此,本實例通過從 CTreeCtrl 中派生了一個類 CXTreeCtrl ,實現樹型控件中節點的拖動。這個類具有如下的功能:⑴ 基本項目條拖動的實現;⑵ 處理項目條的無意拖動;⑶ 能處理項目條拖動過程中的滾動問題;⑷ 拖動過程中節點會智能展開。程序編譯運行后的效果如圖所示:

570)?'570px':'auto'; }" src="http://img.ddvip.com/2008_11_14/1226628379_ddvip_9835.png">

  圖一:樹型控件節點拖動示例

  一、實現方法

  我們針對上述自定義類的實現功能,介紹實現思路和方法。

  (1)基本項目條拖動的實現

  當我們要拖動樹型控件的一個項目條時,樹型控件會給它的父窗口發送一個TVN_BEGINDRAG通知消息,所以可以在此消息的響應函數中,調用 CTreeCtrl ::CreateDragImage ()函數創建表示當前項目條正處在拖動操作中的圖象,該函數創建的圖象由項目條的圖象和標簽文本組成。創建了拖動圖象后,調用CImageList::BeginDrag()函數指定拖動圖象的熱點位置,然后調用CImageList::DragEnter()函數顯示拖動圖象。接下來處理 WM_MOUSEMOVE 消息用于更新拖動圖象,我們想讓移動中的圖象經過某些項目時高亮度顯示,這可以調用 CTreeCtrl ::SelectDropTarget() 來實現。在調用 SelectDropTarget()函數之前,需要先調用CImageList::DragShowNolock ( false )函數來隱藏圖象列表,然后再調用CImageList::DragShowNolock ( true ) 函數來恢復圖象列表的顯示,這樣就不會在拖動過程中留下難看的軌跡。最后我們處理 WM_LBUTTONUP 消息用于完成拖動操作,在該消息響應函數中,我們需要完成結束拖動圖象的顯示、刪除拖動圖象、釋放鼠標、節點的拷貝/刪除等操作。在節點的拷貝/刪除操作中,如果是父節點拖到子節點上,我們可以先將父節點拷到根結點下的臨時節點中,再從臨時結點處拷到子節點,然后將根結點下的臨時節點刪除,這樣做的目的是防止產生異常。

  (2)處理項目條的無意拖動

  牐犎綣在鼠標按下時不小心移動了鼠標,這時系統就認為產生了一個移動操作,這就產生了誤操作。解決這個問題的方法是設置時間延遲,也就是說當用戶按下鼠標后必須在原位置停留一段時間,才能激活拖動操作。

  (3)處理拖動過程中的滾動問題

  當我們拖動樹型控件的項目條時,如果目的節點不可見,則需要拖動滾動條或收攏其它一些節點以使得目的節點顯示出來,無疑,這會給我們帶來很大的不便。為此就要給樹型控件添加自動滾動支持。首先設置一個定時器,在 WM_TIMER 消息中檢測鼠標的位置,如果靠近樹型控件的下邊緣,則使得控件向下滾動。靠近上邊緣則向上滾動。滾動速度根據鼠標的位置確定。

  (4)拖動過程中節點的智能展開

  為了實現在拖動過程中鼠標停留在某個節點上一段時間后,該節點會自動展開的功能。設置一個定時器,當鼠標在拖動過程中停止在某個節點上時,定時器被啟動,再設置一變量保存當前的鼠標位置。

  二、編程步驟

  1、 新建一對話框工程DragTree,編輯資源,在對話框中加入一樹型控件IDC_TREE ,屬性設置為:Has Buttons、Has Lines、Lines at root、Edit Labels、Border;

  2、 使用Class Wizard給該控件添加一個成員變量 m_wndTree ,在代碼部分將該控件的類型修改為CXTreeCtrl。

  3、 在對話框的OnInitDialog()函數中添加代碼,初始化樹型控件的項目條;

  4、 制作一個圖像資源(ID為IDB_TREEIMAGE),其中包含兩個小圖標,用來作為樹型控件項目條的顯示圖標;

  5、 添加代碼,編譯運行程序。

  三、程序代碼

// XTreeCtrl.h : header file 
#if !defined(AFX_XTREECTRL_H__3EF12526_EF66_4FD9_A572_59476441D79A__INCLUDED_) 
#define AFX_XTREECTRL_H__3EF12526_EF66_4FD9_A572_59476441D79A__INCLUDED_ 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
class CXTreeCtrl : public CTreeCtrl 

 
// Construction 
 public
  CXTreeCtrl(); 
  
// Attributes 
 public
  
// Operations 
 public
  
// Overrides 
  
// ClassWizard generated virtual function overrides 
  
//{{AFX_VIRTUAL(CXTreeCtrl) 
  
//}}AFX_VIRTUAL 
  
// Implementation 
 public
  
virtual ~CXTreeCtrl(); 
  
// Generated message map functions 
 protected
  UINT m_TimerTicks; 
//處理滾動的定時器所經過的時間 
  UINT m_nScrollTimerID; //處理滾動的定時器 
  CPoint m_HoverPoint; //鼠標位置 
  UINT m_nHoverTimerID; //鼠標敏感定時器 
  DWORD m_dwDragStart; //按下鼠標左鍵那一刻的時間 
  BOOL m_bDragging; //標識是否正在拖動過程中 
  CImageList* m_pDragImage; //拖動時顯示的圖象列表 
  HTREEITEM m_hItemDragS; //被拖動的標簽 
  HTREEITEM m_hItemDragD; //接受拖動的標簽 
  
//{{AFX_MSG(CXTreeCtrl) 
   afx_msg void OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult); 
   afx_msg 
void OnMouseMove(UINT nFlags, CPoint point); 
   afx_msg 
void OnLButtonUp(UINT nFlags, CPoint point); 
   afx_msg 
void OnLButtonDown(UINT nFlags, CPoint point); 
   afx_msg 
void OnTimer(UINT nIDEvent); 
  
//}}AFX_MSG 
  DECLARE_MESSAGE_MAP() 
 
private
  HTREEITEM CopyBranch(HTREEITEM htiBranch,HTREEITEM htiNewParent,HTREEITEM htiAfter); 
  HTREEITEM CopyItem(HTREEITEM hItem,HTREEITEM htiNewParent,HTREEITEM htiAfter); 
}; 
#endif 
//////////////////////////////////////////////////////////// CXTreeCtrl 
#include "stdafx.h" 
#include 
"DragTree.h" 
#include 
"XTreeCtrl.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
#define DRAG_DELAY 60 
CXTreeCtrl::CXTreeCtrl() 

 m_bDragging 
= false

CXTreeCtrl::
~CXTreeCtrl() 
{} 
BEGIN_MESSAGE_MAP(CXTreeCtrl, CTreeCtrl) 
//{{AFX_MSG_MAP(CXTreeCtrl) 
 ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnBegindrag) 
 ON_WM_MOUSEMOVE() 
 ON_WM_LBUTTONUP() 
 ON_WM_LBUTTONDOWN() 
 ON_WM_TIMER() 
//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
void CXTreeCtrl::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) 

 NM_TREEVIEW
* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
 
*pResult = 0
 
//如果是無意拖曳,則放棄操作 
 if( (GetTickCount() - m_dwDragStart) < DRAG_DELAY ) 
  
return
 m_hItemDragS 
= pNMTreeView->itemNew.hItem; 
 m_hItemDragD 
= NULL; 
 
//得到用于拖動時顯示的圖象列表 
 m_pDragImage = CreateDragImage( m_hItemDragS ); 
 
if!m_pDragImage ) 
  
return
 m_bDragging 
= true
 m_pDragImage
->BeginDrag ( 0,CPoint(8,8) ); 
 CPoint pt 
= pNMTreeView->ptDrag; 
 ClientToScreen( 
&pt ); 
 m_pDragImage
->DragEnter ( this,pt ); //"this"將拖曳動作限制在該窗口 
 SetCapture(); 
 m_nScrollTimerID 
= SetTimer( 2,40,NULL ); 

void CXTreeCtrl::OnMouseMove(UINT nFlags, CPoint point) 

 HTREEITEM hItem; 
 UINT flags; 
 
//檢測鼠標敏感定時器是否存在,如果存在則刪除,刪除后再定時 
 if( m_nHoverTimerID ) 
 { 
  KillTimer( m_nHoverTimerID ); 
  m_nHoverTimerID 
= 0
 } 
 m_nHoverTimerID 
= SetTimer( 1,800,NULL ); //定時為 0.8 秒則自動展開 
 m_HoverPoint = point; 
 
if( m_bDragging ) 
 { 
  CPoint pt 
= point; 
  CImageList::DragMove( pt ); 
  
//鼠標經過時高亮顯示 
  CImageList::DragShowNolock( false ); //避免鼠標經過時留下難看的痕跡 
  if( (hItem = HitTest(point,&flags)) != NULL ) 
  { 
   SelectDropTarget( hItem ); 
   m_hItemDragD 
= hItem; 
  } 
  CImageList::DragShowNolock( 
true ); 
  
//當條目被拖曳到左邊緣時,將條目放在根下 
  CRect rect; 
  GetClientRect( 
&rect ); 
  
if( point.x < rect.left + 20 ) 
   m_hItemDragD 
= NULL; 
 } 
 CTreeCtrl::OnMouseMove(nFlags, point); 

void CXTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point) 

 CTreeCtrl::OnLButtonUp(nFlags, point); 
 
if( m_bDragging ) 
 { 
  m_bDragging 
= FALSE; 
  CImageList::DragLeave( 
this ); 
  CImageList::EndDrag(); 
  ReleaseCapture(); 
  delete m_pDragImage; 
  SelectDropTarget( NULL ); 
  
if( m_hItemDragS == m_hItemDragD ) 
  { 
   KillTimer( m_nScrollTimerID ); 
   
return
  } 
  Expand( m_hItemDragD,TVE_EXPAND ); 
  HTREEITEM htiParent 
= m_hItemDragD; 
  
while( (htiParent = GetParentItem(htiParent)) != NULL ) 
  { 
   
if( htiParent == m_hItemDragS ) 
   { 
    HTREEITEM htiNewTemp 
= CopyBranch( m_hItemDragS,NULL,TVI_LAST ); 
    HTREEITEM htiNew 
= CopyBranch( htiNewTemp,m_hItemDragD,TVI_LAST ); 
    DeleteItem( htiNewTemp ); 
    SelectItem( htiNew ); 
    KillTimer( m_nScrollTimerID ); 
    
return
   } 
  } 
  HTREEITEM htiNew 
= CopyBranch( m_hItemDragS,m_hItemDragD,TVI_LAST ); 
  DeleteItem( m_hItemDragS ); 
  SelectItem( htiNew ); 
  KillTimer( m_nScrollTimerID ); 
 } 

HTREEITEM CXTreeCtrl::CopyItem(HTREEITEM hItem, HTREEITEM htiNewParent, HTREEITEM htiAfter) 
//拷貝條目 

 TV_INSERTSTRUCT tvstruct; 
 HTREEITEM hNewItem; 
 CString sText; 
 
//得到源條目的信息 
 tvstruct.item.hItem = hItem; 
 tvstruct.item.mask
=TVIF_CHILDREN|TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE; 
 GetItem( 
&tvstruct.item ); 
 sText 
= GetItemText( hItem ); 
 tvstruct.item.cchTextMax 
= sText.GetLength (); 
 tvstruct.item.pszText 
= sText.LockBuffer (); 
 
//將條目插入到合適的位置 
 tvstruct.hParent = htiNewParent; 
 tvstruct.hInsertAfter 
= htiAfter; 
 tvstruct.item.mask 
= TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT; 
 hNewItem 
= InsertItem( &tvstruct ); 
 sText.ReleaseBuffer (); 
 
//限制拷貝條目數據和條目狀態 
 SetItemData( hNewItem,GetItemData(hItem) ); 
 SetItemState( hNewItem,GetItemState(hItem,TVIS_STATEIMAGEMASK),TVIS_STATEIMAGEMASK); 
 
return hNewItem; 

HTREEITEM CXTreeCtrl::CopyBranch(HTREEITEM htiBranch, HTREEITEM htiNewParent, HTREEITEM htiAfter) 
//拷貝分支 

 HTREEITEM hChild; 
 HTREEITEM hNewItem 
= CopyItem( htiBranch,htiNewParent,htiAfter ); 
 hChild 
= GetChildItem( htiBranch ); 
 
while( hChild != NULL ) 
 { 
  CopyBranch( hChild,hNewItem,htiAfter ); 
  hChild 
= GetNextSiblingItem( hChild ); 
 } 
 
return hNewItem; 

void CXTreeCtrl::OnLButtonDown(UINT nFlags, CPoint point) //處理無意拖曳 

 m_dwDragStart 
= GetTickCount(); 
 CTreeCtrl::OnLButtonDown(nFlags, point); 

void CXTreeCtrl::OnTimer(UINT nIDEvent) 

 
//鼠標敏感節點 
 if( nIDEvent == m_nHoverTimerID ) 
 { 
  KillTimer( m_nHoverTimerID ); 
  m_nHoverTimerID 
= 0
  HTREEITEM trItem 
= 0
  UINT uFlag 
= 0
  trItem 
= HitTest( m_HoverPoint,&uFlag ); 
  
if( trItem && m_bDragging ) 
  { 
   SelectItem( trItem ); 
   Expand( trItem,TVE_EXPAND ); 
  } 
 } 
 
//處理拖曳過程中的滾動問題 
 else if( nIDEvent == m_nScrollTimerID ) 
 { 
  m_TimerTicks
++
  CPoint pt; 
  GetCursorPos( 
&pt ); 
  CRect rect; 
  GetClientRect( 
&rect ); 
  ClientToScreen( 
&rect ); 
  HTREEITEM hItem 
= GetFirstVisibleItem(); 
  
if( pt.y < rect.top +10 ) 
  { 
   
//向上滾動 
   int slowscroll = 6 - (rect.top + 10 - pt.y )/20
   
if0 == (m_TimerTicks % ((slowscroll > 0? slowscroll : 1)) ) 
   { 
    CImageList::DragShowNolock ( 
false ); 
    SendMessage( WM_VSCROLL,SB_LINEUP ); 
    SelectDropTarget( hItem ); 
    m_hItemDragD 
= hItem; 
    CImageList::DragShowNolock ( 
true ); 
   } 
  } 
  
else if( pt.y > rect.bottom - 10 ) 
  { 
   
//向下滾動 
   int slowscroll = 6 - (pt.y - rect.bottom + 10)/20
   
if0 == (m_TimerTicks % ((slowscroll > 0? slowscroll : 1)) ) 
   { 
    CImageList::DragShowNolock ( 
false ); 
    SendMessage( WM_VSCROLL,SB_LINEDOWN ); 
    
int nCount = GetVisibleCount(); 
    
forint i=0 ; i<nCount-1 ; i++ ) 
     hItem 
= GetNextVisibleItem( hItem ); 
     
if( hItem ) 
      SelectDropTarget( hItem ); 
     m_hItemDragD 
= hItem; 
     CImageList::DragShowNolock ( 
true ); 
   } 
  } 
 } 
 
else
  CTreeCtrl::OnTimer(nIDEvent); 

//////////////////////////////////////////////////////////// 
BOOL CDragTreeDlg::OnInitDialog() 

 CDialog::OnInitDialog(); 
 …………………….
//此處代碼省略 
 
// TODO: Add extra initialization here 
 m_image.Create ( IDB_TREEIMAGE,16,1,RGB(255,255,255) ); 
 m_wndTree.SetImageList ( 
&m_image,TVSIL_NORMAL ); 
 HTREEITEM hti1 
= m_wndTree.InsertItem ( _T("唐詩"),0,1 ); 
 HTREEITEM hti2 
= m_wndTree.InsertItem ( _T("宋詞"),0,1 ); 
 HTREEITEM hti3 
= m_wndTree.InsertItem ( _T("元曲"),0,1 ); 
 HTREEITEM hti4 
= m_wndTree.InsertItem ( _T("李白"),0,1,hti1 ); 
 m_wndTree.InsertItem ( _T(
"靜夜思(床前明月光)"),0,1,hti4 ); 
 m_wndTree.InsertItem ( _T(
"將進酒(君不見黃河之水天上來)"),0,1,hti4 ); 
 m_wndTree.InsertItem ( _T(
"望廬山瀑布(日照香爐生紫煙)"),0,1,hti4 ); 
 m_wndTree.InsertItem ( _T(
"蜀道難(噫吁戲,危乎高哉)"),0,1,hti4 ); 
 HTREEITEM hti5 
= m_wndTree.InsertItem ( _T("杜甫"),0,1,hti1 ); 
 m_wndTree.InsertItem ( _T(
"蜀相(丞相祠堂何處尋)"),0,1,hti5 ); 
 m_wndTree.InsertItem ( _T(
"春望(國破山河在)"),0,1,hti5 ); 
 m_wndTree.InsertItem ( _T(
"茅屋為秋風所破歌(八月秋高風怒號)"),0,1,hti5 ); 
 HTREEITEM hti6 
= m_wndTree.InsertItem ( _T("白居易"),0,1,hti1 ); 
 m_wndTree.InsertItem ( _T(
"長恨歌(漢皇重色思傾國)"),0,1,hti6 ); 
 m_wndTree.InsertItem ( _T(
"琵琶行並序(潯陽江頭夜送客)"),0,1,hti6 ); 
 m_wndTree.InsertItem ( _T(
"李清照"),0,1,hti2 ); 
 m_wndTree.InsertItem ( _T(
"柳永"),0,1,hti2 ); 
 
return TRUE; // return TRUE unless you set the focus to a control 
}

 

posted on 2011-11-04 11:23 Jacc.Kim 閱讀(730) 評論(0)  編輯 收藏 引用 所屬分類: VC / C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲深爱激情| 韩国一区二区在线观看| 亚洲一二三区视频在线观看| 亚洲国产日韩一级| 久久久久88色偷偷免费| 欧美在线日韩在线| 久久精品国产综合精品| 久久久国产成人精品| 久久亚洲国产精品日日av夜夜| 久久激情网站| 久久网站热最新地址| 久热精品视频在线观看一区| 蜜桃久久精品乱码一区二区| 欧美高清不卡| 一本色道久久综合亚洲精品按摩| 一区二区三区福利| 欧美专区日韩视频| 欧美国产日韩精品免费观看| 欧美性色aⅴ视频一区日韩精品| 国产情人节一区| 亚洲国产精品久久久久秋霞不卡| 日韩亚洲国产精品| 久久精品视频免费| 亚洲人体1000| 久久国产精品久久精品国产 | 亚洲视频你懂的| 欧美一区二区性| 欧美久久电影| 黑人操亚洲美女惩罚| 亚洲午夜精品| 久久亚洲不卡| 亚洲欧美日韩一区二区在线| 欧美成在线观看| 国内外成人免费视频| 一本久久a久久免费精品不卡| 久久成人一区二区| 亚洲日本国产| 免费欧美日韩| 精品二区视频| 午夜精品亚洲一区二区三区嫩草| 女女同性精品视频| 亚洲欧美日韩综合一区| 欧美精品七区| 亚洲国产成人久久| 久久精品卡一| 亚洲免费影视| 国产精品卡一卡二| 一区二区三区精品视频| 欧美激情第8页| 久久综合伊人77777蜜臀| 国产午夜精品福利| 午夜精品一区二区在线观看 | 亚洲午夜一二三区视频| 蜜桃av噜噜一区二区三区| 亚洲视频在线看| 欧美老女人xx| 日韩视频一区二区| 欧美激情一区二区三区全黄 | 久热这里只精品99re8久| 国产精品尤物福利片在线观看| 亚洲伦理在线免费看| 欧美国产丝袜视频| 麻豆国产精品777777在线| 国内成人精品视频| 久久久精品网| 久久久噜噜噜久久人人看| 黄色成人精品网站| 蜜桃av一区二区三区| 久久综合伊人77777蜜臀| 亚洲国产一区二区三区高清| 欧美激情视频给我| 欧美国产免费| av成人老司机| 亚洲素人在线| 国产主播精品| 亚洲第一中文字幕在线观看| 欧美成人综合| 亚洲一区国产精品| 亚洲欧美国产精品桃花| 国产综合第一页| 另类av一区二区| 欧美激情女人20p| 亚洲欧美电影在线观看| 午夜精品久久久久久久久久久久| 国产综合精品| 亚洲高清免费在线| 欧美三区在线视频| 久久精品免费观看| 欧美激情 亚洲a∨综合| 亚洲欧美日韩成人高清在线一区| 午夜久久一区| 亚洲精品美女久久久久| 国产精品99久久久久久久久久久久| 国产目拍亚洲精品99久久精品| 久久视频在线看| 欧美精品亚洲二区| 欧美中文字幕| 欧美激情视频在线播放| 久久精品国产免费| 欧美日韩无遮挡| 久久久蜜桃精品| 欧美性片在线观看| 欧美顶级少妇做爰| 国产精品一区二区你懂得| 欧美国产视频日韩| 国产日韩欧美高清| 亚洲看片一区| 亚洲国产精品传媒在线观看 | 性欧美8khd高清极品| 在线观看日韩www视频免费 | 国产精品99久久99久久久二8 | 日韩午夜在线| 久久久精彩视频| 亚洲一区精品视频| 久久综合色影院| 久久成人精品无人区| 欧美日韩不卡合集视频| 久热成人在线视频| 国产精品视频99| 亚洲开发第一视频在线播放| 亚洲国产第一| 久久精品亚洲精品| 久久aⅴ国产欧美74aaa| 欧美视频二区| 亚洲人成在线观看网站高清| 亚洲高清二区| 久久久久成人精品免费播放动漫| 亚洲欧美韩国| 国产精品v片在线观看不卡| 亚洲国产日韩美| 亚洲人成网站在线观看播放| 狂野欧美性猛交xxxx巴西| 狂野欧美激情性xxxx欧美| 国产一区二区三区在线播放免费观看| 一区二区欧美在线观看| 99精品欧美一区二区蜜桃免费| 麻豆av一区二区三区| 欧美丰满高潮xxxx喷水动漫| 亚洲第一福利社区| 免费观看久久久4p| 亚洲风情亚aⅴ在线发布| 亚洲国产一区二区精品专区| 欧美v日韩v国产v| 亚洲欧洲精品一区二区三区不卡| 亚洲欧洲日本一区二区三区| 欧美国产专区| 夜夜嗨av一区二区三区网站四季av| 亚洲精品综合在线| 欧美精品久久久久久久| 日韩视频一区二区在线观看| 亚洲特级片在线| 国产精品一区在线观看| 久久精品一区二区三区不卡| 亚洲第一区中文99精品| 亚洲精品一区在线观看| 欧美日韩免费| 欧美一区二区三区另类 | 午夜精品成人在线| 国产日本亚洲高清| 欧美在线网址| 欧美大片在线看免费观看| 日韩小视频在线观看| 亚洲午夜在线观看视频在线| 欧美二区在线看| 在线看无码的免费网站| 亚洲夜晚福利在线观看| 亚洲欧美日韩一区二区三区在线观看| 免费成人网www| 亚洲尤物视频网| 欧美精品自拍偷拍动漫精品| 亚洲青色在线| 母乳一区在线观看| 亚洲高清免费视频| 久久狠狠亚洲综合| 日韩视频一区二区三区在线播放| 欧美a级在线| 欧美日本国产精品| 亚洲美女尤物影院| 久久国产主播精品| 亚洲福利国产| 国内久久婷婷综合| 99国产精品久久久久久久久久 | 亚洲成色www8888| 久久精品国产精品亚洲综合| 国产精品一区二区三区久久| 久久精品视频在线看| 久久日韩粉嫩一区二区三区| 国产午夜精品美女毛片视频| 亚洲国产精品成人综合色在线婷婷| 一区二区三区视频在线看| 久久久无码精品亚洲日韩按摩| 欧美专区18| 欧美va日韩va| 久久久久久一区二区| 一本色道久久综合亚洲精品不| 欧美性淫爽ww久久久久无| 亚洲国产色一区| 亚洲欧洲一区二区在线播放| 男女激情久久| 亚洲视频日本|