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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? commandctrl.cpp

?? VC下通過Oracle OCI方式連接數(shù)據(jù)庫。
?? CPP
字號(hào):
// CommandCtrl.cpp : implementation file
//
// Release 1, Copyright (C) 1999 Ben Bryant
// This is sample source code, nothing more is implied. Use it only as such.
// This software is provided 'as-is', without warranty. In no event will the
// author be held liable for any damages arising from the use of this software.
// Permission is granted to anyone to use this software for any purpose.
// The origin of this software must not be misrepresented; you must not claim
// that you wrote the original software. Altered source versions must be plainly
// marked as such, and must not be misrepresented as being the original software.
// Ben Bryant bcbryant@firstobject.com
//

#include "stdafx.h"
#include "CommandCtrl.h"

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


/////////////////////////////////////////////////////////////////////////////
// CCommand

CCommand::CCommand()
{
	m_pWnd = NULL;
	m_pOut = NULL;
	m_pIn = NULL;
	m_pDo = NULL;
}

CCommand::~CCommand()
{
}

void CCommand::Init( CWnd* pWnd, CCmdOutCtrl* pOut, CCmdInCtrl* pIn, CButton* pDo )
{
	// Store pointers
	m_pOut = pOut;
	m_pOut->Set( this );
	m_pIn = pIn;
	m_pIn->Set( this );
	m_pDo = pDo;
	m_pWnd = pWnd;
}

void CCommand::Resize()
{
	if ( m_pWnd )
	{
		CRect rect;
		m_pWnd->GetClientRect( &rect );
		m_pWnd->SendMessage(
			WM_SIZE,
			SIZE_RESTORED,
			MAKELPARAM(rect.Width(),rect.Height())
			);
	}
}

void CCommand::MoveControls( CRect& rectBorder )
{
	if ( m_pDo && m_pIn && m_pOut )
	{
		// Position controls inside rectBorder
		CRect rect;

		// Do button stays same size at upper right
		rect.SetRect(
			max( rectBorder.left, rectBorder.right - 16 ), // left
			rectBorder.top, // top
			rectBorder.right, // right
			min( rectBorder.bottom, rectBorder.top + 21 ) // bottom
			);
		m_pDo->MoveWindow( rect );
		m_pDo->Invalidate();

		// Command box is from left to button, height according to number of lines
		const int nPixelsPerLine = 13, nPixelsBorder = 8;
		int nLinesPossible = (rectBorder.Height() - nPixelsBorder) / nPixelsPerLine;
		int nLineCount = max( 1, min( nLinesPossible/2, m_pIn->GetLineCount() ) );
		int nInputHeight = nPixelsBorder + nPixelsPerLine * nLineCount;
		rect.SetRect(
			rectBorder.left, // left
			rectBorder.top, // top
			rectBorder.right - 16 - 3, // right
			min( rectBorder.bottom, rectBorder.top + nInputHeight ) // bottom
			);
		m_pIn->MoveWindow( rect );
		m_pIn->Invalidate();

		// Output
		rect.SetRect(
			rectBorder.left, // left
			rectBorder.top + rect.Height() + 3, // top
			rectBorder.right, // right
			rectBorder.bottom // bottom
			);
		m_pOut->MoveWindow( rect );
		m_pOut->Invalidate();
	}
}

void CCommand::ParseCommandDefn( CString csDefn, CCommand::ParsedCommand* pCmd )
{
	//
	// Break csDefn into four pieces
	// format: service.command args#description
	//

	// Is there a description?
	int nPoundOffset = csDefn.Find("#");
	if ( nPoundOffset >= 0 )
	{
		pCmd->csDescription = csDefn.Mid(nPoundOffset+1);
		csDefn = csDefn.Left(nPoundOffset);
	}

	// Separate service, command and args
	int nCommandOffset = csDefn.Find(".") + 1;
	int nArgsOffset = csDefn.Find(" ") + 1;
	if ( nCommandOffset == 0 || nCommandOffset == csDefn.GetLength() )
	{
		pCmd->csCommand = csDefn;
		return;
	}
	pCmd->csService = csDefn.Left( nCommandOffset - 1 );

	// Are there any arguments
	if ( nArgsOffset == 0 )
	{
		// No arguments
		pCmd->csCommand = csDefn.Mid( nCommandOffset );
	}
	else
	{
		// Has arguments
		pCmd->csArgDefns = csDefn.Mid( nArgsOffset );
		pCmd->csCommand = csDefn.Mid( nCommandOffset, nArgsOffset - nCommandOffset - 1 );
	}
}

