亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hexeditorview.cpp

?? convert hex codes to binay numbers
?? CPP
字號:
/////////////////////////////////////////////////////////////////////////////
// HexEditorView.cpp : implementation of the CHexEditorView class
// --------------------------------------------------------------
// This code was written by Paul "Crazy" Frazee, and can be
// used royalty-free in any program. However, if the code is to be
// redistributed (in a modified state or not), I would appreciate
// an acknowledgement that the code was originally mine, or based
// off of mine. Please enjoy!
// 
// You can reach me at paulfrazee@cox.net, or CrazyFrazee911 (aim).
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HexEditor.h"

#include "HexEditorDoc.h"
#include "HexEditorView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

UINT uMSG_MOUSEWHEEL;

/////////////////////////////////////////////////////////////////////////////
// CHexEditorView

IMPLEMENT_DYNCREATE(CHexEditorView, CScrollView)

BEGIN_MESSAGE_MAP(CHexEditorView, CScrollView)
	//{{AFX_MSG_MAP(CHexEditorView)
	ON_WM_KEYDOWN()
	ON_WM_ERASEBKGND()
	ON_WM_VSCROLL()
	ON_WM_HSCROLL()
	ON_WM_LBUTTONDOWN()
	ON_WM_SIZE()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_RBUTTONUP()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
	ON_REGISTERED_MESSAGE( uMSG_MOUSEWHEEL, OnWheel )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHexEditorView construction/destruction

CHexEditorView::CHexEditorView()
{
	uMSG_MOUSEWHEEL = RegisterWindowMessage( "MSWHEEL_ROLLMSG" );
	Reset();
}

CHexEditorView::~CHexEditorView()
{
}

BOOL CHexEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	// load font
	m_cFont.CreatePointFont( 100, "Terminal" );

	return CScrollView::PreCreateWindow(cs);
}

void CHexEditorView::Reset()
{
	m_nCurSel = 0;
	m_nCurSelEnd = 0;
	m_nLineLength = 0;
	m_nLineCount = 0;
	m_nVisStart = m_nVisEnd = 0;
	m_ptMouse.x = m_ptMouse.y = -1;
	m_fDraggingMouse = FALSE;
}

void CHexEditorView::UpdateScrollbars()
{	
	// calculate how many bytes can be displayed across
	CRect rcClient;
	GetClientRect( &rcClient );
	m_nLineLength = ( rcClient.Width() - 80 ) / 40;

	// make calculations
	CSize sizeTotal;
	sizeTotal.cx = 1;
	sizeTotal.cy = GetDocument()->m_nBufferLength / m_nLineLength * 20 + 100;
	m_nLineCount = GetDocument()->m_nBufferLength / m_nLineLength;

	// set scrollbar sizes
	SCROLLINFO siInfo;
	siInfo.cbSize = sizeof( SCROLLINFO );
	siInfo.fMask = SIF_RANGE;
	siInfo.nMin = 0; siInfo.nMax = sizeTotal.cy;
	SetScrollSizes(MM_TEXT, sizeTotal); // this manages most of the tedious stuff
	SetScrollInfo( SB_VERT, &siInfo ); // here we actually set the size
}

void CHexEditorView::MakeCursorVisible()
{
	if( m_nCurSel >= m_nVisStart && m_nCurSel <= m_nVisEnd )
		return;

	CPoint ptScroll = GetScrollPosition();
	if( m_nCurSel < m_nVisStart )
	{
		while( m_nCurSel < ( ptScroll.y / 20 * m_nLineLength ) )
		{
			ptScroll.y -= 60;
			ScrollToPosition( ptScroll );
		}
	} else if( m_nCurSel > m_nVisEnd )
	{
		unsigned int nStart = m_nVisStart;
		unsigned int nEnd = m_nVisEnd - m_nVisStart;
		while( m_nCurSel > nEnd + nStart )
		{
			nStart = ( ptScroll.y / 20 * m_nLineLength );
			ptScroll.y += 60;
			ScrollToPosition( ptScroll );
		}
	}
}

