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

隨筆-341  評(píng)論-2670  文章-0  trackbacks-0

    趁此機(jī)會(huì)做個(gè)廣告,http://www.gaclib.net終于上線啦!

    GacUI的列表控件的第二個(gè)Demo是關(guān)于列表項(xiàng)的多選的。跟Windows一樣,我們可以通過(guò)鼠標(biāo)和方向鍵,配合CTRL和SHIFT選擇列表的多個(gè)內(nèi)容。因此這次我實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的“名字選擇窗口”,就跟QQ邀請(qǐng)好友入群的界面一樣,兩個(gè)列表,兩個(gè)按鈕。先看圖:



    列表內(nèi)容始終是排序的。當(dāng)我們選中一邊的內(nèi)容之后,可以按按鈕把內(nèi)容復(fù)制到另一邊。現(xiàn)在我們先來(lái)看一看創(chuàng)建和排版這些控件的代碼。這里我用了一個(gè)五行三列的表格。左右方列表,中間的第二個(gè)第四行放按鈕,第三行64個(gè)像素高,按鈕32*32,第一行和第五行平均地充滿剩下的空間:

#include "..\..\Public\Source\GacUIIncludes.h"
#include 
<Windows.h>

// for SortedList, CopyFrom and Select
using namespace vl::collections;

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow)
{
    
return SetupWindowsDirect2DRenderer();
}

class NameSelectorWindow : public GuiWindow
{
private:
    GuiTextList
*                    listSource;
    GuiTextList
*                    listDestination;
    GuiButton
*                        buttonAdd;
    GuiButton
*                        buttonRemove;

    (略)
public:
    NameSelectorWindow()
        :GuiWindow(GetCurrentTheme()
->CreateWindowStyle())
    {
        
this->SetText(L"Controls.ListBox.NameSelector");

        GuiTableComposition
* table=new GuiTableComposition;
        table
->SetRowsAndColumns(53);
        table
->SetCellPadding(3);
        table
->SetAlignmentToParent(Margin(0000));

        table
->SetRowOption(0, GuiCellOption::PercentageOption(0.5));
        table
->SetRowOption(1, GuiCellOption::MinSizeOption());
        table
->SetRowOption(2, GuiCellOption::AbsoluteOption(64));
        table
->SetRowOption(3, GuiCellOption::MinSizeOption());
        table
->SetRowOption(4, GuiCellOption::PercentageOption(0.5));

        table
->SetColumnOption(0, GuiCellOption::PercentageOption(0.5));
        table
->SetColumnOption(1, GuiCellOption::MinSizeOption());
        table
->SetColumnOption(2, GuiCellOption::PercentageOption(0.5));

        
this->GetContainerComposition()->AddChild(table);

        {
            GuiCellComposition
* cell=new GuiCellComposition;
            table
->AddChild(cell);
            cell
->SetSite(0051);

            listSource
=g::NewTextList();
            listSource
->GetBoundsComposition()->SetAlignmentToParent(Margin(0000));
            
// make listSource's horizontal scroll bar disappeared when it is not needed.
            listSource->SetHorizontalAlwaysVisible(false);
            listSource
->SetMultiSelect(true);
            listSource
->SelectionChanged.AttachMethod(this&NameSelectorWindow::listSource_SelectionChanged);
            cell
->AddChild(listSource->GetBoundsComposition());
        }
        {
            GuiCellComposition
* cell=new GuiCellComposition;
            table
->AddChild(cell);
            cell
->SetSite(0251);

            listDestination
=g::NewTextList();
            listDestination
->GetBoundsComposition()->SetAlignmentToParent(Margin(0000));
            
// make listSource's horizontal scroll bar disappeared when it is not needed.
            listDestination->SetHorizontalAlwaysVisible(false);
            listDestination
->SetMultiSelect(true);
            listDestination
->SelectionChanged.AttachMethod(this&NameSelectorWindow::listDestination_SelectionChanged);
            cell
->AddChild(listDestination->GetBoundsComposition());
        }
        {
            GuiCellComposition
* cell=new GuiCellComposition;
            table
->AddChild(cell);
            cell
->SetSite(1111);

            buttonAdd
=g::NewButton();
            buttonAdd
->SetText(L">>");
            buttonAdd
->GetBoundsComposition()->SetAlignmentToParent(Margin(0000));
            buttonAdd
->GetBoundsComposition()->SetPreferredMinSize(Size(3232));
            buttonAdd
->Clicked.AttachMethod(this&NameSelectorWindow::buttonAdd_Clicked);
            buttonAdd
->SetEnabled(false);
            cell
->AddChild(buttonAdd->GetBoundsComposition());
        }
        {
            GuiCellComposition
* cell=new GuiCellComposition;
            table
->AddChild(cell);
            cell
->SetSite(3111);

            buttonRemove
=g::NewButton();
            buttonRemove
->SetText(L"<<");
            buttonRemove
->GetBoundsComposition()->SetAlignmentToParent(Margin(0000));
            buttonRemove
->GetBoundsComposition()->SetPreferredMinSize(Size(3232));
            buttonRemove
->Clicked.AttachMethod(this&NameSelectorWindow::buttonRemove_Clicked);
            buttonRemove
->SetEnabled(false);
            cell
->AddChild(buttonRemove->GetBoundsComposition());
        }

        
// Add names into listSource
        LoadNames(listSource);

        
// set the preferred minimum client size
        this->GetBoundsComposition()->SetPreferredMinSize(Size(640480));
        
// call this to calculate the size immediately if any indirect content in the table changes
        
// so that the window can calcaulte its correct size before calling the MoveToScreenCenter()
        this->ForceCalculateSizeImmediately();
        
// move to the screen center
        this->MoveToScreenCenter();
    }
};

