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

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

?? pictureex.cpp

?? 關于ADO的數據庫操作 數據庫采用ACEESS數據庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
{
	UINT nRet = 0;
	UINT nCurOffset = nStartingOffset;
	
	while (m_pRawData[nCurOffset] != 0)
	{
		nRet += m_pRawData[nCurOffset]+1;
		nCurOffset += m_pRawData[nCurOffset]+1;
	};

	return nRet+1;
}

enum CPictureEx::GIFBlockTypes CPictureEx::GetNextBlock() const
{
	switch(m_pRawData[m_nCurrOffset])
	{
	case 0x21:
	// extension block
		switch(m_pRawData[m_nCurrOffset+1])
		{
		case 0x01:
		// plain text extension
			return BLOCK_PLAINTEXT;
			break;

		case 0xF9:
		// graphic control extension
			return BLOCK_CONTROLEXT;
			break;

		case 0xFE:
		// comment extension
			return BLOCK_COMMEXT;
			break;

		case 0xFF:
		// application extension
			return BLOCK_APPEXT;
			break;
		};
		break;
	
	case 0x3B:
	// trailer
		return BLOCK_TRAILER;
		break;

	case 0x2C:
	// image data
		return BLOCK_IMAGE;
		break;
	};

	return BLOCK_UNKNOWN;
}

BOOL CPictureEx::SkipNextBlock()
{
	if (!m_pRawData) return FALSE;

	int nLen = GetNextBlockLen();
	if ((nLen <= 0) || ((m_nCurrOffset+nLen) > m_nDataSize))
		return FALSE;

	m_nCurrOffset += nLen;
	return TRUE;
}

int CPictureEx::GetNextBlockLen() const
{
	GIFBlockTypes nBlock = GetNextBlock();

	int nTmp;

	switch(nBlock)
	{
	case BLOCK_UNKNOWN:
		return -1;
		break;

	case BLOCK_TRAILER:
		return 1;
		break;

	case BLOCK_APPEXT:
		nTmp = GetSubBlocksLen(m_nCurrOffset+sizeof(TGIFAppExtension));
		if (nTmp > 0)
			return sizeof(TGIFAppExtension)+nTmp;
		break;

	case BLOCK_COMMEXT:
		nTmp = GetSubBlocksLen(m_nCurrOffset+sizeof(TGIFCommentExt));
		if (nTmp > 0)
			return sizeof(TGIFCommentExt)+nTmp;
		break;

	case BLOCK_CONTROLEXT:
		return sizeof(TGIFControlExt);
		break;

	case BLOCK_PLAINTEXT:
		nTmp = GetSubBlocksLen(m_nCurrOffset+sizeof(TGIFPlainTextExt));
		if (nTmp > 0)
			return sizeof(TGIFPlainTextExt)+nTmp;
		break;

	case BLOCK_IMAGE:
		TGIFImageDescriptor *pIDescr = 
			reinterpret_cast<TGIFImageDescriptor *> (&m_pRawData[m_nCurrOffset]);
		int nLCTSize = (int)
			(pIDescr->GetPackedValue(ID_PACKED_LOCALCT)*3*
			pow(2,pIDescr->GetPackedValue(ID_PACKED_LOCALCTSIZE)+1));

		int nTmp = GetSubBlocksLen(m_nCurrOffset+
			sizeof(TGIFImageDescriptor) + nLCTSize + 1);
		if (nTmp > 0)
			return sizeof(TGIFImageDescriptor) + nLCTSize + 1 + nTmp;
		break;
	};

	return 0;
}

UINT WINAPI CPictureEx::_ThreadAnimation(LPVOID pParam)
{
	ASSERT(pParam);
	CPictureEx *pPic = reinterpret_cast<CPictureEx *> (pParam);
	pPic->ThreadAnimation();

	// this thread has finished its work so we close the handle
	CloseHandle(pPic->m_hThread); 
	// and init the handle to zero (so that Stop() doesn't Wait on it)
	pPic->m_hThread = 0;
	return 0;
}