void CHexEditorView::GetSel( unsigned int& nStart, unsigned int& nEnd )
{
	nStart = ( m_nCurSel <= m_nCurSelEnd ) ? m_nCurSel : m_nCurSelEnd;
	nEnd = ( nStart == m_nCurSel ) ? m_nCurSelEnd : m_nCurSel;
}

/////////////////////////////////////////////////////////////////////////////
// CHexEditorView drawing

void CHexEditorView::OnDraw(CDC* pDC)
{
	CHexEditorDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	unsigned int i, nMaxX=0;

	// save dc
	int nSavedDC = pDC->SaveDC();

	// get rid of the offset
	pDC->SetWindowOrg( 0, 0 );
	pDC->SetViewportOrg( 0, 0 );

	// get rects
	CRect rcRectWnd, rcRectClient;
	GetWindowRect( &rcRectWnd );
	GetClientRect( &rcRectClient );

	// get background brush
	CBrush bBkg; bBkg.FromHandle( GetSysColorBrush( COLOR_WINDOW ) );

	// if we lack data, just clear and exit
	if( pDoc->m_nBufferLength == 0 )
	{
		pDC->FillRect( &rcRectClient, &bBkg );
		pDC->RestoreDC( nSavedDC );
		return;
	}

	// create our memory dc
	CDC *pMemDC = new CDC();
    CBitmap bMemBMP;
	pMemDC->CreateCompatibleDC( pDC );
	bMemBMP.CreateCompatibleBitmap( pDC, rcRectClient.right, rcRectClient.bottom );
	CBitmap *pOldBitmap = pMemDC->SelectObject( &bMemBMP );

	// erase the background
	pMemDC->FillRect( &rcRectClient, &bBkg );

	// select font
	CGdiObject* pOldObj = pMemDC->SelectObject( &m_cFont );
	
	// figure what to draw
	m_nVisEnd = pDoc->m_nBufferLength;
	CPoint ptScroll = GetScrollPosition();
	m_nVisStart = ptScroll.y / 20 * m_nLineLength;
	m_nVisEnd = ( m_nVisEnd != 0 ) ? ( ( rcRectClient.Height() / 20 + 1 ) * m_nLineLength + m_nVisStart ) : 0;
	if( m_nVisEnd >= pDoc->m_nBufferLength )
		m_nVisEnd = pDoc->m_nBufferLength;

	// calculate rects
	CRect rcCharData, rcHexData;
	// data
	rcCharData.left = rcRectClient.left + 20;
	rcCharData.top = rcRectClient.top;
	rcCharData.right = rcRectClient.right / 2 - 20;
	rcCharData.bottom = rcRectClient.bottom - 10;
	if( rcCharData.Width() % 20 != 0 )
		rcCharData.right -= rcCharData.Width() % 20;
	nMaxX = rcCharData.Width() / 20;
	// hex
	rcHexData.left = rcRectClient.right / 2 + 20;
	rcHexData.top = rcRectClient.top;
	rcHexData.right = rcRectClient.right - 20;
	rcHexData.bottom = rcRectClient.bottom - 10;
	if( rcHexData.Width() % 20 != 0 )
		rcHexData.right -= rcHexData.Width() % 20;

	// handle the mouse input
	if( m_ptMouse.x != -1 )
	{
		BOOL fValid = TRUE;
		if( rcCharData.PtInRect( m_ptMouse ) )
		{
			m_ptMouse.x -= rcCharData.left;
			m_ptMouse.y -= rcCharData.top;
		} else if( rcHexData.PtInRect( m_ptMouse ) )
		{
			m_ptMouse.x -= rcHexData.left;
			m_ptMouse.y -= rcHexData.top;
		} else
			fValid = FALSE;

		if( fValid )
		{
			int nX = ( m_ptMouse.x - ( m_ptMouse.x % 20 ) ) / 20;
			int nY = ( m_ptMouse.y - ( m_ptMouse.y % 20 ) ) / 20;
			int nSelAdd = nX + ( nY * m_nLineLength ) + m_nVisStart;
			if( !m_fDraggingMouse )
				m_nCurSel = nSelAdd;
			m_nCurSelEnd = nSelAdd;
		}
	}

	CRect rcOut;
	unsigned int nAddX;

	// write out the data buffer
	rcOut = rcCharData;
	nAddX = 0;
	LPTSTR pData = pDoc->m_szDataBuffer.GetBuffer( pDoc->m_nBufferLength );
	for( i=m_nVisStart; i < m_nVisEnd; i++ )
	{
		// if it is over, increment our y
		if( ( i - m_nVisStart ) != 0 && ( i - m_nVisStart ) % nMaxX == 0 )
		{
			nAddX = 0;
			rcOut.top += 20;
		}
		// make the addition
		rcOut.left = rcCharData.left + nAddX;
		// fill behind current selection
		if( ( i >= m_nCurSel && i <= m_nCurSelEnd ) || ( i >= m_nCurSelEnd && i <= m_nCurSel ) )
		{
			pMemDC->SetBkColor( RGB( 220, 220, 220 ) );
		} else
		{	
			pMemDC->SetBkColor( GetSysColor( COLOR_WINDOW ) );
		}
		// draw the text
		if( pData[i] )
			pMemDC->DrawText( pData[i], &rcOut, DT_LEFT	| DT_NOCLIP );
		// add
		nAddX += 20;
	}

	// write out the data buffer in hex
	rcOut = rcHexData;
	nAddX = 0;
	CString szOut;
	pData = pDoc->m_szDataBuffer.GetBuffer( pDoc->m_nBufferLength );
	for( i=m_nVisStart; i < m_nVisEnd - 1; i++ )
	{
		// if it is over, increment our y
		if( ( i - m_nVisStart ) != 0 && ( ( i - m_nVisStart ) % nMaxX ) == 0 )
		{
			nAddX = 0;
			rcOut.top += 20;
		}
		// make the addition
		rcOut.left = rcHexData.left + nAddX;
		// fill behind current selection
		if( ( i >= m_nCurSel && i <= m_nCurSelEnd ) || ( i >= m_nCurSelEnd && i <= m_nCurSel ) )
		{
			pMemDC->SetBkColor( RGB( 220, 220, 220 ) );
		} else
		{	
			pMemDC->SetBkColor( GetSysColor( COLOR_WINDOW ) );
		}
		// draw the text		
		szOut.Format( "%02x", (unsigned char)pData[i] );
		szOut.MakeUpper();
		pMemDC->DrawText( szOut, &rcOut, DT_LEFT | DT_NOCLIP );
		// add
		nAddX += 20;
	}

	// reset the old object
	if( pOldObj )
		pMemDC->SelectObject( pOldObj );

	// copy to the real device context
	pDC->BitBlt( 0, 0, rcRectClient.right, rcRectClient.bottom, pMemDC, 0, 0, SRCCOPY );

	// restore dc
	if( pOldBitmap )
		pMemDC->SelectObject( pOldBitmap );
	bMemBMP.DeleteObject();
	pDC->RestoreDC( nSavedDC );
}

