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

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

?? syneditview.cpp

?? 一個源代碼管理工具,支持懸浮框拖曳,后臺數據庫管理,代碼高亮顯示燈功能
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
////////////////////////////////////////////////////////////
//	文件:		SynEditView.cpp
//	版本:		1.0.0.1
//	創建:		2002年1月23日
//
//	作者:		鄭旭
//  Website:	http://www.easysrc.com
//	E-mail:		happyfly@netease.com
//
//	CSynEditView語法編輯視實現代碼
//
//	你可以自由使用或是改變CSynEditView的代碼以適應你的需要,
//	但是請保留這段文字。
////////////////////////////////////////////////////////////

/*-----------------------------------------------------------------
|                                                                 |
|    設計思路 :                                                   |
|    假設 SynCtrl 即是隱藏在 CRichEditView 后面可以用             |
|    GetRichEditCtrl  函數取得的控制。 SynEditView 可看作覆蓋在   |
|    SynCtrl  表面的一層不透明的畫布,在程序中我們自己作畫,再將  |
|    畫出來的內容覆蓋在 SynCtrl 表面,即可作成語法關鍵字編輯效果  |
|    。雖然在程序中重載 OnPaint 函數但不作任何操作帶來的后果是    |
|    SynCtrl  不再重畫,但是隱藏在 SynCtrl 后面的內容仍然存在,   |
|    我們可以通過 GetLine 取得其文本信息,也可以通過 GetFont 取   |
|    得其字體信息!我們可以取出這些信息進行加工,再將加工后的東   |
|    西顯示出來。通過仔細的調整各個參數,使得畫出來的東西與不重   |
|    載SynCtrl 的 OnPaint 函數前 SynCtrl 畫出來的東西完全重合,   |
|    但只是把其中是關鍵字的部分進行著色,即可達到完美的語法編程   |
|    器的效果。                                                   |
|                                                                 |
-----------------------------------------------------------------*/


#include "stdafx.h"
#include <malloc.h>

#include "SynEditView.h"
#include "Mainfrm.h"


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