void GuiMain()
{
    GuiWindow
* window=new NameSelectorWindow;
    GetApplication()
->Run(window);
    delete window;
}


    剩下的內(nèi)容分為三部分。首先是如何在列表沒(méi)有選中內(nèi)容的時(shí)候把按鈕變灰。在上面的代碼中我們知道listSource和listDestination都監(jiān)聽(tīng)了SelectionChanged事件。事件處理函數(shù)的內(nèi)容如下:

    void listSource_SelectionChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
    {
        buttonAdd
->SetEnabled(listSource->GetSelectedItems().Count()>0);
    }

    
void listDestination_SelectionChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
    {
        buttonRemove
->SetEnabled(listDestination->GetSelectedItems().Count()>0);
    }


    代碼內(nèi)容十分簡(jiǎn)潔明了。第二部分是NameSelectorWindow構(gòu)造函數(shù)中調(diào)用的LoadNames函數(shù)。我們首先把所有的名字都放在一個(gè)const wchar_t* DataSource[]數(shù)組里面,內(nèi)容是沒(méi)有排過(guò)序的:

const wchar_t* DataSource[]=
{
    L
"Weierstrass",
    L
"Cantor",
    L
"Bernoulli",
    L
"Fatou",
    L
"Green",
    L
"S.Lie",
    L
"Euler",
    L
"Gauss",
    L
"Sturm",
    L
"Riemann",
    L
"Neumann",
    L
"Caratheodory",
    L
"Newton",
    L
"Jordan",
    L
"Laplace",
    L
"Wiener",
    L
"Thales",
    L
"Maxwell",
    L
"Riesz",
    L
"Fourier",
    L
"Noether",
    L
"Kepler",
    L
"Kolmogorov",
    L
"Borel",
    L
"Sobolev",
    L
"Dirchlet",
    L
"Lebesgue",
    L
"Leibniz",
    L
"Abel",
    L
"Lagrange",
    L
"Ramanujan",
    L
"Ljapunov",
    L
"Holder",
    L
"Poisson",
    L
"Nikodym",
    L
"H.Hopf",
    L
"Pythagoras",
    L
"Baire",
    L
"Haar",
    L
"Fermat",
    L
"Kronecker",
    L
"E.Laudau",
    L
"Markov",
    L
"Wronski",
    L
"Zermelo",
    L
"Rouche",
    L
"Taylor",
    L
"Urysohn",
    L
"Frechet",
    L
"Picard",
    L
"Schauder",
    L
"Lipschiz",
    L
"Liouville",
    L
"Lindelof",
    L
"de Moivre",
    L
"Klein",
    L
"Bessel",
    L
"Euclid",
    L
"Kummer",
    L
"Ascoli",
    L
"Chebyschev",
    L
"Banach",
    L
"Hilbert",
    L
"Minkowski",
    L
"Hamilton",
    L
"Poincare",
    L
"Peano",
    L
"Zorn",
};


    然后LoadNames函數(shù)如下所示:

    void LoadNames(GuiTextList* list)
    {
        
// Use linq for C++ to create sorted TextItem(s) from DataSource
        CopyFrom(
            list
->GetItems(),
            FromArray(DataSource)
                
>>OrderBy(_wcsicmp)
                
>>Select<const wchar_t*, list::TextItem>(
                    [](
const wchar_t* name){return list::TextItem(name);}
                )
            );
    }


    首先我們用FromArray函數(shù)從const wchar_t* DataSource[]數(shù)組創(chuàng)建出一個(gè)IEnumerable<const wchar_t*>,然后用_wcsicmp進(jìn)行排序,最后把每一個(gè)const wchar_t* name都用list::TextItem(name)轉(zhuǎn)變成一個(gè)列表項(xiàng)。

    最后一步比較復(fù)雜,就是如何在移動(dòng)列表的內(nèi)容的時(shí)候還保持兩個(gè)列表的內(nèi)容是排序的。首先,從一個(gè)排序列表中刪除東西,結(jié)果肯定是排序的。其次,把一堆新的名字插入一個(gè)列表,最簡(jiǎn)單的方法就是把所有的東西連起來(lái)重新排序一遍,然后放回去:

    static list::TextItem GetTextItem(GuiTextList* list, int index)
    {
        
return list->GetItems()[index];
    }

    