void CCommand::ParseCommandLine( LPCTSTR szCommand, const char* szaCommandDefns[] )
{
	//
	// Parse command according to command definitions
	// If it starts with a valid command, set csCommand
	// If the arguments do not fit the command's definition, set m_csSyntaxError
	// If there are arguments, fill m_csaArgs
	// Apply default arguments and set m_csProcessedCommandLine
	// If the command was not found, leave entire line in m_csProcessedCommandLine
	//
	m_parsedcommand = ParsedCommand(); // empty ParsedCommand member
	m_parsedcommand.csCommand = szCommand;
	m_parsedcommand.csCommand.TrimLeft();
	m_parsedcommand.csCommand.TrimRight();
	m_csSyntaxError.Empty();
	m_csaArgs.RemoveAll();

	// Separate command from operand
	CString csOperand;
	int iSpace = m_parsedcommand.csCommand.Find( " " );
	if ( iSpace > -1 && iSpace + 1 < m_parsedcommand.csCommand.GetLength() )
	{
		csOperand = m_parsedcommand.csCommand.Mid( iSpace + 1 );
		m_parsedcommand.csCommand = m_parsedcommand.csCommand.Left( iSpace );
		m_parsedcommand.csCommand.MakeLower();
	}

	// Look for command definition in array, set m_parsedcommand.csService etc
	int iCmd = 0;
	while ( szaCommandDefns[iCmd][0] )
	{
		ParsedCommand parsed;
		ParseCommandDefn( szaCommandDefns[iCmd], &parsed );
		if ( m_parsedcommand.csCommand == parsed.csCommand )
		{
			m_parsedcommand = parsed;
			break;
		}
		++iCmd;
	}

	// Command not found?
	if ( m_parsedcommand.csService.IsEmpty() )
	{
		m_csSyntaxError = "unknown command";
		m_csProcessedCommandLine = szCommand;
		m_parsedcommand.csCommand.Empty();
	}
	else
		m_csProcessedCommandLine = m_parsedcommand.csCommand;

	// Parse argument definitions plus user's arguments into m_csaArgs
	// Build m_csProcessedCommandLine
	CString csRemainingDefns = m_parsedcommand.csArgDefns;
	BOOL bEndOfDefns = FALSE;
	while ( ! m_parsedcommand.csService.IsEmpty() && ! bEndOfDefns )
	{
		// Get argument definition
		CString csDefn;
		int iComma = csRemainingDefns.Find( ',' );
		if ( iComma > -1 )
		{
			// take up to comma
			csDefn = csRemainingDefns.Left( iComma );
			csRemainingDefns = csRemainingDefns.Mid( iComma + 1 );
		}
		else
		{
			// last argument definition
			csDefn = csRemainingDefns;
			csRemainingDefns.Empty();
			bEndOfDefns = TRUE;
		}

		// Are there are no arguments in command?
		if ( csDefn.IsEmpty() )
		{
			// csOperand must be empty
			if ( ! csOperand.IsEmpty() )
			{
				m_csSyntaxError = "syntax: no arguments";
				m_parsedcommand.csService.Empty();
			}

			// Do not create any items in csaArgs[]
			break;
		}

		// Get user's argument
		CString csArg;
		iComma = csOperand.Find( ',' );
		if ( iComma > -1 && ! bEndOfDefns )
		{
			// take up to comma
			csArg = csOperand.Left( iComma );
			csOperand = csOperand.Mid( iComma + 1 );
		}
		else
		{
			// last argument
			csArg = csOperand;
			csOperand.Empty();
		}

		// Get argument default
		// Argument is required unless default is provided
		// For empty argument default in defn just specify =
		// empty user value for arg is not accepted unless default is empty
		CString csDefault;
		BOOL bRequired = TRUE;
		int iEqual = csDefn.Find('=');
		if ( iEqual > -1 )
		{
			csDefault = csDefn.Mid( iEqual + 1 );
			bRequired = FALSE;
		}

		// Make sure there is a value if required
		csArg.TrimLeft();
		csArg.TrimRight();
		if ( csArg.IsEmpty() && bRequired )
		{
			m_csSyntaxError.Format( "syntax: %s %s", m_parsedcommand.csCommand, m_parsedcommand.csArgDefns );
			m_parsedcommand.csService.Empty();
			break;
		}

		// Use default arg if none supplied by user
		if ( csArg.IsEmpty() )
			csArg = csDefault;

		// Add to arg array
		m_csaArgs.Add( csArg );

		// Add to parsed command string
		if ( m_csaArgs.GetSize() == 1 )
			m_csProcessedCommandLine += " ";
		else
			m_csProcessedCommandLine += ",";
		m_csProcessedCommandLine += csArg;
	}
}