void CHexEditorView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();
	UpdateScrollbars();
}

/////////////////////////////////////////////////////////////////////////////
// CHexEditorView printing

BOOL CHexEditorView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	//return DoPreparePrinting(pInfo);
	// WILL BE IN NEXT VERSION
	MessageBox( "Printing Not Yet Implemented" );
	return FALSE;
}

void CHexEditorView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CHexEditorView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CHexEditorView diagnostics

#ifdef _DEBUG
void CHexEditorView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CHexEditorView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CHexEditorDoc* CHexEditorView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHexEditorDoc)));
	return (CHexEditorDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CHexEditorView message handlers

void CHexEditorView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	BOOL fInvalidate = FALSE;
	BOOL fErase = FALSE;
	if( nChar == VK_LEFT )
	{
		if( m_nCurSel > 0 ) m_nCurSelEnd = --m_nCurSel;
		fInvalidate = TRUE;
	}
	if( nChar == VK_RIGHT )
	{
		m_nCurSelEnd = ++m_nCurSel;
		if( m_nCurSel >= GetDocument()->m_nBufferLength )
			m_nCurSel = GetDocument()->m_nBufferLength - 1;
		fInvalidate = TRUE;
	}
	if( nChar == VK_UP )
	{
		m_nCurSel -= m_nLineLength;
		if( m_nCurSel < 0 ) m_nCurSel = 0;
		m_nCurSelEnd = m_nCurSel;
		fInvalidate = TRUE;
	}
	if( nChar == VK_DOWN )
	{
		m_nCurSel += m_nLineLength;
		if( m_nCurSel >= GetDocument()->m_nBufferLength )
			m_nCurSel = GetDocument()->m_nBufferLength - 1;
		m_nCurSelEnd = m_nCurSel;
		fInvalidate = TRUE;
	}
	if( nChar == VK_DELETE || nChar == VK_BACK )
	{
		// error checking
		if( ( nChar == VK_BACK && m_nCurSel <= 0 ) || m_nCurSel >= GetDocument()->m_nBufferLength - 1 )
			return;
		// delete the data
		unsigned int nStart, nEnd;
		GetSel( nStart, nEnd );
		GetDocument()->DeleteData( nStart, nEnd - nStart + 1 );
		// move the cursor
		if( nChar == VK_BACK ) m_nCurSel = m_nCurSelEnd = ( nStart - 1 );
		else m_nCurSelEnd = m_nCurSel = nStart;
		// update scroll bars
		UpdateScrollbars();
		fErase = fInvalidate = TRUE;
	}

	if( fInvalidate )
	{
		MakeCursorVisible();
		Invalidate( fErase );
		return;
	}
	
	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}