void CPictureEx::ThreadAnimation()
{
	int nTemp = 0;
	while (!m_bExitThread)
	{
		if (m_arrFrames[nTemp].m_pPicture)
		{
		///////////////////////////////////////////////////////
		// Before rendering a frame we should take care of what's 
		// behind that frame. TFrame::m_nDisposal will be our guide:
		//   0 - no disposal specified (do nothing)
		//   1 - do not dispose (again, do nothing)
		//   2 - restore to background color (m_clrBackground)
		//   3 - restore to previous

			//////// disposal method #3
			HDC hMemDC = NULL;
			HBITMAP hMemBM = NULL, hOldBM;

			if (m_arrFrames[nTemp].m_nDisposal == 3)
			{
				// prepare a memory DC and store the background in it
				hMemDC = CreateCompatibleDC(m_hMemDC);
				hMemBM = CreateCompatibleBitmap(m_hMemDC,
							m_arrFrames[nTemp].m_frameSize.cx,
							m_arrFrames[nTemp].m_frameSize.cy);
				
				if (hMemDC && hMemBM)
				{
					hOldBM = reinterpret_cast<HBITMAP> (SelectObject(hMemDC,hMemBM));
					BitBlt(hMemDC,0,0,
						m_arrFrames[nTemp].m_frameSize.cx,
						m_arrFrames[nTemp].m_frameSize.cy,
						m_hMemDC,
						m_arrFrames[nTemp].m_frameOffset.cx,
						m_arrFrames[nTemp].m_frameOffset.cy,
						SRCCOPY);
				};
			};
			///////////////////////

			long hmWidth;
			long hmHeight;
			m_arrFrames[nTemp].m_pPicture->get_Width(&hmWidth);
			m_arrFrames[nTemp].m_pPicture->get_Height(&hmHeight);

			if (m_arrFrames[nTemp].m_pPicture->Render(m_hMemDC, 
				m_arrFrames[nTemp].m_frameOffset.cx, 
				m_arrFrames[nTemp].m_frameOffset.cy, 
				m_arrFrames[nTemp].m_frameSize.cx, 
				m_arrFrames[nTemp].m_frameSize.cy, 
				0, hmHeight, hmWidth, -hmHeight, NULL) == S_OK)
			{
				Invalidate(FALSE);
			};
			
			if (m_bExitThread)
			{
				if (hMemDC)
				{
					// dispose local variables
					SelectObject(hMemDC,hOldBM);
					DeleteDC(hMemDC);
					DeleteObject(hMemBM);
				};
				break;
			};

			// if the delay time is too short (like in old GIFs), wait for 100ms
			if (m_arrFrames[nTemp].m_nDelay < 5) 
				WaitForSingleObject(m_hExitEvent, 100);
			else
				WaitForSingleObject(m_hExitEvent, 10*m_arrFrames[nTemp].m_nDelay);

			if (m_bExitThread)
			{
				if (hMemDC)
				{
					// dispose local variables
					SelectObject(hMemDC,hOldBM);
					DeleteDC(hMemDC);
					DeleteObject(hMemBM);
				};
				break;
			};

			// disposal method #2
			if (m_arrFrames[nTemp].m_nDisposal == 2)
			{
				HBRUSH hBrush = CreateSolidBrush(m_clrBackground);
				if (hBrush)
				{
					RECT rect = {
						m_arrFrames[nTemp].m_frameOffset.cx,
						m_arrFrames[nTemp].m_frameOffset.cy,
						m_arrFrames[nTemp].m_frameOffset.cx + m_arrFrames[nTemp].m_frameSize.cx,
						m_arrFrames[nTemp].m_frameOffset.cy + m_arrFrames[nTemp].m_frameSize.cy };
					FillRect(m_hMemDC,&rect,hBrush);
					DeleteObject(hBrush);
				};
			} 
			else
				if (hMemDC && (m_arrFrames[nTemp].m_nDisposal == 3) )
				{
					// put it back
					BitBlt(m_hMemDC,
						m_arrFrames[nTemp].m_frameOffset.cx,
						m_arrFrames[nTemp].m_frameOffset.cy,
						m_arrFrames[nTemp].m_frameSize.cx,
						m_arrFrames[nTemp].m_frameSize.cy,
						hMemDC,0,0, SRCCOPY);
					// dispose local variables
					SelectObject(hMemDC,hOldBM);
					DeleteDC(hMemDC);
					DeleteObject(hMemBM);
				};
		};
		nTemp++;
		if (nTemp == m_arrFrames.size())
		{
			nTemp = 0; 
		// init the screen for the first frame,
			HBRUSH hBrush = CreateSolidBrush(m_clrBackground);
			if (hBrush)
			{
				RECT rect = {0,0,m_PictureSize.cx,m_PictureSize.cy};
				FillRect(m_hMemDC,&rect,hBrush);
				DeleteObject(hBrush);
			};
		};
	};
}