CString CCommand::GetTimeDate()
{
	SYSTEMTIME systemtime;
	GetLocalTime( &systemtime );
	CString csTimeDate;
	csTimeDate.Format( "%02d:%02d:%02d %s",
		systemtime.wHour,
		systemtime.wMinute,
		systemtime.wSecond,
		// systemtime.wMilliseconds,
		CTime::GetCurrentTime().Format("%b %d")
		);
	return csTimeDate;
}

/////////////////////////////////////////////////////////////////////////////
// CCmdOutCtrl
//
// Don't forget AfxInitRichEdit() in App.InitInstance()
// or the app will just hang silently
//

CCmdOutCtrl::CCmdOutCtrl()
{
	m_bEraseBackground = FALSE;
	m_pCmd = NULL;
	SetFontFace();
}

void CCmdOutCtrl::SetFontFace( CString csFaceName )
{
	if ( csFaceName.IsEmpty() )
		m_csFaceName = "MS Sans Serif";
	else
		m_csFaceName = csFaceName;
}

CCmdOutCtrl::~CCmdOutCtrl()
{
}

#define ID_RUN_SELECTION 33000
#define ID_COPY_TOCMDENTRY 33001
#define ID_COPY_SELECTION 33002

BEGIN_MESSAGE_MAP(CCmdOutCtrl, CRichEditCtrl)
	ON_COMMAND(ID_RUN_SELECTION, OnRunSelection)
	ON_COMMAND(ID_COPY_TOCMDENTRY, OnCopyToCmdEntry)
	ON_COMMAND(ID_COPY_SELECTION, OnCopySelection)
	//{{AFX_MSG_MAP(CCmdOutCtrl)
	ON_WM_SYSCOLORCHANGE()
	ON_WM_ERASEBKGND()
	ON_WM_RBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CCmdOutCtrl::OnSysColorChange() 
{
	CRichEditCtrl::OnSysColorChange();
	SetBackgroundColor( FALSE, GetSysColor(COLOR_BTNFACE) );
}

BOOL CCmdOutCtrl::OnEraseBkgnd(CDC* pDC) 
{
	if ( ! 	m_bEraseBackground )
	{
		SetBackgroundColor( FALSE, GetSysColor(COLOR_BTNFACE) );
		SetTargetDevice(NULL, 0);
		m_bEraseBackground = TRUE;
	}

	return CRichEditCtrl::OnEraseBkgnd(pDC);
}

void CCmdOutCtrl::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// Make sure there is a selection
	DWORD dwHit = SendMessage( EM_CHARFROMPOS, 0, (LPARAM)&point );
	WORD nChar = LOWORD( dwHit );
	long nStartChar, nEndChar;
	GetSel( nStartChar, nEndChar );
	if ( GetSelText().IsEmpty() ||
		((nChar < nStartChar || nChar > nEndChar ) && (nChar > 0 || nChar > -1)) )
	{
		int nLine = LineFromChar( nChar );
		nStartChar = LineIndex( nLine );
		nEndChar = GetLineCount() > nLine + 1? LineIndex(nLine+1)-1: -1;
		SetSel( nStartChar, nEndChar );
	}
	SetFocus();

	// Make popup menu
	CMenu menu;
	menu.CreatePopupMenu();
	menu.AppendMenu( MF_STRING, ID_RUN_SELECTION, "&Run" );
	menu.AppendMenu( MF_STRING, ID_COPY_TOCMDENTRY, "Copy to Command &Entry" );
	menu.AppendMenu( MF_STRING, ID_COPY_SELECTION, "&Copy" );
	ClientToScreen(&point);
	menu.TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
}