DWORD CALLBACK EditStreamCallbackReadFromFile(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
DWORD CALLBACK EditStreamCallbackWriteToFile(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
DWORD CALLBACK EditStreamCallbackOut(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);

/////////////////////////////////////////////////////////////////////////////
// CSynEditView

IMPLEMENT_DYNCREATE(CSynEditView, CRichEditView)

BEGIN_MESSAGE_MAP(CSynEditView, CRichEditView)
//{{AFX_MSG_MAP(CSynEditView)
ON_WM_SIZE()
ON_WM_CREATE()
ON_WM_DESTROY()
ON_WM_HSCROLL()
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
	ON_WM_KEYUP()
	ON_WM_VSCROLL()
	ON_WM_PAINT()
	ON_WM_SETFOCUS()
	ON_WM_CHAR()
	//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRichEditView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRichEditView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRichEditView::OnFilePrintPreview)
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CSynEditView construction/destruction

CSynEditView::CSynEditView()
{
	ReadSettings();	

	m_nLineNumberCharNumber = 0;
	m_nLineCount = 0;
	m_nCharTabWidth = 1;
	m_nCharSpaceWidth = 1;
	m_nParseArraySize = 0;
	m_nHorzPos = 0;
	m_nCharNumberWidth = 1;
	m_nLineHeight = 17;
	m_nLeftMargin = 1;
	m_nCurrentLine = 0;
	m_bAllowDraw = TRUE;
	m_bRealReturn = TRUE;
	m_nDefaultLeftMargin = 0;

	m_nBookMarksCount = 0;

	m_bTrack = FALSE;
	m_pdwParseCookies = NULL;
	m_rcClient = NULL;
	m_pCacheBitmap = NULL;

	memset(anBookMarks, 0, sizeof(int)*256);

	m_nHorzMaxOld = 0;
}

CSynEditView::~CSynEditView()
{
	if (m_pCacheBitmap != NULL)
		delete m_pCacheBitmap;
	
	if (m_pdwParseCookies != NULL)
		delete m_pdwParseCookies;
}

BOOL CSynEditView::PreCreateWindow(CREATESTRUCT& cs)
{
//*
	if (LoadLibraryA("RICHED20.DLL") == NULL)
	{
		AfxMessageBox(_T("Fail to load \"riched20.dll\"."),
			MB_OK | MB_ICONERROR);
		PostMessage(WM_QUIT,0,0);
	}
	m_strClass = RICHEDIT_CLASSA;	//for 2.0 class 	
//*/
	return CRichEditView::PreCreateWindow(cs);
}

void CSynEditView::OnInitialUpdate()
{
	CRichEditView::OnInitialUpdate();

	// Set the printing margins (720 twips = 1/2 inch).
	SetMargins(CRect(1000, 800, 800, 800));

	ResetParseCookie();
	
	SelectLanguage(m_nLanguage);

	GetRichEditCtrl().HideSelection(TRUE, FALSE);
	SetWrapMode(m_nWrapMode);
	GetRichEditCtrl().SetReadOnly(m_bReadOnly); 

	SendMessage(EM_SETUNDOLIMIT, m_nUndoLimits, 0);
  	SetAutoWordSelect(m_bAutoWordSelect);
	
	CSynEditView::m_nWordWrap = m_nWrapMode;
	CSynEditView::WrapChanged(); 

	ResetParseCookie();

	if(m_nWrapMode == WrapNone)
		GetRichEditCtrl().ShowScrollBar(SB_HORZ, TRUE); 
	else
		GetRichEditCtrl().ShowScrollBar(SB_HORZ, FALSE); 

	InitEditorFont();

	PostMessage( WM_PAINT, 0, 0 );
}

/////////////////////////////////////////////////////////////////////////////
// CSynEditView printing

BOOL CSynEditView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}


/////////////////////////////////////////////////////////////////////////////
// CSynEditView diagnostics

#ifdef _DEBUG
void CSynEditView::AssertValid() const
{
	CRichEditView::AssertValid();
}

void CSynEditView::Dump(CDumpContext& dc) const
{
	CRichEditView::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSynEditView message handlers

void CSynEditView::LoadFile(CString strFile)
{
	SetWindowText(_T(""));
	ResetParseCookie();		
	SetSynEditViewFont(m_lf);
	
	CRichEditCtrl &SynCtrl = GetRichEditCtrl();	

	CFile* pInputFile = NULL;
	try
	{
		pInputFile = new CFile(strFile, CFile::modeRead | CFile::shareDenyNone);
		
		EDITSTREAM strm;
		strm.dwCookie = (DWORD) pInputFile;
		strm.pfnCallback = EditStreamCallbackReadFromFile;
		
		long lResult = SynCtrl.StreamIn(SF_TEXT, strm);
		
		pInputFile->Close();
	}
	catch (CFileException* pEx)
	{
		pEx->Delete();
	}
	delete pInputFile;	

	SynCtrl.SetModify(FALSE);
	return;
}
 
//將文件中的內容裝入到richeditctrl中,正常工作
DWORD CALLBACK EditStreamCallbackReadFromFile(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
	CFile* pFile = (CFile*) dwCookie;
	ASSERT_KINDOF(CFile, pFile);

	*pcb = pFile->Read(pbBuff, cb);

	return 0;
}

//將richeditctrl中的內容寫入到文件中,正常工作
DWORD CALLBACK EditStreamCallbackWriteToFile(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
	CFile* pFile = (CFile*) dwCookie;
	
	pFile->Write(pbBuff, cb);
	*pcb = cb;
	
	return 0;
}

BOOL CSynEditView::IsFileExist(CString &strFile)
{
	if(strFile.IsEmpty())
		return FALSE;
	FILE *file;
	if((file=fopen(strFile, _T("r")))==NULL)
		return FALSE;
	fclose(file);
	return TRUE;
}

void CSynEditView::SetSynEditViewFont(LOGFONT lf)
{
	ResetParseCookie();
	SetSynCtrlFont(lf);
	WriteSettings();
}

void CSynEditView::SetSynCtrlFont(LOGFONT lf)
{
	ShowWindow(SW_HIDE);
		
	CString str;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&str;
	stream.pfnCallback = EditStreamCallbackOut;
	GetRichEditCtrl().StreamOut(SF_TEXT, stream);
	
	BOOL bModify = GetRichEditCtrl().GetModify();

	m_font.DeleteObject();
	m_font.CreateFontIndirect(&lf);
	//先設置視的字體
	SetFont(&m_font);
	m_lf = lf;

/*
	SetWindowText((" "));
	GetRichEditCtrl().SetSel(0, 1);
	CHARFORMAT cr = GetCharFormatSelection();
	//設置視的字體可能改變,所以還要取其字體,看真正的結果,用GetFont不管用
	m_lf.lfCharSet = cr.bCharSet;
	m_lf.lfHeight = cr.yHeight/14;
	strcpy(m_lf.lfFaceName, cr.szFaceName);		
//*/
	SetCharWidth();
	SetLineHeight();
	SetLeftMargin();

	WriteSettings();
	
	SetWindowText(str);
	GetRichEditCtrl().SetModify(bModify);
	ShowWindow(SW_SHOW); 
}


void CSynEditView::SetSynCtrlTabSize(int nSize)
{
	CRichEditCtrl &SynCtrl = GetRichEditCtrl();	

	CString str;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&str;
	stream.pfnCallback = EditStreamCallbackOut;
	SynCtrl.StreamOut(SF_TEXT, stream);

	//因為tab寬度一直是固定的,所以開始就取tab寬度
	//又因為要計算最開始tab相當于幾個數字寬,所以下面幾行必須放在上面一行之后
	//RichEditView開始時tab寬為一常數,即0.5英寸=720 points
	SynCtrl.SetWindowText(_T("\t")); 
	CPoint p1 = SynCtrl.GetCharPos(0);	
	CPoint p2 = SynCtrl.GetCharPos(1);
	m_nCharTabWidth = p2.x - p1.x; //取tab在字體m_lf下的以point表示的寬度

	//設置TAB間隔
	PARAFORMAT2 pf ;
	pf.cbSize = sizeof(PARAFORMAT);
	pf.dwMask = PFM_TABSTOPS ;
	pf.cTabCount = MAX_TAB_STOPS;
	SynCtrl.GetParaFormat( pf );
	int nSynCtrlTabSize = pf.rgxTabs[0];
	if(nSynCtrlTabSize == 0)
		nSynCtrlTabSize = 720;
	
	/*
	Tab的計算方法:
	1、先取SynCtrl默認的Tab寬度nSynCtrlTabSize(用英寸表示)
	2、計算SynCtrl默認的Tab寬度對應幾個數字m_nCharTabWidth / m_nCharNumberWidth
	2、根據以上值計算每個數字的寬度nSynCtrlTabSize / (m_nCharTabWidth / m_nCharNumberWidth)
	3、根據每個數字的寬度計算新的Tab寬度
	*/

	SetWindowText(""); //此行不能刪除,不然設置tab寬度會失敗

	int nNewTab = int(nSynCtrlTabSize * 1.0 * nSize * m_nCharNumberWidth / m_nCharTabWidth);

	pf.cTabCount = MAX_TAB_STOPS;
	pf.dwMask = PFM_TABSTOPS;
	for(int itab = 0; itab < pf.cTabCount; itab++ )
		pf.rgxTabs[itab] = (itab+1) * nNewTab ;
	SetParaFormat( pf );

	m_nTabSize = nSize;	

	m_nCharTabWidth = nSize * m_nCharNumberWidth;

	WriteSettings();

	SetWindowText(str);
}

void CSynEditView::OnSize(UINT nType, int cx, int cy) 
{
	CRichEditView::OnSize(nType, cx, cy);

	GetClientRect(&m_rcClient);
	
	if (m_pCacheBitmap != NULL)
	{
		delete m_pCacheBitmap;
		m_pCacheBitmap = NULL;
	}

	SetLeftMargin();

	PostMessage(WM_PAINT, 0, 0);
}

void CSynEditView::LoadText(CString &strText)
{
	ResetParseCookie();
	
	SetSynEditViewFont(m_lf);

	SetWindowText(strText);	
	GetRichEditCtrl().SetModify( FALSE ); 
}


void CSynEditView::DrawSingleLineColorText( CDC *cacheDC, int nLine, CRect rcLine)
{
	COLORREF clrBkColor = m_clrBkColor;
	CRect rtSrc(rcLine);
	//顯示當前行
	if(m_bShowSelectLine) {
		if(nLine == m_nCurrentLine && m_ptStart == m_ptEnd) 
			clrBkColor = m_clrBkCurLine;
		else
			clrBkColor = m_clrBkColor;
		cacheDC->FillSolidRect(rcLine, clrBkColor);
	}	
	////////////
	
	CFont cf;
	cf.CreateFontIndirect(&m_lf);
	CFont *pOldFont = cacheDC->SelectObject(&cf);
	
	CString  strLine;
	BOOL bRealReturn = GetLineString(nLine, strLine); //取指定行文本,并返回是否為硬回車標志

	int nLength = strLine.GetLength(); 
	
	int nActualItems = 0;
	COLORINFO *ColorInfo = (COLORINFO *)_alloca( sizeof(COLORINFO) * (nLength + 1) );	
	DWORD dwCookie = GetParseCookie(nLine-1);
	CString str;
	if( m_bRealReturn && (m_nLanguage != _HTML) && (m_nLanguage != _XML))
		dwCookie &= COOKIE_EXT_COMMENT; 
	m_bRealReturn = bRealReturn;
	dwCookie = ParseLine(m_strArrayKeyWords, dwCookie, strLine, ColorInfo, nActualItems);
	m_pdwParseCookies[nLine] = dwCookie;
	
	COLORREF clr;
	CSize sizeContinueStr(0, 0);
	int nlen, nTabCount = 0;

	if (nActualItems > 0)
	{
		ASSERT(ColorInfo[0].Pos >= 0 && ColorInfo[0].Pos <= nLength);
		for (int I = 0; I < nActualItems; I ++)
		{
			nlen = ColorInfo[I + 1].Pos - ColorInfo[I].Pos;
			if( I == nActualItems - 1 )
				str = strLine.Mid(ColorInfo[I].Pos, strLine.GetLength() - ColorInfo[I].Pos);
			else
				str = strLine.Mid(ColorInfo[I].Pos, nlen);

			if(str.IsEmpty())
				continue;

			clr = GetColor(ColorInfo[I].Color);

			int nPos = str.Find(_T("\t"));
			while(-1 != nPos)
			{
				//遇到一個tab字符時,先將前面的字符畫出來
				CString strTemp = str.Left(nPos);
				JudgeInSeletioAndDrawText( cacheDC, rcLine, strTemp, clrBkColor, clr );
				
				CSize sizeTemp = cacheDC->GetTextExtent(strTemp);

				nTabCount += 1; //既然找到了tab,那么就加1吧
				//把前面已經輸出的字符串寬度換算成相應的tab個數
				nTabCount += int((sizeTemp.cx+sizeContinueStr.cx) / m_nCharTabWidth);

				int nOldLeft = rcLine.left;
				//然后直接定位到下一個tab位置
				rcLine.left = rtSrc.left + nTabCount * m_nCharTabWidth;
				
				//開始畫tab////////////////////////
				BOOL bLeftInSel = IsStrInSelection(nOldLeft, rcLine.top, TRUE);
				BOOL bRightInSel = IsStrInSelection(rcLine.left, rcLine.top, FALSE);
				if(bLeftInSel && bRightInSel)
				{
					//如果tab在選擇區域內,則要畫背景
					CRect rtTab(nOldLeft, rcLine.top, rcLine.left, rcLine.bottom);
					cacheDC->FillSolidRect( &rtTab, m_clrBKSelText ); 
				}

				if(m_bShowTab)
				{					
					int nleft = nOldLeft;
					int nCenterY = rcLine.top + (rcLine.bottom-rcLine.top)/2;
					for(int pos=1; pos<4; pos++)
					{
						cacheDC->SetPixel( nleft + pos + 0,  pos + nCenterY - 4, m_clrTab );
						cacheDC->SetPixel( nleft + pos + 3,  pos + nCenterY - 4, m_clrTab );
						cacheDC->SetPixel( nleft + pos + 0, -pos + nCenterY + 2, m_clrTab );
						cacheDC->SetPixel( nleft + pos + 3, -pos + nCenterY + 2, m_clrTab );
					}
				}
				//////////////////////////////////////

				str = str.Right(str.GetLength()-nPos-1);
				nPos = str.Find(_T("\t"));

				//重置輸出字符串寬度
				sizeContinueStr.cx = 0;
			}

			JudgeInSeletioAndDrawText( cacheDC, rcLine, str, clrBkColor, clr );
			//保存已輸出的字符中寬度
			CSize sizeTemp = cacheDC->GetTextExtent(str);
			sizeContinueStr += sizeTemp;
		}
	}
	
	if(m_bShowReturnLineToken)
		DrawReturnLineToken( m_bRealReturn, cacheDC, rcLine );

		//顯示下劃線
	if(m_bShowUnderLine) {	
		CPen NewPen(PS_SOLID, 1, m_clrUnderLine);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜寂寞影院| 亚洲一区二区视频在线观看| 中文字幕欧美一| 日本亚洲视频在线| 91一区二区在线| 欧美精品一区二区三区高清aⅴ| 有码一区二区三区| www.66久久| 欧美一二三区在线观看| 一区二区三区四区乱视频| 国产精品主播直播| 日韩欧美国产系列| 亚洲最大成人综合| 99国产精品久久久久久久久久久 | 日产精品久久久久久久性色| av在线综合网| 国产精品久久毛片a| 韩国av一区二区三区在线观看| 777亚洲妇女| 亚洲线精品一区二区三区八戒| 91在线porny国产在线看| 久久精品免费在线观看| 久久精品99国产国产精| 91精品午夜视频| 亚洲高清免费视频| 在线观看国产日韩| 一区二区三区日韩欧美精品| 成人av一区二区三区| 久久精品人人做| 国产成人8x视频一区二区| 26uuu国产电影一区二区| 久久成人av少妇免费| 欧美不卡一二三| 激情av综合网| 国产三级精品三级在线专区| 国产一区二区三区免费播放| 久久久精品免费免费| 国产成人免费视频一区| 欧美激情在线看| 色综合天天狠狠| 2022国产精品视频| 亚洲同性gay激情无套| 成人一区在线看| 欧美精品1区2区3区| 亚洲一区自拍偷拍| 欧美亚洲国产一区二区三区va| 亚洲激情五月婷婷| 欧美男人的天堂一二区| 日本不卡不码高清免费观看| 久久综合九色综合欧美98 | 日韩美女视频在线| 免费欧美在线视频| 久久亚洲二区三区| 91丨国产丨九色丨pron| 一区二区三区av电影| 欧美猛男男办公室激情| 美女视频网站黄色亚洲| 中文欧美字幕免费| 欧洲国内综合视频| 麻豆国产精品官网| 国产精品丝袜一区| 欧美美女一区二区| 国产在线播精品第三| 亚洲美女免费在线| 日韩美女在线视频| 色婷婷精品久久二区二区蜜臀av | 亚洲在线观看免费| 日韩欧美成人激情| 99麻豆久久久国产精品免费| 日韩一区欧美二区| 国产精品久久久一区麻豆最新章节| 欧美性受极品xxxx喷水| 国产在线精品不卡| 亚洲成人综合视频| 中文在线一区二区| 91精品国产综合久久久久久久| 粉嫩高潮美女一区二区三区| 午夜精品在线看| 中文字幕精品一区二区三区精品| 欧美色图免费看| 99久久综合国产精品| 蜜臀久久99精品久久久久宅男 | 久久久久九九视频| 欧美日韩一级黄| 成人污污视频在线观看| 日韩av网站免费在线| 亚洲美女免费在线| 欧美国产精品一区| 日韩精品最新网址| 一本一道久久a久久精品综合蜜臀| 麻豆一区二区99久久久久| 国产精品日韩精品欧美在线| 日韩精品一区国产麻豆| 欧美视频在线一区二区三区| 日韩欧美一级二级三级| 欧美在线观看视频一区二区三区| 男人的天堂亚洲一区| 亚洲电影中文字幕在线观看| 中文欧美字幕免费| 国产亚洲一本大道中文在线| 欧美一区二区日韩| 91香蕉视频mp4| 国产美女久久久久| 九九九久久久精品| 婷婷开心久久网| 日韩欧美国产一区在线观看| 99精品黄色片免费大全| 午夜视频在线观看一区二区三区| 国产精品成人一区二区艾草| 欧美mv日韩mv国产| 日韩欧美国产一二三区| 日韩午夜激情视频| 欧美一二三在线| 欧美大片日本大片免费观看| 欧美一区二区三区在线视频| 欧美日韩精品一区二区在线播放| 91九色02白丝porn| 欧美性感一区二区三区| 91久久国产最好的精华液| 91九色02白丝porn| 欧洲精品在线观看| 欧美日韩不卡一区| 欧美一区二区三区喷汁尤物| 精品欧美一区二区久久| 欧美v日韩v国产v| 久久久www成人免费毛片麻豆| 久久久久综合网| 国产精品麻豆一区二区| 一区二区三区小说| 天天综合网天天综合色| 蜜桃久久精品一区二区| 国产精品123区| 97精品国产97久久久久久久久久久久| 99国产精品久久| 欧美日韩一级片网站| 日韩精品一区二区三区视频在线观看| 精品久久久久久久久久久院品网 | 最新高清无码专区| 亚洲一级不卡视频| 毛片基地黄久久久久久天堂| 国产伦理精品不卡| 91在线精品一区二区| 欧美日韩国产系列| 2023国产精品| 一区二区三区四区国产精品| 天天操天天色综合| 国产成人超碰人人澡人人澡| 99精品国产一区二区三区不卡| 欧美在线观看一区| 久久久久久一二三区| 亚洲欧美一区二区不卡| 日韩av中文在线观看| thepron国产精品| 欧美顶级少妇做爰| 中文字幕欧美一| 久久精品国产一区二区| 激情综合色播激情啊| 99免费精品在线观看| 欧美一级黄色片| 亚洲精品中文在线| 国产一区二区三区观看| 日本韩国欧美一区二区三区| 久久先锋影音av鲁色资源网| 亚洲第一福利一区| 成人av电影在线| 日韩精品一区在线| 亚洲超碰精品一区二区| 国产福利一区二区三区视频在线| 欧美视频第二页| 亚洲色图欧洲色图| 盗摄精品av一区二区三区| 91精品麻豆日日躁夜夜躁| 亚洲视频你懂的| 国产suv精品一区二区三区| 欧美日韩午夜在线视频| 国产精品久久久久影院亚瑟 | 99久久er热在这里只有精品66| 欧美精品丝袜久久久中文字幕| 国产精品美女一区二区| 五月婷婷色综合| 91蜜桃免费观看视频| 久久精品无码一区二区三区| 日韩高清在线一区| 在线欧美日韩精品| 亚洲品质自拍视频| 99久久国产综合精品麻豆| 26uuu色噜噜精品一区二区| 蜜臀av性久久久久av蜜臀妖精| 91国偷自产一区二区使用方法| 国产日韩欧美精品电影三级在线| 免费看欧美美女黄的网站| 欧美午夜宅男影院| 一区二区三区精品视频| 91老师片黄在线观看| 国产精品久久三| 99国产精品视频免费观看| 欧美韩国日本不卡| 成人激情图片网| 国产精品美女久久久久高潮| 国产精一区二区三区|