void CPictureEx::Stop()
{
	m_bExitThread = TRUE;
	SetEvent(m_hExitEvent);
	if (m_hThread)
	{
		// we'll wait for 5 seconds then continue execution
		WaitForSingleObject(m_hThread,5000);
		CloseHandle(m_hThread);
		m_hThread = NULL;
	}

	// make it possible to Draw() again
	ResetEvent(m_hExitEvent);
	m_bExitThread = FALSE;
}

HGLOBAL CPictureEx::GetNextGraphicBlock(UINT *pBlockLen, 
	UINT *pDelay, SIZE *pBlockSize, SIZE *pBlockOffset, 
	UINT *pDisposal)
{
	if (!m_pRawData) return NULL;

	// GIF header + LSDescriptor [+ GCT] [+ Control block] + Data

	*pDisposal = 0;
	enum GIFBlockTypes nBlock;
	nBlock = GetNextBlock();

	while (
		(nBlock != BLOCK_CONTROLEXT) &&
		(nBlock != BLOCK_IMAGE) &&
		(nBlock != BLOCK_PLAINTEXT) &&
		(nBlock != BLOCK_UNKNOWN) &&
		(nBlock != BLOCK_TRAILER)
		)
	{
		if (!SkipNextBlock()) return NULL;
		nBlock = GetNextBlock();
	};

	if ((nBlock == BLOCK_UNKNOWN) ||
		(nBlock == BLOCK_TRAILER))
		return NULL;

	// it's either a control ext.block, an image or a plain text

	int nStart = m_nCurrOffset;
	int nBlockLen = GetNextBlockLen();

	if (nBlockLen <= 0) return NULL;

	if (nBlock == BLOCK_CONTROLEXT)
	{
		// get the following data
		TGIFControlExt *pControl = 
			reinterpret_cast<TGIFControlExt *> (&m_pRawData[m_nCurrOffset]);
		// store delay time
		*pDelay = pControl->m_wDelayTime;
		// store disposal method
		*pDisposal = pControl->GetPackedValue(GCX_PACKED_DISPOSAL);

		if (!SkipNextBlock()) return NULL;
		nBlock = GetNextBlock();
		
		// skip everything until we find data to display 
		// (image block or plain-text block)
		
		while (
			(nBlock != BLOCK_IMAGE) &&
			(nBlock != BLOCK_PLAINTEXT) &&
			(nBlock != BLOCK_UNKNOWN) &&
			(nBlock != BLOCK_TRAILER)
			)
		{
			if (!SkipNextBlock()) return NULL;
			nBlock = GetNextBlock();
			nBlockLen += GetNextBlockLen();
		};

		if ((nBlock == BLOCK_UNKNOWN) || (nBlock == BLOCK_TRAILER))
			return NULL;
		nBlockLen += GetNextBlockLen();
	}
	else
		*pDelay = -1; // to indicate that there was no delay value

	if (nBlock == BLOCK_IMAGE)
	{
		// store size and offsets
		TGIFImageDescriptor *pImage = 
			reinterpret_cast<TGIFImageDescriptor *> (&m_pRawData[m_nCurrOffset]);
		pBlockSize->cx = pImage->m_wWidth;
		pBlockSize->cy = pImage->m_wHeight;
		pBlockOffset->cx = pImage->m_wLeftPos;
		pBlockOffset->cy = pImage->m_wTopPos;
	};

	if (!SkipNextBlock()) return NULL;

	HGLOBAL hGlobal = GlobalAlloc(GMEM_FIXED,
		sizeof(TGIFHeader) +
		sizeof(TGIFLSDescriptor) +
		m_nGlobalCTSize +
		nBlockLen + 
		1);  // for the trailer

	if (!hGlobal) return NULL;

	int nOffset = 0; 

	// GMEM_FIXED means we get a pointer
	unsigned char *pGlobal = reinterpret_cast<unsigned char *> (hGlobal);

	CopyMemory(pGlobal,m_pRawData, 
		sizeof(TGIFHeader)+sizeof(TGIFLSDescriptor)+m_nGlobalCTSize);
	nOffset += sizeof(TGIFHeader)+sizeof(TGIFLSDescriptor)+m_nGlobalCTSize;

	CopyMemory(pGlobal + nOffset,&m_pRawData[nStart], nBlockLen);
	nOffset += nBlockLen;

	pGlobal[nOffset] = 0x3B; // trailer
	nOffset++;

	*pBlockLen = nOffset;

	return hGlobal;
}