void CCmdOutCtrl::OnRunSelection()
{
	OnCopyToCmdEntry();
	if ( m_pCmd && m_pCmd->m_pDo )
	{
		// Simulate clicking of Do button
		int idDo = m_pCmd->m_pDo->GetDlgCtrlID();
		m_pCmd->m_pWnd->PostMessage( WM_COMMAND, idDo, BN_CLICKED );
	}
}

void CCmdOutCtrl::OnCopyToCmdEntry()
{
	if ( m_pCmd && m_pCmd->m_pIn )
	{
		// Copy text to the command input control, and set focus there
		m_pCmd->m_pIn->SetCommandText( GetSelText() );
		m_pCmd->m_pIn->SetFocus();
	}
}

void CCmdOutCtrl::OnCopySelection()
{
	Copy();
}

void CCmdOutCtrl::Output( CString csOut, int nEffect, CString* pcsRolledOver )
{
	// Create csCRLF line by line to convert \n to \r\n
	// And add crlf at the end
	CString csCRLF;
	CString csLine = csOut.SpanExcluding( "\n" );
	while ( csOut.GetLength() )
	{
		// Extract csLine from csOut
		int iNextLine = csLine.GetLength() + 1;
		if ( iNextLine >= csOut.GetLength() )
			csOut.Empty(); // last line
		else
			csOut = csOut.Mid( iNextLine );

		// Fix ending of line
		if ( csLine.GetLength() && csLine.Right(1) != '\r' )
			csLine += '\r';
		csLine += '\n';
		csCRLF += csLine;
		csLine = csOut.SpanExcluding( "\n" );
	}

	// Clear output after roll-over limit of chars
	const int nRollOverChar = 25000;
	long nStartChar, nEndChar;
	if ( ::IsWindow(m_hWnd) )
	{
		// Query formatting the first time
		static CHARFORMAT format;
		static BOOL bFirstCheck = FALSE;
		static LONG yInitialHeight;
		static LONG yStandardHeight;
		if ( ! bFirstCheck )
		{
			format.cbSize = sizeof(CHARFORMAT);
			format.dwMask = CFM_SIZE;
			GetDefaultCharFormat( format );
			yInitialHeight = format.yHeight;
			yStandardHeight = format.yHeight * 5 / 4;
			bFirstCheck = TRUE;
		}

		// Set selection for inserting text
		SetSel( nRollOverChar,-1 );
		GetSel( nStartChar, nEndChar );
		if ( nStartChar >= nRollOverChar )
		{
			// roll-over
			SetSel( 0,-1 );
			if ( pcsRolledOver )
				GetWindowText( *pcsRolledOver );
			csCRLF = "\r\nreached max output\r\n" + csCRLF;
		}

		// Set char formatting
		format.cbSize = sizeof(CHARFORMAT);
		format.dwMask = CFM_BOLD | CFM_SIZE | CFM_ITALIC | CFM_UNDERLINE | CFM_FACE;
		format.dwEffects = 0;
		format.yHeight = yStandardHeight;
		strcpy( format.szFaceName, m_csFaceName );
		if ( nEffect & Bold )
			format.dwEffects |= CFE_BOLD;
		if ( nEffect & Underline )
			format.dwEffects |= CFE_UNDERLINE;
		if ( nEffect & Italic )
			format.dwEffects |= CFE_ITALIC;
		if ( nEffect & Large )
			format.yHeight = yStandardHeight * 7 / 4;
		if ( nEffect & Small )
			format.yHeight = yStandardHeight * 2 / 3;
		SetSelectionCharFormat( format );

		// Insert text
		ReplaceSel( csCRLF );

		// Scroll so most recent text is in view
		// Start at top visible line and find last visible line
		CRect rect;
		GetRect( &rect );
		if ( rect.Width() > 20 )
		{
			int nLineCount = GetLineCount();
			int nLine = GetFirstVisibleLine();
			while ( nLine < nLineCount )
			{
				long lChar = LineIndex( nLine );
				if ( GetCharPos( lChar ).y > rect.bottom - 10 )
					break;
				nLine++;
			}
			LineScroll( nLineCount - nLine );
		}
	}
}