static int CompareTextItem(list::TextItem a, list::TextItem b)
    {
        
return _wcsicmp(a.GetText().Buffer(), b.GetText().Buffer());
    }

    
static int ReverseCompareInt(int a, int b)
    {
        
return b-a;
    }

    
void MoveNames(GuiTextList* from, GuiTextList* to)
    {
        CopyFrom(
            to
->GetItems(),
            to
->GetItems()
                
>>Concat(
                    from
->GetSelectedItems()>>Select(Curry(GetTextItem)(from))
                    )
                
>>OrderBy(CompareTextItem)
            );

        List
<int> selectedItems;
        CopyFrom(
            selectedItems.Wrap(),
            from
->GetSelectedItems()
                
>>OrderBy(ReverseCompareInt)
            );
        FOREACH(
int, index, selectedItems.Wrap())
        {
            from
->GetItems().RemoveAt(index);
        }
    }

    
void buttonAdd_Clicked(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
    {
        MoveNames(listSource, listDestination);
    }

    
void buttonRemove_Clicked(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
    {
        MoveNames(listDestination, listSource);
    }


    我們可以看到MoveNames函數(shù)里面做了三件事情。

    第一件事情就是把to列表中的內(nèi)容,和from列表中選中的內(nèi)容Concat起來(lái),也就是一個(gè)連著一個(gè)組成一個(gè)沒(méi)有排序過(guò)的IEnumerable<list::TextItem>,然后用CompareTextItem進(jìn)行排序。其中Curry(GetTextItem)(item)的意思是,將item作為GetTextItem的第一個(gè)參數(shù),把“填補(bǔ)剩下的參數(shù)”的這個(gè)過(guò)程產(chǎn)生一個(gè)新的函數(shù),就跟bind1st函數(shù)的意思是一樣的。所以經(jīng)過(guò)這個(gè)Select,就可以吧GetSelectedItems()返回的所有選中的item的下標(biāo),給轉(zhuǎn)換成原原本本的列表項(xiàng)。這樣將to里面的列表項(xiàng)和from里面選中的列表項(xiàng)所有的內(nèi)容合起來(lái)排序,最后放回to列表里面,這樣?xùn)|西就挪過(guò)去了。

    第二件事情就是要把from->GetSelectedItems()的內(nèi)容都復(fù)制下來(lái),然后逆序。

    第三件事情,就是遍歷逆序后的GetSelectedItems的結(jié)果,一個(gè)一個(gè)刪除掉選中的項(xiàng)目了。列表控件只要內(nèi)容一變化,選中就會(huì)全部清空,因此如果不先保留GetSelectedItems的結(jié)果的話,刪除了一個(gè)列表項(xiàng)之后,GetSelectedItems就會(huì)變空,這樣就會(huì)出bug。

    這個(gè)Demo就介紹到這里了。GacUI下一個(gè)列表控件的Demo將是關(guān)于虛擬模式的。也就是說(shuō),這次我們不一個(gè)一個(gè)Add進(jìn)去了,而是直接告訴列表控件一共有多少個(gè)項(xiàng)目,然后列表要顯示的時(shí)候回調(diào)一下獲得真正的內(nèi)容。這個(gè)功能是很有用的,特別是當(dāng)內(nèi)容特別多,我們沒(méi)辦法一下子準(zhǔn)備好的時(shí)候,可以讓界面很快的出來(lái),讓用戶感覺(jué)起來(lái),程序運(yùn)行的很流暢。

posted on 2012-05-25 21:54 陳梓瀚(vczh) 閱讀(3664) 評(píng)論(12)  編輯 收藏 引用 所屬分類: GacUI

評(píng)論:
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-26 01:42 | phoenixbing
我是來(lái)支持老大的  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-26 06:35 | 溪流
linq 能合起來(lái)寫(xiě)不?哈~  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-26 07:29 | 朱峰e(cuò)verettjf
學(xué)習(xí)。
請(qǐng)問(wèn),能否說(shuō),gaclib是一個(gè).NET WinForm風(fēng)格的c++界面庫(kù)?
GPU accelerated 是針對(duì)顯示做了優(yōu)化(相對(duì)于使用sdk或mfc、wtl)?  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-26 09:19 | 陳梓瀚(vczh)
@朱峰e(cuò)verettjf
我覺(jué)得,應(yīng)該是WPF風(fēng)格的吧。GPU是針對(duì)WinForm、MFC、WTL這種傳統(tǒng)的界面而言的。  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-26 09:20 | 陳梓瀚(vczh)
@溪流
能啊,里面不是合了嗎,還嵌套了  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-26 18:23 | 朱峰e(cuò)verettjf
@陳梓瀚(vczh)
嗯。向博主學(xué)習(xí)。  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-27 16:42 | tb
向博主學(xué)習(xí)  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-27 20:49 | 溪流
@陳梓瀚(vczh)
我是說(shuō)類sql的寫(xiě)法:)  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-27 23:09 | TianJun
單擊列表控件里面的名字有時(shí)候會(huì)選擇到其它名字, 不是我單擊的名字。  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-28 01:23 | 陳梓瀚(vczh)
@TianJun
有沒(méi)有重現(xiàn)方法?然后我去查一查  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-28 01:23 | 陳梓瀚(vczh)
@溪流
沒(méi)有那種寫(xiě)法,C++搞不定這種……  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-28 03:44 | Scan
在C++中倒是可以弄出a.OrderBy().Select([](){}).ToList()這種語(yǔ)法的linq,借助一個(gè)代理類,用.來(lái)連接操作,至少在代碼補(bǔ)全方面更好用。
我以前倒是也試過(guò)在C++11中借助閉包實(shí)現(xiàn)linq to object,閉包用于延遲迭代。  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++ 2012-05-29 19:13 | TianJun
@陳梓瀚(vczh)
剛打開(kāi)程序時(shí)不會(huì), 把一些名字移動(dòng)到右邊后, 就會(huì)出現(xiàn)單擊左邊列表控件會(huì)選擇不對(duì)的名字。  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++[未登錄](méi) 2012-05-29 19:35 | 陳梓瀚(vczh)
@TianJun
我去看一看  回復(fù)  更多評(píng)論
  