BOOL CPictureEx::IsGIF() const
{
	return m_bIsGIF;
}

BOOL CPictureEx::IsAnimatedGIF() const
{
	return (m_bIsGIF && (m_arrFrames.size() > 1));
}

int CPictureEx::GetFrameCount() const
{
	if (!IsAnimatedGIF())
		return 0;

	return m_arrFrames.size();
}

COLORREF CPictureEx::GetBkColor() const
{
	return m_clrBackground;
}

void CPictureEx::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	::BitBlt(dc.m_hDC,0,0,m_PictureSize.cx,m_PictureSize.cy,
		m_hMemDC,0,0,SRCCOPY);
}

BOOL CPictureEx::PrepareDC(int nWidth, int nHeight)
{
	SetWindowPos(NULL,0,0,nWidth,nHeight,SWP_NOMOVE | SWP_NOZORDER);

	HDC hWinDC = ::GetDC(m_hWnd);
	if (!hWinDC) return FALSE;
	
	m_hMemDC = CreateCompatibleDC(hWinDC);
	if (!m_hMemDC) 
	{
		::ReleaseDC(m_hWnd,hWinDC);
		return FALSE;
	};

	m_hBitmap  = CreateCompatibleBitmap(hWinDC,nWidth,nHeight);
	if (!m_hBitmap) 
	{
		::ReleaseDC(m_hWnd,hWinDC);
		::DeleteDC(m_hMemDC);
		return FALSE;
	};

	m_hOldBitmap = reinterpret_cast<HBITMAP> 
						(SelectObject(m_hMemDC,m_hBitmap));
	
	// fill the background
	m_clrBackground = GetSysColor(COLOR_3DFACE);
	RECT rect = {0,0,nWidth,nHeight};
	FillRect(m_hMemDC,&rect,(HBRUSH)(COLOR_WINDOW));

	m_bIsInitialized = TRUE;
	return TRUE;
}

void CPictureEx::OnDestroy() 
{
	Stop();	
	CStatic::OnDestroy();
}

void CPictureEx::SetBkColor(COLORREF clr)
{
	if (!m_bIsInitialized) return;

	m_clrBackground = clr;

	HBRUSH hBrush = CreateSolidBrush(clr);
	if (hBrush)
	{
		RECT rect = {0,0,m_PictureSize.cx,m_PictureSize.cy};
		FillRect(m_hMemDC,&rect,hBrush);
		DeleteObject(hBrush);
	};
}

#ifdef GIF_TRACING
void CPictureEx::WriteDataOnDisk(CString szFileName, HGLOBAL hData, DWORD dwSize)
{
	CFile file;

	if (!file.Open(szFileName,
			CFile::modeCreate |
			CFile::modeWrite |
			CFile::shareDenyNone))
	{
		TRACE(_T("WriteData: Error creating file %s\n"),szFileName);
		return;
	};

	char *pData = reinterpret_cast<char *> (GlobalLock(hData));
	if (!pData)
	{
		TRACE(_T("WriteData: Error locking memory\n"));
		return;
	};

	TRY
	{
		file.Write(pData,dwSize);
	}
	CATCH(CFileException, e);                                          
	{
		TRACE(_T("WriteData: An exception occured while writing to the file %s\n"),
			szFileName);
		//e->Delete();   // DO NOT CALL THIS, CAN CAUSE CRASH.  majun, 7.31
		GlobalUnlock(hData);
		file.Close();
		return;
	}
	END_CATCH
	
	GlobalUnlock(hData);
	file.Close();
}