void CCmdOutCtrl::OutputHelp( CString csCommand, const char* szaCommandDefns[] )
{
	// Output help directly to the control
	// If csCommand is *, show help on all commands in aCommandDefns
	BOOL bAll = csCommand == "*";
	int iCmd = 0;
	CString csServiceHeading;
	for ( iCmd = 0; szaCommandDefns[iCmd][0]; ++iCmd )
	{
		CCommand::ParsedCommand parsed;
		CCommand::ParseCommandDefn( szaCommandDefns[iCmd], &parsed );
		if ( bAll || csCommand == parsed.csCommand || csCommand == parsed.csService )
		{
			// Service heading if needed
			if ( parsed.csService != csServiceHeading )
			{
				csServiceHeading = parsed.csService;
				CString csServiceTitle;
				csServiceTitle.Format( "%s commands\n", csServiceHeading );
				Output( csServiceTitle, Underline );
			}

			// Line containing syntax and description
			CString csLine,csDescription;
			if ( ! parsed.csDescription.IsEmpty() )
				csDescription.Format( " (%s)", parsed.csDescription );
			csLine.Format( "%s %s%s", parsed.csCommand, parsed.csArgDefns, csDescription );
			Output( csLine );
		}
	}
}

/////////////////////////////////////////////////////////////////////////////
// CCmdInCtrl

CCmdInCtrl::CCmdInCtrl()
{
	m_pCmd = NULL;
	m_nLines = 1;
}

CCmdInCtrl::~CCmdInCtrl()
{
}

BEGIN_MESSAGE_MAP(CCmdInCtrl, CEdit)
	//{{AFX_MSG_MAP(CCmdInCtrl)
	ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CCmdInCtrl::CheckLines() 
{
	int nPrevNewLines = m_nLines;
	m_nLines = GetLineCount();
	if ( nPrevNewLines != m_nLines && m_pCmd )
		m_pCmd->Resize();
}