# re: GacUI Demo:列表控件內(nèi)容的排序和移動(dòng),以及Linq for C++[未登錄](méi) 2012-05-29 20:13 | 陳梓瀚(vczh)
@TianJun
refactor的時(shí)候犯了點(diǎn)小錯(cuò)誤,這個(gè)問(wèn)題已經(jīng)解決了。感謝提供信息。  回復(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>
            亚洲欧美三级伦理| 性视频1819p久久| 免费观看成人www动漫视频| 亚洲精品国产日韩| 久久久精彩视频| 欧美在线视频一区| 亚洲欧美www| 久久成人免费| 久久精品国产69国产精品亚洲| 欧美视频在线观看免费| 欧美绝品在线观看成人午夜影视| 狂野欧美激情性xxxx欧美| 欧美国产精品| 欧美日韩一区在线视频| 国产精品久久久久一区二区三区共| 欧美日韩视频在线第一区| 欧美日韩18| 国产精品日韩高清| 黑人巨大精品欧美一区二区小视频| 国产人成一区二区三区影院 | 久久久久久9999| 久久综合给合久久狠狠色| 亚洲精品一区二区三区樱花| 一本色道88久久加勒比精品| 亚洲永久在线| 欧美激情性爽国产精品17p| 亚洲第一中文字幕在线观看| 日韩视频中午一区| 亚洲一区二区三区欧美| 欧美在线视频一区二区三区| 欧美成人一区二免费视频软件| 欧美成人精品1314www| 亚洲一区二区三区成人在线视频精品 | 一区二区毛片| 午夜国产一区| 亚洲国产视频a| 黄色成人小视频| 亚洲国产成人不卡| 一本大道av伊人久久综合| 久久精精品视频| 欧美韩国在线| 亚洲国产高清在线| 久久成人18免费观看| 欧美福利视频网站| 欧美亚洲一区二区在线| 欧美激情区在线播放| 国产精品视频午夜| 亚洲天堂免费观看| 欧美不卡视频一区发布| 亚洲综合电影一区二区三区| 久久深夜福利免费观看| 欧美日本高清视频| 亚洲风情亚aⅴ在线发布| 一区二区动漫| 亚洲国产一区二区精品专区| 午夜视频一区二区| 免费的成人av| 亚洲电影网站| 久久久999| 亚洲欧美国产高清va在线播| 欧美成人xxx| 亚洲国产网站| 裸体丰满少妇做受久久99精品| 一本一本久久a久久精品牛牛影视| 久久综合久久综合久久| 国产伦精品一区二区三区在线观看 | 亚洲视频免费在线观看| 亚洲免费av片| 亚洲日本成人女熟在线观看| 欧美影院一区| 永久久久久久| 久久久久久一区| 久久国产直播| 黄色亚洲免费| 久久久久久综合| 午夜一区在线| 国产伦一区二区三区色一情| 久久精品电影| 久久国产精品99国产| 伊人久久婷婷色综合98网| 欧美中文字幕在线观看| 牛牛国产精品| 另类人畜视频在线| 亚洲成人在线| 亚洲自拍偷拍福利| 亚洲国产日韩欧美在线99| 亚洲伊人伊色伊影伊综合网| 久久婷婷国产综合尤物精品| 欧美性做爰猛烈叫床潮| 久久久精品网| 亚洲福利视频专区| 鲁大师成人一区二区三区| 另类酷文…触手系列精品集v1小说| 影视先锋久久| 暖暖成人免费视频| 欧美精品啪啪| 亚洲欧美日韩国产综合| 久久精品123| 91久久久在线| 日韩一级大片在线| 国产一区二区三区久久精品| 老司机午夜免费精品视频| 欧美日本在线看| 亚洲欧美激情诱惑| 欧美在线综合| 欧美激情中文字幕一区二区| 一区二区激情视频| 一区二区精品国产| 亚洲激情啪啪| 亚洲一区二区三区久久| 国产日韩欧美在线播放| 免费h精品视频在线播放| 欧美精品国产精品| 久久久久久一区| 久久免费少妇高潮久久精品99| 亚洲一级免费视频| 久久久水蜜桃| 香蕉av777xxx色综合一区| 久久成人精品电影| 国内外成人免费视频| 一区二区三区产品免费精品久久75| 国产精品欧美日韩一区| 亚洲欧美日韩成人高清在线一区| 久久国产精品网站| 在线视频欧美精品| 欧美激情第二页| 久久久国产午夜精品| 国产精品爽黄69| 亚洲乱码国产乱码精品精可以看 | 国产精品一区二区三区四区五区| 久久久久久一区| 老司机67194精品线观看| 亚洲一区二区在| 久久久久国产精品厨房| 亚洲国产高清aⅴ视频| 亚洲欧美春色| 亚洲欧美国产不卡| 国产精品jizz在线观看美国| 欧美大片一区二区三区| 麻豆freexxxx性91精品| 欧美中文日韩| 国产精品福利av| 亚洲在线视频观看| 亚洲一区二区三区在线看 | 久久电影一区| 久久国产福利| 欧美日在线观看| 午夜精品99久久免费| 国产精品久久久久91| 欧美高清日韩| 亚洲麻豆视频| 欧美国产精品| 在线不卡免费欧美| 欧美1区视频| 欧美黄色aaaa| 一区二区三区精品久久久| 欧美a级一区| 亚洲精品一区久久久久久| 亚洲人人精品| 欧美精品入口| 亚洲特黄一级片| 亚洲综合日韩| 国产一区二区久久久| 欧美一级理论片| 欧美激情性爽国产精品17p| 亚洲国产另类精品专区| 一区二区高清视频| 最新亚洲视频| 久久久久久久久伊人| 亚洲成人直播| 亚洲日本免费电影| 国产精品美女午夜av| 亚洲欧美一区二区三区久久| 久久青草福利网站| 亚洲国产精品一区二区久| 欧美第一黄网免费网站| 亚洲一本大道在线| 久久精品一区| av72成人在线| 国产精品手机视频| 欧美激情第一页xxx| 亚洲天堂网在线观看| aⅴ色国产欧美| 精品99一区二区| 欧美成人中文字幕在线| 亚洲男人的天堂在线观看 | 欧美视频一区二区三区…| 香蕉久久精品日日躁夜夜躁| 国模套图日韩精品一区二区| 久热精品在线视频| 午夜精品久久久久久久| 欧美18av| 久久久水蜜桃| 国产精品99久久久久久www| 精品电影在线观看| 国产精品成人观看视频免费| 亚洲婷婷在线| 亚洲毛片在线免费观看| 久久五月天婷婷| 久久国产加勒比精品无码|