BOOL CHexEditorView::OnEraseBkgnd(CDC* pDC) 
{
	return FALSE;//CScrollView::OnEraseBkgnd(pDC);
}

void CHexEditorView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// windows doesnt natively use 32 bit data to track the pos
	// so if we can, we need to get it
	if( nSBCode == SB_THUMBTRACK || nSBCode == SB_THUMBPOSITION )
	{
		HWND hWndScroll = ( pScrollBar ) ? pScrollBar->m_hWnd : m_hWnd;
		SCROLLINFO siInfo;
		siInfo.cbSize = sizeof( SCROLLINFO );
		siInfo.fMask = SIF_TRACKPOS;
		::GetScrollInfo( hWndScroll, SB_VERT, &siInfo );
		nPos = siInfo.nTrackPos;
	}

	CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
	Invalidate( FALSE );
}

void CHexEditorView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
	Invalidate( FALSE );
}

void CHexEditorView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	m_ptMouse = point;	
	CScrollView::OnLButtonDown(nFlags, point);
	Invalidate( FALSE );
}

void CHexEditorView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	m_fDraggingMouse = FALSE;
	m_ptMouse.x = m_ptMouse.y = -1;
	Invalidate( FALSE );
	CScrollView::OnLButtonUp(nFlags, point);
}

void CHexEditorView::OnMouseMove(UINT nFlags, CPoint point) 
{
	if( m_ptMouse.x != -1 )
	{
		m_fDraggingMouse = TRUE;
		m_ptMouse = point;
		Invalidate( FALSE );
	}

	CScrollView::OnMouseMove(nFlags, point);
}


void CHexEditorView::OnSize(UINT nType, int cx, int cy) 
{
	CScrollView::OnSize(nType, cx, cy);
	if( cx || cy )
		UpdateScrollbars();	
}

