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

羅朝輝(飄飄白云)

關(guān)注嵌入式操作系統(tǒng),移動(dòng)平臺(tái),圖形開發(fā)。-->加微博 ^_^

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  85 隨筆 :: 0 文章 :: 169 評(píng)論 :: 0 Trackbacks

正在開發(fā)中的游戲有個(gè)全屏功能--可以在window桌面背景上運(yùn)行,就像一些視頻播放器在桌面背景上播放一樣的,花了個(gè)上午整了個(gè)Demo放出來留個(gè)紀(jì)念。

實(shí)現(xiàn)功能:顯示圖標(biāo),雙擊圖標(biāo)執(zhí)行相應(yīng)的程序,右擊圖標(biāo)彈出該圖標(biāo)對應(yīng)得菜單,點(diǎn)擊非圖標(biāo)區(qū)則彈出桌面菜單。需要完整工程可以點(diǎn)此下載:DesktopWindow.rar。程序效果圖如下:

 在這個(gè)程序里,定義了一個(gè)XShellItem的數(shù)據(jù)結(jié)構(gòu),保持桌面圖標(biāo)的iten id(ITEMIDLiST),圖標(biāo)以及文字圖標(biāo)。

    struct XShellItem {
        ITEMIDLIST
*     itemId;

        
int x;
        
int y;
        
int w;
        
int h;

        
int nameX;
        
int nameY;
        
int nameW;
        
int nameH;

        BOOL hit;

        CStringW name;
        Bitmap
*     icon;
        Bitmap
*     nameIcon;

        XShellItem()
        :
        itemId(NULL),
        x(
0),
        y(
0),
        w(
0),
        h(
0),
        nameX(
0),
        nameY(
0),
        nameW(
0),
        nameH(
0),
        name(L
""),
        hit(FALSE),
        icon(NULL),
        nameIcon(NULL) 
{
        }

        
~XShellItem() {
        }

    }
;

然后定義一個(gè)數(shù)組CAtlArray<XShellItem> itemArray;用來保存所有桌面圖標(biāo)對象,在InitShellFolder()中對它進(jìn)行初始化:

    // 獲取桌面圖標(biāo)的相關(guān)數(shù)據(jù)
    BOOL InitShellFolder()
    
{
        HRESULT hRslt 
= SHGetDesktopFolder(&folder);
        
if (FAILED(hRslt)) {
            
return FALSE;
        }


        CComPtr
<IEnumIDList> ids;
        hRslt 
= folder->EnumObjects(0, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &ids);
        
if (FAILED(hRslt)) {
            
return FALSE;
        }


        CAtlList
<XShellItem> items;
        
for (;;) {
            ITEMIDLIST
*     id = 0;
            ULONG cIds 
= 0;

            hRslt 
= ids->Next(1&id, &cIds);
            
if (hRslt != S_OK) {
                
break;
            }


            CStringW name;
            STRRET str 
= 0};
            hRslt 
= folder->GetDisplayNameOf(id, SHGDN_NORMAL | SHGDN_INFOLDER, &str);
            
if (SUCCEEDED(hRslt)) {
                LPWSTR pname 
= 0;
                StrRetToStrW(
&str, id, &pname);
                name 
= pname;
                CoTaskMemFree(pname);
            }


            XShellItem item;

            item.itemId 
= id;
            item.name 
= name;
            items.AddTail(item);
        }


        SIZE_T iItem 
= 0;
        SIZE_T cItems 
= items.GetCount();

        itemArray.SetCount(cItems);

        POSITION pos 
= items.GetHeadPosition();
        
while (pos != 0{
            XShellItem
&     si = items.GetNext(pos);
            itemArray[iItem] 
= si;
            iItem
++;
        }


        HDC hDC 
= CreateCompatibleDC(0);

        Graphics g(hDC);
        g.Clear(Color(
0000));

        ICONMETRICS im 
= 0};
        im.cbSize 
= sizeof(im);
        SystemParametersInfo(SPI_GETICONMETRICS, 
sizeof(im), &im, 0);

        SolidBrush br_t(Color(
255255255));
        Font font_i(hDC, 
&(im.lfFont));
        