void CPictureEx::EnumGIFBlocks()
{
	enum GIFBlockTypes nBlock;

	ResetDataPointer();
	while(m_nCurrOffset < m_nDataSize)
	{
		nBlock = GetNextBlock();
		switch(nBlock)
		{
		case BLOCK_UNKNOWN:
			TRACE(_T("- Unknown block\n"));
			return;
			break;

		case BLOCK_TRAILER:
			TRACE(_T("- Trailer block\n"));
			break;

		case BLOCK_APPEXT:
			TRACE(_T("- Application extension block\n"));
			break;

		case BLOCK_COMMEXT:
			TRACE(_T("- Comment extension block\n"));
			break;

		case BLOCK_CONTROLEXT:
			{
			TGIFControlExt *pControl = 
				reinterpret_cast<TGIFControlExt *> (&m_pRawData[m_nCurrOffset]);
			TRACE(_T("- Graphic control extension block (delay %d, disposal %d)\n"),
					pControl->m_wDelayTime, pControl->GetPackedValue(GCX_PACKED_DISPOSAL));
			};
			break;

		case BLOCK_PLAINTEXT:
			TRACE(_T("- Plain text extension block\n"));
			break;

		case BLOCK_IMAGE:
			TGIFImageDescriptor *pIDescr = 
				reinterpret_cast<TGIFImageDescriptor *> (&m_pRawData[m_nCurrOffset]);
			TRACE(_T("- Image data block (%dx%d  %d,%d)\n"),
					pIDescr->m_wWidth,
					pIDescr->m_wHeight,
					pIDescr->m_wLeftPos,
					pIDescr->m_wTopPos);
			break;
		};

		SkipNextBlock();	
	};

	TRACE(_T("\n"));
}
#endif // GIF_TRACING

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜精品美女毛片视频| 国产美女精品在线| 国产专区综合网| 色噜噜狠狠色综合中国| 精品国产乱码久久久久久1区2区 | 成人精品鲁一区一区二区| 在线观看www91| 国产精品毛片久久久久久久| 狠狠色丁香久久婷婷综| 精品视频色一区| 亚洲欧洲日本在线| 国产高清不卡一区二区| 日韩欧美激情一区| 亚洲一级二级在线| 色婷婷综合中文久久一本| 久久久久国产精品人| 另类小说图片综合网| 精品视频全国免费看| 亚洲人成影院在线观看| 成人毛片在线观看| 久久网站最新地址| 日本不卡高清视频| 在线观看成人小视频| 亚洲欧洲另类国产综合| 国产精品一二三四区| 精品国免费一区二区三区| 日本亚洲天堂网| 制服丝袜中文字幕亚洲| 五月天激情小说综合| 在线国产亚洲欧美| 一区二区三区色| 91福利国产精品| 亚洲一区二区综合| 欧美午夜一区二区| 亚洲成精国产精品女| 欧美人妇做爰xxxⅹ性高电影 | 久久精品日产第一区二区三区高清版| 亚洲一区二区在线免费观看视频| 色婷婷国产精品综合在线观看| 自拍偷拍国产精品| 99久久精品免费看| 亚洲色图欧美激情| 91国产免费看| 日韩av网站在线观看| 日韩美女一区二区三区| 国产麻豆精品视频| 国产精品欧美久久久久无广告 | 日韩精品一区在线| 精品在线观看视频| 久久精品夜色噜噜亚洲a∨| 国产精品综合在线视频| 国产精品拍天天在线| 91麻豆文化传媒在线观看| 一区二区成人在线视频| 欧美日韩国产bt| 狠狠色丁香久久婷婷综| 国产精品女主播av| 欧美日韩中文字幕一区二区| 日本欧美肥老太交大片| 国产日韩欧美不卡在线| 色欧美片视频在线观看在线视频| 亚洲超丰满肉感bbw| 欧美sm极限捆绑bd| thepron国产精品| 天堂在线亚洲视频| 国产亚洲午夜高清国产拍精品| 91丨porny丨国产| 青青草原综合久久大伊人精品| 国产日韩欧美精品在线| 欧美日韩一级片在线观看| 国产在线精品一区在线观看麻豆| 成人欧美一区二区三区黑人麻豆| 欧美日韩国产bt| 成人av先锋影音| 免费人成在线不卡| 亚洲色图20p| 精品久久久久久无| 欧美主播一区二区三区美女| 国产九色sp调教91| 日本不卡视频一二三区| 日韩毛片高清在线播放| 亚洲精品在线观看网站| 在线观看日产精品| 成人手机电影网| 激情偷乱视频一区二区三区| 亚洲午夜久久久久久久久电影院| 国产日韩av一区| 精品欧美久久久| 欧美日本韩国一区| 在线观看成人免费视频| 成人理论电影网| 国产精品一区二区在线播放| 日韩精品亚洲一区二区三区免费| 国产精品久久久久aaaa樱花 | 成人av在线资源网站| 日本aⅴ精品一区二区三区 | 国产在线精品视频| 亚洲成人动漫在线观看| **性色生活片久久毛片| 久久久久久久网| 日韩美女一区二区三区| 欧美一区二区三区在线观看视频| 在线精品亚洲一区二区不卡| 99久久精品免费观看| 成人综合婷婷国产精品久久免费| 精品一区二区三区影院在线午夜 | 久久精品夜色噜噜亚洲a∨| 91精品国产综合久久久久久| 欧美视频在线观看一区| 91首页免费视频| 91偷拍与自偷拍精品| 不卡视频一二三| 不卡欧美aaaaa| 91在线视频观看| 日本高清视频一区二区| 欧美三级乱人伦电影| 欧美色图免费看| 欧美日韩美少妇| 在线播放91灌醉迷j高跟美女| 7777精品久久久大香线蕉| 制服丝袜日韩国产| 欧美岛国在线观看| 欧美精品一区二区精品网| 久久亚洲欧美国产精品乐播| 国产亚洲欧洲997久久综合| 国产欧美一区视频| 国产欧美日韩精品在线| 最好看的中文字幕久久| 一区二区不卡在线播放 | 精品视频免费看| 91精品国产欧美日韩| 欧美一区二区三区在线| 精品国产凹凸成av人网站| 久久久久久久久久美女| 国产精品国产三级国产普通话蜜臀 | 欧美三区在线视频| 在线不卡中文字幕| 日韩精品一区二区三区蜜臀| 国产区在线观看成人精品| 亚洲欧美自拍偷拍色图| 午夜国产精品一区| 久久99精品网久久| jlzzjlzz亚洲日本少妇| 欧美自拍偷拍一区| 精品av综合导航| 亚洲视频一区在线| 奇米影视一区二区三区| 粉嫩av亚洲一区二区图片| 欧洲精品在线观看| 欧美精品一区二区三| 亚洲人成精品久久久久久| 日本特黄久久久高潮| 国产精品一品视频| 欧美性受极品xxxx喷水| 久久人人爽人人爽| 亚洲制服丝袜在线| 国产真实乱对白精彩久久| 91视视频在线直接观看在线看网页在线看 | 日韩区在线观看| 国产精品传媒入口麻豆| 蜜臀91精品一区二区三区| heyzo一本久久综合| 日韩色视频在线观看| 亚洲人午夜精品天堂一二香蕉| 蜜臀国产一区二区三区在线播放| 成人av免费在线| 日韩一级大片在线| 亚洲免费在线看| 国产成人小视频| 日韩精品最新网址| 一二三区精品视频| 成人免费av网站| 久久在线观看免费| 视频一区二区三区在线| 91在线国产观看| 欧美国产日产图区| 精品一区二区三区欧美| 欧美乱熟臀69xxxxxx| 亚洲激情校园春色| 99久久免费视频.com| 国产欧美日韩在线看| 久88久久88久久久| 欧美一区二区福利视频| 午夜久久久影院| 欧美午夜精品久久久久久超碰 | 色一情一乱一乱一91av| 精品99久久久久久| 日韩成人精品在线观看| 在线免费观看日本一区| 亚洲欧美另类久久久精品| 国产成人亚洲综合a∨婷婷图片| 亚洲精品在线观看网站| 日本欧洲一区二区| 欧美精品久久天天躁| 日韩精品色哟哟| 666欧美在线视频| 天天爽夜夜爽夜夜爽精品视频| 欧美日韩国产a| 免费在线观看日韩欧美| 久久奇米777|