void CCmdInCtrl::OnChange() 
{
	CheckLines();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆一精品一av一免费| 欧美在线视频日韩| 国产一区二区三区四| 日本麻豆一区二区三区视频| 天涯成人国产亚洲精品一区av| 一区av在线播放| 亚洲精品自拍动漫在线| 一区二区三区在线免费| 一区二区三区美女视频| 一区二区三区在线视频免费观看| 亚洲人精品午夜| 亚洲三级在线观看| 一区二区三区在线不卡| 亚洲午夜激情网站| 亚洲成人av在线电影| 天天影视色香欲综合网老头| 日韩vs国产vs欧美| 精品一区二区三区在线观看| 精品午夜久久福利影院| 国产黄人亚洲片| 成人动漫视频在线| 日本伦理一区二区| 91精品国产色综合久久| 精品国产污污免费网站入口 | 99精品视频在线免费观看| av成人免费在线| 在线免费观看日本欧美| 5月丁香婷婷综合| 久久久久久亚洲综合| 国产精品久久久久9999吃药| 亚洲乱码中文字幕| 日韩av一区二区在线影视| 狠狠色丁香久久婷婷综| 9i在线看片成人免费| 欧美性高清videossexo| 日韩一区二区三区在线视频| 国产亚洲婷婷免费| 一区二区三区国产豹纹内裤在线 | 欧美亚洲综合一区| 日韩一级大片在线观看| 国产三级久久久| 亚洲愉拍自拍另类高清精品| 日韩高清不卡在线| 国产在线观看免费一区| 在线中文字幕不卡| 日韩精品一区二区三区视频在线观看 | 麻豆精品新av中文字幕| jizz一区二区| 欧美一区日韩一区| 国产精品免费人成网站| 日韩极品在线观看| 岛国精品一区二区| 91精品国产手机| 亚洲欧洲成人自拍| 麻豆精品一区二区| 欧美性受xxxx| 国产亚洲美州欧州综合国| 亚洲丰满少妇videoshd| 成人夜色视频网站在线观看| 欧美日韩黄色一区二区| 中文字幕永久在线不卡| 蜜臀精品一区二区三区在线观看| 99精品国产99久久久久久白柏| 日韩欧美国产午夜精品| 一区二区在线观看免费视频播放| 激情综合色播激情啊| 欧美性猛片xxxx免费看久爱| 国产亚洲综合在线| 视频一区国产视频| 91理论电影在线观看| 精品久久久三级丝袜| 亚洲资源中文字幕| 成人免费毛片a| 日韩久久久精品| 亚洲自拍偷拍图区| 不卡一区二区三区四区| 久久久国产午夜精品| 美女脱光内衣内裤视频久久影院| 91激情五月电影| 国产精品久久久久久久久免费相片 | 亚洲一区二区三区爽爽爽爽爽| 国产成人a级片| 亚洲精品一区在线观看| 日韩精品一级中文字幕精品视频免费观看 | 色吊一区二区三区| 国产精品青草久久| 国产高清无密码一区二区三区| 日韩一区二区三区在线观看| 亚洲国产精品尤物yw在线观看| 91免费观看视频在线| 国产精品久久久久9999吃药| 国产一区二区三区av电影| 91麻豆精品国产91久久久久久| 亚洲成人综合在线| 在线观看免费成人| 亚洲激情在线激情| 色就色 综合激情| 亚洲欧美另类图片小说| 99r精品视频| 1区2区3区精品视频| 99re8在线精品视频免费播放| 国产精品亲子伦对白| 国产高清在线精品| 国产精品三级在线观看| 不卡一区在线观看| 日韩伦理av电影| 色综合久久天天| 亚洲综合在线电影| 欧美日韩一区二区三区在线| 亚洲成人免费在线观看| 欧美日韩精品一区二区| 日韩国产在线观看一区| 777奇米成人网| 美国欧美日韩国产在线播放| 欧美成人a在线| 国产精品一级黄| 久久久久九九视频| 337p粉嫩大胆色噜噜噜噜亚洲 | 99久久99久久久精品齐齐| 亚洲视频一区二区在线观看| 91网上在线视频| 亚洲第一激情av| 欧美xxxxxxxxx| 国产精品99久久久久久似苏梦涵 | 日韩一区二区三区精品视频| 经典三级一区二区| 中文字幕精品在线不卡| 91麻豆免费看片| 午夜亚洲国产au精品一区二区| 91精品啪在线观看国产60岁| 麻豆成人综合网| 久久这里只精品最新地址| 成人黄色国产精品网站大全在线免费观看 | 中文字幕欧美日本乱码一线二线 | 亚洲欧洲色图综合| 欧美日韩成人综合天天影院| 久久er99热精品一区二区| 国产喷白浆一区二区三区| 91亚洲午夜精品久久久久久| 丝袜美腿成人在线| 久久久噜噜噜久久中文字幕色伊伊| 波多野结衣一区二区三区| 亚洲成人免费视频| www久久精品| 一本一道波多野结衣一区二区| 水野朝阳av一区二区三区| 久久综合资源网| 91精品福利在线| 经典三级一区二区| 亚洲精品国产高清久久伦理二区| 91精品国产色综合久久久蜜香臀| 丁香桃色午夜亚洲一区二区三区| 亚洲亚洲人成综合网络| 2023国产精品视频| 色噜噜狠狠一区二区三区果冻| 麻豆成人av在线| 亚洲免费在线播放| 欧美精品一区二区在线播放| 日本道色综合久久| 国产自产高清不卡| 亚洲高清免费视频| 中国色在线观看另类| 欧美一区二区在线看| 91亚洲国产成人精品一区二区三 | 99精品热视频| 美女免费视频一区二区| 一个色妞综合视频在线观看| 久久影院午夜论| 欧美人伦禁忌dvd放荡欲情| 成人性生交大片免费看视频在线| 美女诱惑一区二区| 亚洲第一福利视频在线| 1区2区3区国产精品| 久久久久国产精品免费免费搜索| 欧美精品丝袜久久久中文字幕| 91丨九色丨国产丨porny| 激情综合一区二区三区| 日韩不卡在线观看日韩不卡视频| 亚洲人成小说网站色在线| 久久综合999| 日韩三级免费观看| 欧美日韩中文一区| 97aⅴ精品视频一二三区| 国产精品系列在线播放| 美女脱光内衣内裤视频久久网站| 亚洲综合色自拍一区| 国产精品国产自产拍高清av| ww久久中文字幕| 欧美一区二区三区的| 欧美亚洲禁片免费| 91视频在线观看| av亚洲精华国产精华| 国产69精品久久777的优势| 亚洲最新视频在线观看| 精品国产污网站| 欧美一级一区二区| 在线不卡a资源高清| 欧美视频三区在线播放| 91麻豆国产精品久久| 成人在线视频首页|