float fcy = font_i.GetHeight(&g) * 2 + 2;
        DeleteDC(hDC);

        Gdiplus::StringFormat sf(Gdiplus::StringFormat::GenericTypographic());
        sf.SetAlignment(Gdiplus::StringAlignmentCenter);
        sf.SetTrimming(Gdiplus::StringTrimmingEllipsisWord);

        iconSpacingWidth 
= im.iHorzSpacing + OFFSET_WIDTH;
        iconSpacingHeight 
= im.iVertSpacing + OFFSET_HEIGHT;

        
int iconWidth = GetSystemMetrics(SM_CXICON);
        
int iconHeight = GetSystemMetrics(SM_CYICON);

        
for (SIZE_T i = 0; i < cItems; i++{
            XShellItem
&     item = itemArray[i];

            
// SHGetFileInfo
            HICON hIcon = 0;
            HIMAGELIST hImgList;
            SHFILEINFO stSHFileInfo;
            CImageList cImgList;

            
// 獲取圖標(biāo)
            hImgList = (HIMAGELIST)::SHGetFileInfo(
                    (LPCWSTR) item.itemId,
                    
0,
                    
&stSHFileInfo,
                    
sizeof(SHFILEINFO),
                    SHGFI_PIDL 
| SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SYSICONINDEX);

            
// DIBSection 8bit
            BITMAPINFO bmi;
            BITMAPINFOHEADER
&  bmih = bmi.bmiHeader;
            bmih.biSize 
= sizeof(bmih);
            bmih.biWidth 
= ICON_WIDTH;
            bmih.biHeight 
= -ICON_HEIGHT;    // BMP反轉(zhuǎn)
            bmih.biPlanes = 1;
            bmih.biBitCount 
= 32;
            bmih.biCompression 
= BI_RGB;
            bmih.biSizeImage 
= 0;
            bmih.biXPelsPerMeter 
= 0;
            bmih.biYPelsPerMeter 
= 0;
            bmih.biClrUsed 
= 0;
            bmih.biClrImportant 
= 0;

            HDC memDC 
= CreateCompatibleDC(0);
            
void*  pDib = 0;
            HBITMAP hBmp 
= CreateDIBSection(memDC, &bmi, DIB_RGB_COLORS, &pDib, 00);
            GdiFlush();

            HGDIOBJ old 
= SelectObject(memDC, hBmp);

            
// ImageList_Draw WindowsXP
            ImageList_SetBkColor(hImgList, 0x0);
            ImageList_Draw(hImgList, stSHFileInfo.iIcon, memDC, 
00, ILD_NORMAL);
            SelectObject(memDC, old);
            DeleteDC(memDC);

            cImgList.Attach(hImgList);
            hIcon 
= cImgList.ExtractIcon(stSHFileInfo.iIcon);
            cImgList.Detach();

            
if (hIcon != 0{

                
// Bitmap::FromHICON 0~255
                item.icon = Bitmap::FromHICON(hIcon);
                item.w 
= iconWidth;
                item.h 
= iconHeight;

                Gdiplus::RectF rc(
float(2), float(2), float(iconSpacingWidth - 4), fcy);

                Gdiplus::Bitmap 
* nameIcon = new Bitmap(NAME_WIDTH, NAME_HEIGHT, &g);
                Gdiplus::Graphics 
* g2 = Gdiplus::Graphics::FromImage(nameIcon);
                g2
->Clear(Gdiplus::Color(Gdiplus::ARGB(0)));

                g2
->DrawString(item.name, item.name.GetLength(), &font_i, rc, &sf, &br_t);

                item.nameIcon 
= nameIcon;
                item.nameW 
= NAME_WIDTH;
                item.nameH 
= NAME_HEIGHT;

                delete g2;
            }


            DestroyIcon(hIcon);
            DeleteObject(hBmp);
            DestroyIcon(stSHFileInfo.hIcon);
        }


        
return TRUE;
    }

注意這里面并沒有設(shè)置圖標(biāo)對象的位置,因?yàn)楫?dāng)窗口改變大小的時(shí)候,相應(yīng)地也要調(diào)整圖標(biāo)的描繪位置,所以圖標(biāo)位置是在SetShellItemPosition()中動(dòng)態(tài)調(diào)整的.

    // 根據(jù)窗口大小設(shè)置圖標(biāo)位置
    void SetShellItemPosition()
    