void CHexEditorView::OnRButtonUp(UINT nFlags, CPoint point) 
{
	// load the menu
	CMenu cMenu;
	cMenu.LoadMenu( IDR_CONTEXT );
	CMenu* pPopup = cMenu.GetSubMenu( 0 );	

	// convert point
	ClientToScreen( &point );

	// track popup menu
	DWORD dwSelection = pPopup->TrackPopupMenu( (TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD ),
												point.x, point.y, this );
	// destroy it
	pPopup->DestroyMenu();

	// act on selection
	if( dwSelection == ID_CONTEXT_INSERTBYTES )
		GetDocument()->InsertBytes(); // use document's functionality
	if( dwSelection == ID_CONTEXT_EDITINTEGER || dwSelection == ID_CONTEXT_EDITHEX )
	{
		// get the selection
		unsigned int nStart, nEnd;
		GetSel( nStart, nEnd );
		// make sure they havent selected more than 4 bytes
		if( nEnd + 1 - nStart > 4 )
		{
			MessageBox( "Too many bytes selected - max 4", "Error" );
			return;
		}
		// edit the data
		GetDocument()->EditData( nStart, nEnd, ( dwSelection == ID_CONTEXT_EDITHEX ) );
		Invalidate( TRUE );
	}
	if( dwSelection == ID_CONTEXT_EDITSTRING )
	{
		// get the selection
		unsigned int nStart, nEnd;
		GetSel( nStart, nEnd );
		// edit the data
		GetDocument()->EditString( nStart, nEnd );
		Invalidate( TRUE );
	}

	CScrollView::OnRButtonUp(nFlags, point);
}