{
        
int iconWidth = GetSystemMetrics(SM_CXICON);
        
int iconHeight = GetSystemMetrics(SM_CYICON);
        
static const int OFFSET_Y = 20;
        
int x = 0;
        
int y = OFFSET_Y;
        SIZE_T cItems 
= itemArray.GetCount();
        
for (SIZE_T i = 0; i < cItems; i++{
            XShellItem
&     item = itemArray[i];
            
if (item.icon) {
                item.x 
= x + (iconSpacingWidth - iconWidth) / 2;
                item.y 
= y;
            }


            
if (item.nameIcon) {
                item.nameX 
= x;
                item.nameY 
= y + iconHeight + 2;
            }


            WTL::CRect rect;
            GetClientRect(
&rect);
            y 
+= iconSpacingHeight;
            
if (y + iconSpacingHeight >= rect.bottom) {
                x 
+= iconSpacingWidth;
                y 
= OFFSET_Y;
            }

        }

    }

描繪圖標(biāo)就很簡單了,呵呵,不貼了,下面來說說彈出圖標(biāo)菜單,執(zhí)行圖標(biāo)對應(yīng)的程序以及彈出桌面菜單。

執(zhí)行圖標(biāo)對應(yīng)的程序,需要以先前保持的圖標(biāo)itemid作為參數(shù),代碼如下:

    void RunShellItem(ITEMIDLIST* pIID)
    
{
        SHELLEXECUTEINFO info;
        info.cbSize 
= sizeof(SHELLEXECUTEINFO);
        info.fMask 
= SEE_MASK_INVOKEIDLIST;
        info.hwnd 
= m_hWnd;
        info.lpVerb 
= NULL;
        info.lpFile 
= NULL;
        info.lpParameters 
= NULL;
        info.lpDirectory 
= NULL;
        info.nShow 
= SW_SHOWNORMAL;
        info.hInstApp 
= NULL;
        info.lpIDList 
= pIID;
        ShellExecuteEx(
&info);
    }

彈出桌面菜單的代碼如下:

    // 桌面菜單
    void DesktopMenu()
    
{
        HWND program 
= FindWindowEx(00, _T("Progman"), _T("Program Manager"));
        HWND view 
= FindWindowEx(program, 0, _T("SHELLDLL_DefView"), 0);

        
//HWND list = FindWindowEx(view, 0, _T("SysListView32"), 0);
        ::SetForegroundWindow(view);

        POINT pt;
        GetCursorPos(
&pt);

        LPARAM lp 
= pt.y << 16 | (pt.x - 32);
        ::PostMessage(view, WM_LBUTTONDOWN, 
0, lp);
        ::PostMessage(view, WM_RBUTTONUP, 
0, lp);
    }

彈出圖標(biāo)菜單的代碼如下,這里定義了兩個(gè)全局的IContextMenu對象:
static IContextMenu2*  g_pIContext2 = NULL;
static IContextMenu3*  g_pIContext3 = NULL;

以便在消息回調(diào)函數(shù)中使用。具體代碼如下:

    // 圖標(biāo)菜單
    void RightMenu(ITEMIDLIST* pIID)
    
{
        HWND hwnd 
= m_hWnd;

        LPCONTEXTMENU pContextMenu 
= NULL;
        LPCONTEXTMENU pCtxMenuTemp 
= NULL;

        g_pIContext2 
= NULL;
        g_pIContext3 
= NULL;

        
int menuType = 0;

        HRESULT hRslt 
= folder->GetUIObjectOf(
                hwnd,
                
1,
                (LPCITEMIDLIST
*&(pIID),
                IID_IContextMenu,
                
0,
                (
void**&pCtxMenuTemp);
        
if (FAILED(hRslt)) {
            
return;
        }


        POINT pt;
        GetCursorPos(
&pt);

        
if (pCtxMenuTemp->QueryInterface(IID_IContextMenu3, (void**&pContextMenu) == NOERROR) {
            menuType 
= 3;
        }

        
else if (pCtxMenuTemp->QueryInterface(IID_IContextMenu2, (void**&pContextMenu) == NOERROR) {
            menuType 
= 2;
        }


        
if (pContextMenu) {
            pCtxMenuTemp
->Release();
        }

        
else {
            pContextMenu 
= pCtxMenuTemp;
            menuType 
= 1;
        }


        
if (menuType == 0{
            
return;
        }


        HMENU hMenu 
= CreatePopupMenu();
        hRslt 
= pContextMenu->QueryContextMenu(hMenu, 010x7fff, CMF_NORMAL | CMF_EXPLORE);
        
if (FAILED(hRslt)) {
            
return;
        }


#ifndef _WIN64
    
#pragma warning(disable : 4244 4311)
#endif

        
// subclass window
        WNDPROC oldWndProc = NULL;
        
if (menuType > 1{

            
// only subclass if it is IID_IContextMenu2 or IID_IContextMenu3
            oldWndProc = (WNDPROC) SetWindowLongPtr(GWL_WNDPROC, (LONG) HookWndProc);
            
if (menuType == 2{
                g_pIContext2 
= (LPCONTEXTMENU2) pContextMenu;
            }

            
else {
                g_pIContext3 
= (LPCONTEXTMENU3) pContextMenu;
            }

        }

        
else {
            oldWndProc 
= NULL;
        }


        
int cmd = ::TrackPopupMenu(
                hMenu,
                TPM_LEFTALIGN 
| TPM_BOTTOMALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON,
                pt.x,
                pt.y,
                
0,
                hwnd,
                
0);

        
// unsubclass
        if (oldWndProc) {
            SetWindowLongPtr(GWL_WNDPROC, (LONG) oldWndProc);
        }


#ifndef _WIN64
    
#pragma warning(default : 4244 4311)
#endif
        
if (cmd != 0{
            CMINVOKECOMMANDINFO ci 
= 0};
            ci.cbSize 
= sizeof(CMINVOKECOMMANDINFO);
            ci.hwnd 
= hwnd;
            ci.lpVerb 
= (LPCSTR) MAKEINTRESOURCE(cmd - 1);
            ci.nShow 
= SW_SHOWNORMAL;

            pContextMenu
->InvokeCommand(&ci);
        }


        pContextMenu
->Release();
        g_pIContext2 
= NULL;
        g_pIContext3 
= NULL;
        ::DestroyMenu(hMenu);
    }


    
static LRESULT CALLBACK HookWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    
{
        
switch (message) {
        
case WM_MENUCHAR:    // only supported by IContextMenu3
            if (g_pIContext3) {
                LRESULT lResult 
= 0;
                g_pIContext3
->HandleMenuMsg2(message, wParam, lParam, &lResult);
                
return(lResult);
            }

            
break;
        
case WM_DRAWITEM:
        
case WM_MEASUREITEM:
            
if (wParam) {
                
break;    // if wParam != 0 then the message is not menu-related
            }


        
case WM_INITMENUPOPUP:
            
if (g_pIContext2) {
                g_pIContext2
->HandleMenuMsg(message, wParam, lParam);
            }

            
else {
                g_pIContext3
->HandleMenuMsg(message, wParam, lParam);
            }


            
return(message == WM_INITMENUPOPUP ? 0 : TRUE);
            
break;
        
default:
            
break;
        }


        
return ::CallWindowProc((WNDPROC) GetProp(hWnd, TEXT("oldWndProc")), hWnd, message, wParam, lParam);
    }


posted on 2008-02-23 14:28 羅朝輝 閱讀(4632) 評(píng)論(7)  編輯 收藏 引用 所屬分類: Windows

評(píng)論

# re: 模擬window桌面實(shí)現(xiàn) 2008-02-23 18:32 Simulator
漂亮  回復(fù)  更多評(píng)論
  

# re: 模擬window桌面實(shí)現(xiàn) 2008-02-24 23:06 魔域私服
不錯(cuò)不錯(cuò),學(xué)習(xí)了  回復(fù)  更多評(píng)論
  

# re: 模擬window桌面實(shí)現(xiàn) 2008-02-25 09:45 Enoch
lz很強(qiáng)大,很暴力。  回復(fù)  更多評(píng)論
  

# re: 模擬window桌面實(shí)現(xiàn) 2008-02-26 11:46 大膽地
很好  回復(fù)  更多評(píng)論
  

# re: 模擬window桌面實(shí)現(xiàn) 2008-03-05 22:16 #Ant
不錯(cuò)的東西,很好很強(qiáng)大!  回復(fù)  更多評(píng)論
  

# re: 模擬window桌面實(shí)現(xiàn) 2008-05-30 23:06 hoodlum1980
windows的圖標(biāo),是一個(gè)ListView窗口。  回復(fù)  更多評(píng)論
  

# re: 模擬window桌面實(shí)現(xiàn) 2009-03-09 17:18 飄飄白云
對右鍵彈出shell item菜單的改進(jìn):

新添加一個(gè)變量:
ATL::CComPtr<IContextMenu3> m_pContextMenu;

// 新右鍵菜單
void RightMenu(ITEMIDLIST* pIID)
{
if (m_pFolder == 0){
return;
}

HWND hwnd = *this;

ATL::CComPtr<IContextMenu> cm;
HRESULT hRslt = m_pFolder->GetUIObjectOf(
hwnd,
1,
(LPCITEMIDLIST*) &(pIID),
IID_IContextMenu,
0,
(void**) &cm);
if (FAILED(hRslt)) {
return;
}

HMENU hMenu = ::CreatePopupMenu();

hRslt = cm->QueryContextMenu(hMenu, 0, 1, 0x7fff, CMF_NORMAL);
if (SUCCEEDED(hRslt)) {
WTL::CPoint pt;
::GetCursorPos(&pt);

m_pContextMenu.Release();
cm->QueryInterface(&m_pContextMenu);

SetForegroundWindow(hwnd);

int cmd = ::TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON, pt.x, pt.y, 0, hwnd, 0);

::PostMessageW(hwnd, WM_NULL, 0, 0);

m_pContextMenu.Release();

if (cmd != 0) {
CMINVOKECOMMANDINFO ci = { 0};
ci.cbSize = sizeof(ci);
ci.hwnd = hwnd;
ci.lpVerb = (LPCSTR) MAKEINTRESOURCE(cmd - 1);
ci.nShow = SW_SHOWNORMAL;

cm->InvokeCommand(&ci);
}
}

::DestroyMenu(hMenu);
}

添加處理菜單消息的函數(shù):
MESSAGE_HANDLER(WM_INITMENUPOPUP, OnMenuHandler)
MESSAGE_HANDLER(WM_DRAWITEM, OnMenuHandler)
MESSAGE_HANDLER(WM_MENUCHAR, OnMenuHandler)
MESSAGE_HANDLER(WM_MEASUREITEM, OnMenuHandler)

LRESULT OnMenuHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LRESULT lResult = 0;

if (m_pContextMenu != 0) {
m_pContextMenu->HandleMenuMsg2(uMsg, wParam, lParam, &lResult);
}

return lResult;
}
  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区三区四区五区黄| 欧美福利一区二区| 午夜精品www| 欧美华人在线视频| 女主播福利一区| 久久米奇亚洲| 欧美精品在线观看| 六月天综合网| 欧美日韩福利| 欧美日韩一区二区免费视频| 欧美/亚洲一区| 欧美日本一区二区高清播放视频| 久久偷看各类wc女厕嘘嘘偷窃| 久久久久se| 麻豆国产精品777777在线| 亚洲一区二区成人在线观看| 午夜久久tv| 久久精品91| 欧美精选在线| 欧美日韩视频不卡| 国产拍揄自揄精品视频麻豆| 国产一区二区三区四区五区美女| 另类人畜视频在线| 欧美精品一区二区视频| 欧美午夜片在线免费观看| 国产一区二区三区日韩| 伊人夜夜躁av伊人久久| 亚洲午夜在线| 欧美一级网站| 欧美成人精品在线视频| 亚洲激情第一页| 亚洲福利国产| 性做久久久久久久久| 久久久久久久波多野高潮日日| 欧美一区二区日韩| 亚洲欧美日韩网| 另类专区欧美制服同性| 国产欧美三级| 亚洲国产日韩综合一区| 久久精品99国产精品酒店日本| 久久欧美中文字幕| 免费观看欧美在线视频的网站| 亚洲国产天堂久久综合网| 99av国产精品欲麻豆| 亚洲欧美日韩系列| 欧美午夜在线| 亚洲国产精品女人久久久| 午夜精品999| 亚洲福利视频免费观看| 久久精品噜噜噜成人av农村| 欧美日韩国产123区| 欧美日韩中文字幕在线| 久久国产精品久久久久久| 亚洲欧洲99久久| 亚洲国产欧美久久| 欧美尤物巨大精品爽| 欧美成人伊人久久综合网| 午夜精品一区二区三区电影天堂 | 国产农村妇女精品一区二区| 在线观看av不卡| 亚洲欧美视频在线观看视频| 99亚洲视频| 你懂的国产精品永久在线| 狠狠操狠狠色综合网| 亚洲视频在线观看一区| 亚洲国产网站| 欧美~级网站不卡| 在线日本成人| 久久手机精品视频| 亚洲国产精品va在看黑人| 久久精品国产一区二区三区免费看| 久久综合给合| 亚洲人线精品午夜| 欧美xxx在线观看| 免费91麻豆精品国产自产在线观看| 国产精品自拍三区| 亚洲欧美日韩综合| 欧美一区二区三区免费看| 国产精品日韩欧美一区| 欧美在线视频播放| 亚洲欧美在线免费| 国产精品尤物| 欧美成人69av| 免播放器亚洲一区| 亚洲专区国产精品| 在线一区二区三区做爰视频网站| 欧美日韩mp4| 性欧美1819性猛交| 欧美一区二区三区四区在线观看 | 亚洲国产成人porn| 欧美另类一区二区三区| 韩日精品视频| 亚洲免费激情| 国产精品久久久久影院亚瑟| 久久国产88| 久久裸体艺术| 亚洲深夜福利| 亚洲欧美日韩国产中文| 欧美日韩在线播放一区| 亚洲欧美怡红院| 午夜亚洲影视| 亚洲经典在线看| 99国产精品| 亚洲国产mv| 国产欧美一区二区视频| 亚洲视频电影在线| 久久综合色影院| 欧美日韩国产成人在线免费| 一区二区三区视频在线播放| 先锋影音国产精品| 亚洲国产欧美另类丝袜| 亚洲精品视频二区| 亚洲第一福利在线观看| 亚洲精品视频免费观看| 在线观看亚洲精品| 99国产精品久久久久久久久久| 国产精品爱啪在线线免费观看| 久久爱www久久做| 欧美大片免费观看| 欧美99在线视频观看| 老司机一区二区三区| 久久午夜激情| 国产精品成人va在线观看| 欧美激情视频一区二区三区不卡| 欧美日韩色综合| 亚洲国产精品久久久久| 国产亚洲精品激情久久| 日韩图片一区| 亚洲国产精品福利| 亚洲欧美自拍偷拍| 午夜精品久久久久影视| 美女久久一区| 欧美成人a视频| 国产亚洲精品aa午夜观看| 亚洲日本中文字幕免费在线不卡| 精品不卡一区| 欧美一级视频一区二区| 亚洲欧美一区二区三区在线| 欧美国产在线观看| 欧美与黑人午夜性猛交久久久| 欧美天堂亚洲电影院在线播放| 美女精品国产| 亚洲福利在线观看| 午夜精品999| 久久久av网站| 国产精品一卡二卡| 欧美亚洲午夜视频在线观看| 一区二区三区视频在线| 欧美午夜性色大片在线观看| 午夜精品一区二区三区四区| 亚洲免费电影在线| 一区二区三区色| 欧美一区二区免费| 久久深夜福利| 激情六月综合| 能在线观看的日韩av| 久久综合色8888| 亚洲高清在线视频| 免费日韩一区二区| 亚洲欧洲精品一区二区三区波多野1战4| 在线观看一区| 亚洲综合色在线| 欧美一区日韩一区| 国产午夜精品久久| 另类图片国产| 亚洲国产精品激情在线观看| 亚洲伦伦在线| 欧美视频中文字幕| 欧美一区国产一区| 久久天堂成人| 日韩视频中文字幕| 欧美日韩国产系列| 欧美一区二区三区免费观看视频| 免费在线亚洲| 永久免费精品影视网站| 欧美精品一区二区在线观看| 亚洲激情在线| 欧美色图首页| 欧美一级片久久久久久久| 亚洲欧美日本精品| 国产午夜精品全部视频在线播放| 久久精品国产精品亚洲| 欧美91大片| 欧美日韩综合另类| 亚洲欧美日韩一区二区三区在线观看| 久久免费黄色| 99综合在线| 激情伊人五月天久久综合| 免费成人av在线| 亚洲欧美日韩在线综合| 免费成人小视频| 先锋影音一区二区三区| 精品成人国产| 国产欧美1区2区3区| 另类人畜视频在线| 亚洲欧美视频一区二区三区| 欧美aa国产视频| 久久免费视频这里只有精品| 日韩手机在线导航| 亚洲激情av|