LONG CHexEditorView :: OnWheel( UINT nFlags, LONG pValue )
{
	if( nFlags & 0x0100 ) // rolled up
	{
		OnVScroll( SB_LINEUP, 0, NULL );
	}
	else // rolled down
	{
		OnVScroll( SB_LINEDOWN, 0, NULL );
	}
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区在线不卡| 欧美嫩在线观看| 亚洲成人www| 国产欧美一区二区精品性色超碰| 92精品国产成人观看免费| 日韩高清不卡一区二区三区| 国产午夜亚洲精品羞羞网站| 欧美日韩国产首页在线观看| 成人午夜免费电影| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品电影一区二区| 欧美一区二区三区人| www.欧美日韩| 狠狠色丁香婷综合久久| 亚洲va天堂va国产va久| 亚洲欧洲一区二区在线播放| 久久色在线视频| 91精品国产综合久久香蕉的特点| 91蜜桃网址入口| 国产成人综合在线观看| 奇米一区二区三区av| 亚洲午夜一二三区视频| 亚洲蜜臀av乱码久久精品蜜桃| 久久久久久久久久久久电影| 欧美一区二区视频在线观看2020| 一本一道波多野结衣一区二区| 国产精品一区二区在线播放| 免费成人在线观看视频| 日韩电影一二三区| 亚洲va国产va欧美va观看| 亚洲免费av高清| 亚洲女性喷水在线观看一区| 成人欧美一区二区三区小说| 日本一区二区三级电影在线观看 | 亚洲精品久久久蜜桃| 国产精品欧美综合在线| 国产欧美精品一区二区三区四区| 337p日本欧洲亚洲大胆色噜噜| 欧美成人福利视频| 日韩欧美的一区二区| 日韩美女视频在线| 欧美成人video| 337p粉嫩大胆噜噜噜噜噜91av| 精品国产99国产精品| 欧美成人bangbros| 久久久不卡影院| 日本一区二区三区视频视频| 国产精品电影一区二区| 一区二区在线观看不卡| 亚洲一二三区在线观看| 香蕉乱码成人久久天堂爱免费| 丝袜美腿一区二区三区| 奇米综合一区二区三区精品视频| 久久成人av少妇免费| 国产真实乱偷精品视频免| 国产一区啦啦啦在线观看| 国产激情视频一区二区在线观看| 国产精品亚洲人在线观看| 不卡的av网站| 91视视频在线观看入口直接观看www | 成人激情免费网站| 日本电影欧美片| 欧美日韩成人高清| 精品久久久网站| 国产精品萝li| 亚洲一区二区在线免费看| 日韩国产欧美在线观看| 国内精品国产三级国产a久久| 波多野结衣中文一区| 在线观看av不卡| 日韩欧美电影在线| 综合久久一区二区三区| 亚洲成人福利片| 国产一级精品在线| 色一情一乱一乱一91av| 91精品国产全国免费观看| 国产香蕉久久精品综合网| 一区二区三区国产| 精品午夜久久福利影院| 99re视频这里只有精品| 91精品国产欧美一区二区| 中文成人av在线| 首页国产欧美日韩丝袜| 成人午夜精品一区二区三区| 欧美亚洲动漫制服丝袜| 久久综合资源网| 亚洲综合图片区| 国产91精品精华液一区二区三区| 欧美色网一区二区| 欧美国产日产图区| 日韩和欧美的一区| fc2成人免费人成在线观看播放| 欧美喷潮久久久xxxxx| 国产欧美日韩精品在线| 丝袜国产日韩另类美女| 91视频免费播放| 久久一区二区三区四区| 亚洲成av人**亚洲成av**| 成人免费看黄yyy456| 欧美一级久久久| 亚洲欧美经典视频| 国产精品亚洲人在线观看| 欧美蜜桃一区二区三区 | 午夜不卡在线视频| 成人av网站在线观看免费| 日韩欧美美女一区二区三区| 亚洲精品成人少妇| 成人一道本在线| 久久人人超碰精品| 日韩黄色免费电影| 欧美日韩在线综合| 亚洲欧美日韩人成在线播放| 国产美女精品人人做人人爽| 欧美一级艳片视频免费观看| 一区二区三区国产精品| 91在线一区二区三区| 久久精品人人爽人人爽| 国模一区二区三区白浆| 欧美一区二区免费观在线| 一区二区三区日韩在线观看| 成人av电影在线观看| 国产亚洲精品久| 精品中文字幕一区二区| 9191精品国产综合久久久久久| 樱桃国产成人精品视频| 99久久精品免费精品国产| 国产精品萝li| 91在线观看污| 成人免费一区二区三区视频| 丁香激情综合国产| 国产欧美精品一区二区色综合| 国产美女一区二区| 久久久欧美精品sm网站| 九九在线精品视频| 精品伦理精品一区| 国产一区 二区 三区一级| 久久久噜噜噜久噜久久综合| 精品一区二区免费在线观看| 欧美一区二区美女| 美日韩一区二区| 久久综合99re88久久爱| 国产高清久久久| 日本一区二区三区国色天香| 成人h精品动漫一区二区三区| 国产精品麻豆网站| 91视频.com| 亚洲永久免费视频| 欧美日韩国产首页| 久久99精品久久久久久动态图| 精品奇米国产一区二区三区| 国产做a爰片久久毛片| 欧美韩日一区二区三区四区| 91在线播放网址| 亚洲国产另类av| 91精品在线观看入口| 久久精品免费看| 国产欧美日韩在线视频| 色综合天天综合狠狠| 亚洲国产综合人成综合网站| 337p亚洲精品色噜噜狠狠| 精品中文字幕一区二区| 国产精品久久久久久户外露出| 色婷婷综合中文久久一本| 视频一区中文字幕国产| 久久婷婷综合激情| 91捆绑美女网站| 日本在线不卡视频一二三区| 久久伊人中文字幕| 99久精品国产| 美女性感视频久久| 1000精品久久久久久久久| 欧美日韩中文字幕精品| 麻豆国产精品一区二区三区| 欧美国产综合一区二区| 欧美中文字幕一区| 九九**精品视频免费播放| 国产精品麻豆视频| 欧美一区二区视频网站| av一区二区三区在线| 视频一区二区三区在线| 中文av一区特黄| 欧美一级欧美三级| 成人精品免费看| 日本不卡视频在线观看| 中文字幕一区二区三区四区不卡| 7777精品伊人久久久大香线蕉超级流畅| 狠狠色丁香婷婷综合| 亚洲综合av网| 国产婷婷一区二区| 欧美日本一区二区在线观看| 国产白丝网站精品污在线入口| 亚洲一区中文在线| 久久精品视频免费| 欧美另类久久久品| 成人一区在线看| 蜜臀av在线播放一区二区三区| 中文字幕一区二区三区在线观看| 欧美va亚洲va在线观看蝴蝶网| 一本久久a久久精品亚洲| 狠狠狠色丁香婷婷综合激情|