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

在控制臺程序中隱藏控制臺窗口

大家都知道,當編寫一個win32 console application時,當運行此類程序的時候
默認情況下會有一個類似DOS窗口的console窗口,但是有的時候我們只想在程序
中運行一段功能代碼,不希望顯示這個console窗口,讓代碼執行完畢之后程序自
動退出.

下面就介紹一下,如何隱藏win32 console application的console窗口

因為此種方法是通過設置編譯器的鏈接開關來實現,所以讓我們來看一下編譯
器的鏈接開關選項(也就是linker選項).

首先我們來看一下linker的 /subsystem 選項

該選項的語法形式如下:
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
            EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}
            [,major[.minor]]

這個鏈接選項告訴操作系統如何運行可執行文件

CONSOLE:
win32 字符模式應用程序,此種類型的應用程序在運行的時候會產生一個類似DOS
窗口的控制臺窗口,如果在應用程序的主函數為main()或者wmain(),在默認情況下
該應用程序就是一個控制臺應用程序

Extensible Firmware Interface
和CPU具體架構相關的一個參數選項,并不常用,在這里暫不詳細介紹.
如果對此有興趣的可以訪問intel主頁來查看相關內容

NATIVE;
設備驅動器選項,如果/DRIVER:WDM選項被設定的話,該鏈接選項(NATIVE)就為默認選項

POSIX:
在windows NT 種運行在POSIX子系統上的應用程序

WINDOWS:
該類型的應用程序不產生console窗口,該類型的應用程序的窗口由用戶自己創建,簡而言之
就是一個標準的Win32 application,其入口地址為WinMain()函數或者wWinMain()函數的地址
如果你在應用程序種定義的主函數為WinMain或者wWinMain,在默認情況下該應用程序就是一個
Win32 Application !

WINDOWSCE:
運行在windows CE上的應用程序

major and minor (optional):
主版本號和次版本號,該選項為可選,該選項為0~65535之間的十進制整數

從上面可以看出如果我們建立一個win32 console application的話,linker的/subsystem選項應該為
CONSOLE,可以在VC開發環境的project->setting->link->project option中看到!

接下來我們再看看應用程序是如何運行的!
我們知道用VC編寫的程序,運行的時候是需要 C\C++運行庫支持的.當我們運行一個C/C++程序的時候
鏈接器會首先尋找應用程序的啟動函數,例如:
如果你建立了一個console程序的話,編譯器得鏈接開關會是以下這種形式
/subsystem:"console" /entry:"mainCRTStartup"   (ANSI)
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)

如果你建立了一個win32 application,編譯器得鏈接開關則會是一下形式
/subsystem:"windows" /entry:"WinMain"   (ANSI)
/sbusystem:"windows" /entry:"wWinMain"  (UINCODE)

上面的兩種形式可以再project->setting->link->project option中看到
上面的subsystem和entry并不需要都設置,如果你只設置了/subsystem:"console"
的話,那么默認的entry開關在默認情況下應為/entry:"mainCRTStartup"
反之,如果你在應用程序中定義了main函數的話,默認情況下,你的/subsystem開關
應該為/system:"console"


在默認情況下/subsystem 和/entry開關是匹配的,也就是
console對應mainCRTStartup或者wmainCRTStartup
windows對應WinMain或者wWinMain

但是我們也可以通過手動改動的方式使他們不匹配


例如我們可以這樣改動

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 設置入口地址


int main(int argc, char* argv[])
{
 MessageBox(NULL, "hello", "Notice", MB_OK);
 return 0;
}

在默認情況下鏈接器看到/subsystem下是windows選項的時候,它會自動尋找WinMain或者wWinMain

但我們強制指定入口地址,這樣運行程序的時候默認的console窗口就會隱藏!


上面是在代碼中使用#pragma指令來設置,還有一種就是直接在開發環境的
project->setting->link->project option中手工改動!

posted @ 2008-04-09 09:49 Randy 閱讀(2615) | 評論 (0)編輯 收藏

richedit2

 

1 使用richedit 控件首先要加載 richedit 的dll.
LoadLibrary(_T("riched20.dll"));
2 加入對 richedit.h 頭文件的引用后,創建窗口
hwndBuffer    =   CreateWindow(RICHEDIT_CLASS,NULL,WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_VSCROLL|ES_SUNKEN
                            |ES_AUTOVSCROLL|ES_READONLY|ES_SAVESEL,6,30,526,354,hWnd,(HMENU)EDIT_ID,hInstance,NULL); 
這里創建了一個只讀的窗口,這樣只能通過函數輸入文字。
3 設置顏色:
//設置背景色
SendMessage( hwndBuffer, EM_SETBKGNDCOLOR, 0, RGB(0,0,0) ); 
//設置文字顏色
CHARFORMAT2 charFmt;
ZeroMemory(&charFmt,sizeof(charFmt));
charFmt.cbSize = sizeof(charFmt);
charFmt.dwMask = CFM_COLOR;      //只修改文字顏色標志
charFmt.crTextColor = RGB(0,179,0);//設置字體顏色  
SendMessage(hwndBuffer,EM_SETCHARFORMAT,0,(LPARAM)&charFmt);
//修改部分文字顏色
SendMessage(hwndBuffer,EM_SETSEL,0,10);    //選中0-10的文字
charFmt.crTextColor = it->clr;
//修改文字顏色
SendMessage(hwndBuffer,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&charFmt);           
注意對于richedit2.0  漢字僅作為一個字符。對于unicode 工程無所謂。但對于多字節來說一個漢字為2個字符。所以你通過strlen之類計算的字符串長度會比richedit 認為的要長如:
"大家好"。計算為6長度。但對于richedit來說為3個.發送EM_SEL消息,設置選中消息時必須以richedit為準.
SendMessage(hwndBuffer,EM_SETSEL,0,3);    如果指定為6將超出范圍
4 滾動滾動條:
SendMessage(hwndBuffer,WM_VSCROLL, SB_BOTTOM, 0);    //滾動到文檔的最后面
5 游標
int temp1,temp2;  //獲取起始和結束位置
SendMessage(hwndBuffer,EM_GETSEL,(WPARAM)&temp1,(LPARAM)&temp2);
//在文檔末尾輸入字符:
SendMessage(hwndBuffer, EM_SETSEL,-1,-1);
SendMessage(hwndBuffer, EM_REPLACESEL, TRUE, (LPARAM) buffer );

posted @ 2008-03-25 20:01 Randy 閱讀(1413) | 評論 (1)編輯 收藏

可變參數函數設計

#include "stdafx.h"
#include 
<stdio.h>
#include 
<stdarg.h>

int mul(int num,int data1,)
{
    
int total = data1;
    
int arg,i;
    va_list ap;
    va_start(ap,data1);
    
for(i=1;i<num;i++)
    {
        arg 
= va_arg(ap,int);
        total
*=arg;
    }
    va_end(ap);
    
return total;
}

long mul2(int i,)
{
    
int *p,j;
    p 
= &i+1;//p指向參數列表下一個位置
    long s = *p;
    
for (j=1;j<i;j++)
        s 
*= p[j];
    
return s;
}

int main()
{
    printf(
"%d\n",mul(3,2,3,5));
    printf(
"%d\n",mul2(3,2,3,5));
    
return 0;
}



printf的設計
#include "stdio.h"
#include 
"stdlib.h"
#include 
<stdarg.h>

void myprintf(char* fmt, )        //一個簡單的類似于printf的實現,//參數必須都是int 類型
{
    
//char* pArg=NULL;               //等價于原來的va_list
    va_list pArg;
    
char c;
   
   
// pArg = (char*) &fmt;          //注意不要寫成p = fmt !!因為這里要對參數取址,而不是取值
  
// pArg += sizeof(fmt);         //等價于原來的va_start         
    va_start(pArg,fmt);

    
do
    {
        c 
=*fmt;
        
if (c != '%')
        {
            putchar(c);            
//照原樣輸出字符
        }
        
else
        {
//按格式字符輸出數據
            switch(*++fmt)
            {
            
case 'd':
                printf(
"%d",*((int*)pArg));           
                
break;
            
case 'x':
                printf(
"%#x",*((int*)pArg));
                
break;
            
case 'f':
                printf(
"%f",*((float*)pArg));
            
default:
                
break;
            }
            
//pArg += sizeof(int);               //等價于原來的va_arg
            va_arg(pArg,int);
        }
        
++fmt;
    }
while (*fmt != '\0');
    
//pArg = NULL;                               //等價于va_end
    va_end(pArg);
    
return;
}
int main(int argc, char* argv[])
{
    
int i = 1234;
    
int j = 5678;
   
    myprintf(
"the first test:i=%d",i,j);
    myprintf(
"the secend test:i=%f; %x;j=%d;",i,0xabcd,j);
    system(
"pause");
    
return 0;
}


可變參數在編譯器中的處理 

    我們知道va_start,va_arg,va_end是在stdarg.h中被定義成宏的, 由于1)硬件平臺的不同 2)編譯器的不同,所以定義的宏也有所不同,下面以VC++stdarg.hx86平臺的宏定義摘錄如下(’"’號表示折行):
typedef char * va_list; 
#define _INTSIZEOF(n) \ 
((
sizeof(n)+sizeof(int)-1)&~(sizeof(int- 1) ) 
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) 
#define va_arg(ap,t) \ 
*(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) 
#define va_end(ap) ( ap = (va_list)0 ) 

    定義_INTSIZEOF(n)主要是為了某些需要內存的對齊的系統.C語言的函數是從右向左壓入堆棧的,(1)是函數的參數在堆棧中的分布位置.我們看到va_list被定義成char*,有一些平臺或操作系統定義為void*.再看va_start的定義,定義為&v+_INTSIZEOF(v),&v是固定參數在堆棧的地址,所以我們運行va_start(ap, v)以后,ap指向第一個可變參數在堆棧的地址,如圖:

高地址|-----------------------------| 
|函數返回地址 | 
|-----------------------------| 
|| 
|-----------------------------| 
|第n個參數(第一個可變參數) | 
|-----------------------------|<--va_start后ap指向 
|第n-1個參數(最后一個固定參數)| 
低地址
|-----------------------------|<-- &
圖( 
1 ) 

    然后,我們用va_arg()取得類型t的可變參數值,以上例為int型為例,我們看一下va_argint型的返回值: j= ( *(int*)((ap += _INTSIZEOF(int))-_INTSIZEOF(int)) );
首先ap+=sizeof(int),已經指向下一個參數的地址了.然后返回ap-sizeof(int)int*指針,這正是第一個可變參數在堆棧里的地址(2).然后用*取得這個地址的內容(參數值)賦給j.

高地址|-----------------------------| 
|函數返回地址 | 
|-----------------------------| 
|| 
|-----------------------------|<--va_arg后ap指向 
|第n個參數(第一個可變參數) | 
|-----------------------------|<--va_start后ap指向 
|第n-1個參數(最后一個固定參數)| 
低地址
|-----------------------------|<-- &
圖( 
2 ) 

    最后要說的是va_end宏的意思,x86平臺定義為ap=(char*)0;使ap不再指向堆棧,而是跟NULL一樣.有些直接定義為((void*)0),這樣編譯器不會為va_end產生代碼,例如gcclinuxx86平臺就是這樣定義的.在這里大家要注意一個問題:由于參數的地址用于va_start,所以參數不能聲明為寄存器變量或作為函數或數組類型.關于va_start, va_arg, va_end的描述就是這些了,我們要注意的是不同的操作系統和硬件平臺的定義有些不同,但原理卻是相似的

posted @ 2008-03-05 13:55 Randy 閱讀(185) | 評論 (0)編輯 收藏

assert

讓assert嵌入更多的信息

assert(src!=0 && "VectorNormalize: src vector pointer is Null");
assert(dst!=0 && "VectorNormalize: dst vector pointer is Null");

有了這個直觀的字符串提示,就可以告訴當前的函數名,錯誤原因。

posted @ 2008-03-05 13:53 Randy 閱讀(167) | 評論 (0)編輯 收藏

typeid Operator

// compile with: /GR /EHsc
#include <iostream>
#include <typeinfo.h>

template < typename T > T max( T arg1, T arg2 ) {
   cout << typeid( T ).name() << "s compared." << endl;
   return ( arg1 > arg2 ? arg1 : arg2 );
}

返回類型的名字

posted @ 2008-02-15 10:27 Randy 閱讀(177) | 評論 (0)編輯 收藏

#pragma data_seg——新的嘗試

 

                 

#pragma data_seg之前從來沒有用過,今天找出了它的一個妙用。

持續整理中......

#pragma data_seg介紹

 

應用一:單應用程序。

    有的時候我們可能想讓一個應用程序只啟動一次,就像單件模式(singleton)一樣,實現的方法可能有多種,這里說說用#pragma data_seg來實現的方法,很是簡潔便利。

應用程序的入口文件前面加上

#pragma data_seg("flag_data")
int app_count = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:flag_data,RWS")

然后程序啟動的地方加上

 if(app_count>0)    // 如果計數大于0,則退出應用程序。
 {
  //MessageBox(NULL, "已經啟動一個應用程序", "Warning", MB_OK);

  //printf("no%d application", app_count);

  return FALSE;
 }
 app_count++;

posted @ 2008-02-14 15:17 Randy 閱讀(877) | 評論 (0)編輯 收藏

Loki庫研究-Factory,AbstractFactory

上個星期, ric和我提出了這樣一個問題,就是一個人物技能體系,如何設定,比較原始的方法是,設立一個純虛基類,然后一層一層的派生,但是這樣有一個問題..就是如何出現兩個不同的派生體系對同一功能需求.這樣...就只能在兩個派生體系中都設定一份..造成代碼的無復用和龐大.雖然這點可以在前期避免,但是沒有人是神......前期構架無法得到最后的結構,構架總是在調整,我第一次提出的方法是..將每有功能以組件形式提供,在相應的功能需求者里組裝,這個思路是可以..但是實現起來有點郁悶,因為我不知道是用單純的類new...還是使用單件來做更好,相反,,我到是覺得這兩種都不好.
帶著這樣的需求和思路,去研究了一下Loki的Factory,AbstractFactory  類廠與抽象類廠.
Factoy可以理解為一個可以保存類的表,通過Register方法,將類以數字或字符的形式,保存起來,當然需要提供一個可以在內部new的函數.在使用用通過
在注冊時的類標示,加上CreateObject方法來返回相應的類指針,其實就相當于一個類表.我們可以通過我們自定義的標示來創建相對應的類.
AbstractFactory 可以理解為抽象的類表,就是在前期不需要提供相應的可以在內部new的函數,只需要提供類就可以注冊為一個類廠,在使用時.通過類來進行創建,最大的區別是...AbstractFactory 本身就提供組裝的概念.可以在設定基本工廠之后,根據基本工廠,設定具體工廠模型.在使用時,可以通過具體工廠模型得到在具體工廠模型中注冊的類,最大的區別時,,可以通過注冊類的基類.也就是基本工廠中注冊類來得到.這樣很爽..但是.還沒有想清楚在真正的人物技能體系中,如何去使用這個東東.偶滴神啊......讓偶想清楚吧...下面給些具體的例子

factory:
Factory< AbstractProduct, int > aFactory;
  aFactory.Register( 1, createProductNull );<br>
  aFactory.CreateObject( 1 );

AbstractFactory:
typedef ::Loki::AbstractFactory< LOKI_TYPELIST_3(Soldier, Monster, SuperMonster)>  \
AbstractEnemyFactory;


typedef ::Loki::ConcreteFactory<AbstractEnemyFactory, ::Loki::OpNewFactoryUnit,     \
LOKI_TYPELIST_3(SillySoldier, SillyMonster, SillySuperMonster)>
EasyLevelEnemyFactory;

typedef ::Loki::ConcreteFactory<AbstractEnemyFactory, ::Loki::OpNewFactoryUnit,     \
LOKI_TYPELIST_3(BadSoldier, BadMonster, BadSuperMonster)>
DieHardLevelEnemyFactory;

switch (id)
  {
  case 0:
   {
    pFactory = new EasyLevelEnemyFactory;
   }
   break;
  case 1:
   {
    pFactory  = new DieHardLevelEnemyFactory;
   }
   break;
  }

the.Select(0);
SmartPtr<Soldier>::Ptr pMonster = the.pFactory->Create<Soldier>();

posted @ 2007-11-05 08:06 Randy 閱讀(786) | 評論 (0)編輯 收藏

Loki庫研究-消息回調機制實現

最早以前.就說要好好研究一下Loki庫..一直都忘記..要么就有事.剛好這幾天要寫一個事件ID與事件處理函數的綁訂機制.就想起來Loki的functor來了...花了兩天時間仔細研究了下loki中的幾個實現.全部明白不敢說..不過確實明白了..這種思路..在這里也要多謝權哥...呵呵
我是從具體的現實思路出發.來研究loki的..我的實現目地.是可以便捷的綁訂事件ID與事件處理函數,在回調事件處理函數時.不會有以前使用函數地址注冊時所產生的問題,比如.回調的函數中無法正常使用函數所歸屬類的信息.無法綁訂同一類不同對象的實現方法

首先先來研究..實現思路應該是一樣的..同樣是綁訂函數地址.這點.loki的functor以前幫我做好了.剩下的.只是如何能更好的使用
loki 的一個functor只能綁訂一個函數,
思路是,預先申請一個足夠大的functor數組,將每個申請的functor存入這個數組中,以數組的下標做為處理函數的ID;

解決了回調函數的問題,然后就是事件ID了.這個有點郁悶.實現思路有點繞.

首先事件ID肯定是聲明了的.然后利用聲明的事件ID自動生成相應的事件結構體,則于事件回調不需要變動參數,所以
所有結構體都派生自同一基體,然后就通過事件結構體中的事件ID來進行綁訂,這樣可以確訂聲明的處理方法必須隸屬于
某一個對應的事件ID,這點在回調注冊時也可以保證,默認要注冊兩個ID.用于判定當前ID是否超過以聲明的范圍 ,EventBegin  EventEnd;

解決了事件ID之后..就是它們之前的綁訂了.這個簡單.在聲明進.先傳入事件結構體,再傳入用同樣事件結構體聲明的回調函數,然后將回調函數
放入相對應以事件ID做為下標的數組中.搞定

最后還有一個消息分派的問題,這個地方有很多做法,,,暫時我先用最簡單
由外界傳入一個觸發的事件ID,然后判定 這個ID是否合法,然后回調對應下標的functor...這樣..就回調了相應的處理函數了,參數這里
做的最簡單化處理,只是聲明了一個結構體,然后.將事件ID賦值,然后把結構體傳入回調函數,以后有需要的話..此結構體可由外界傳入
相應的值由外界傳入,不過..一個事件回調....貌似沒有這種要求

呵呵..總之對于模板編程,有了一個比較清晰的了解..最大的收獲就是,看著滿篇的模板,四處亂飛的typename typedef class..不再頭暈了...呵呵

在這個過程中..還研究了..單件模式,智能指針,抽象化工廠,呵呵..收獲非常大..也感覺自己以前的實現太不優雅了...以后要往優雅方向努力啦

Loki的單件模式非常Happy.....以后決定..徹底忘記自己 寫的單件...看都不看....專心用loki的.....還有智能指針..不過智能指針有個不爽的地方
..也不是不爽..只是我感覺失落....為啥呢...因為智能指針無法控制它什么時候釋放.......它自己會釋放..這樣雖然..安全都有保證,用著也開心....
不過....忽然不用我釋放了...總是覺得心里少點啥.........想delete......哈哈

變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~變高手~~~~~

posted @ 2007-11-02 18:19 Randy 閱讀(1418) | 評論 (0)編輯 收藏

MaxUserPort

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

Description

Determines the highest port number TCP can assign when an application requests an available user port from the system. Typically, ephemeral ports (those used briefly) are allocated to port numbers 1024 through 5000.


Windows 2000 does not add this entry to the registry. You can add it by editing the registry or by using a program that edits the registry.

posted @ 2007-10-29 12:53 Randy 閱讀(251) | 評論 (0)編輯 收藏

粒子編輯器

這兩天的工作。就是重做粒子編輯器。。。原有的粒子編輯器。是使用自制的UI。極大的妨礙了擴展。和使用的便捷性。經過這兩天的重制。將原有的功能重新以MFC控件重現。接下來就是擴展原有的粒子效果了。。。。發張圖來秀一下

posted @ 2007-10-26 20:27 Randy 閱讀(527) | 評論 (1)編輯 收藏

僅列出標題
共4頁: 1 2 3 4 
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

導航

統計

常用鏈接

留言簿(3)

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            蜜臀91精品一区二区三区| 欧美国产在线视频| 久久欧美中文字幕| 欧美中文在线观看国产| 亚洲欧美另类中文字幕| 一本色道久久综合狠狠躁篇怎么玩| 91久久国产综合久久91精品网站| 亚洲国产精品日韩| 在线观看福利一区| 亚洲精品国久久99热| 亚洲午夜av在线| 久久精品99国产精品日本| 你懂的视频欧美| 亚洲欧洲视频在线| 欧美激情一二三区| 亚洲天堂免费在线观看视频| 欧美在线观看天堂一区二区三区| 亚洲精品欧美一区二区三区| 欧美成人精品在线视频| 欧美二区乱c少妇| 欧美日韩综合视频网址| 国产毛片久久| 亚洲国产美女精品久久久久∴| 在线亚洲美日韩| 美女精品视频一区| 亚洲无线一线二线三线区别av| 欧美在线观看你懂的| 欧美激情a∨在线视频播放| 国产精品免费网站| 99视频一区二区| 久久亚洲综合网| 亚洲视屏一区| 欧美国产日本| 日韩亚洲在线观看| 亚洲国产一区在线| 午夜精品久久久久久久99水蜜桃| 欧美a级片一区| 一本色道久久综合亚洲91| 欧美专区日韩专区| 欧美系列电影免费观看| 亚洲国产三级网| 久久久噜噜噜| 亚洲美女在线视频| 欧美成人免费网| 亚洲国产成人tv| 美女久久网站| 久久精品男女| 狠狠色综合网站久久久久久久| 亚洲在线视频免费观看| 91久久国产综合久久| 久久久视频精品| 国产综合视频| 久久精品av麻豆的观看方式| 一区二区三区国产在线| 欧美三日本三级少妇三2023| 99re视频这里只有精品| 亚洲国产精品久久久久婷婷884| 欧美中文字幕视频在线观看| 国产精品久久国产三级国电话系列| 亚洲久久一区二区| 亚洲精品一区二区三区四区高清 | 欧美a级片网站| 亚洲第一页在线| 久久色中文字幕| 久久精品国产99精品国产亚洲性色| 国产欧美精品日韩精品| 亚洲欧美国产va在线影院| 一本色道久久综合狠狠躁篇怎么玩| 欧美三级日韩三级国产三级| 在线中文字幕一区| 在线一区观看| 国产精品亚洲综合| 久久躁狠狠躁夜夜爽| 噜噜噜久久亚洲精品国产品小说| 韩日视频一区| 免费在线成人| 欧美精品一区二区三区视频| 日韩香蕉视频| 一本大道久久a久久综合婷婷| 欧美日韩国产页| 欧美一级成年大片在线观看| 欧美一区亚洲二区| 亚洲精品亚洲人成人网| 亚洲视屏在线播放| 亚洲电影免费观看高清完整版| 亚洲国产精品热久久| 欧美日本在线视频| 欧美一区二区视频免费观看| 久久av二区| 亚洲天堂第二页| 9色国产精品| 久久久噜噜噜久噜久久| 久久婷婷麻豆| 亚洲视频网站在线观看| 亚洲欧美在线观看| 在线观看中文字幕亚洲| 91久久精品一区二区三区| 欧美三级在线视频| 麻豆精品精品国产自在97香蕉| 欧美精品1区| 玖玖玖国产精品| 国产精品久久久久永久免费观看| 久久久久久国产精品mv| 欧美大片一区二区| 久久人人爽人人爽爽久久| 欧美日韩国产成人在线观看| 久久精品1区| 欧美日本一区二区高清播放视频| 久久激情一区| 欧美三级电影大全| 欧美.日韩.国产.一区.二区| 欧美日韩三级| 免费一级欧美片在线播放| 国产精品久久激情| 亚洲青涩在线| 亚洲成人在线免费| 欧美有码在线视频| 新片速递亚洲合集欧美合集| 麻豆精品91| 六月婷婷一区| 国内精品久久久久久影视8| 亚洲视频久久| 亚洲一区二区三区影院| 欧美成人官网二区| 老牛嫩草一区二区三区日本 | 国产精品久久久99| 亚洲第一区在线| 国产婷婷成人久久av免费高清| 一区二区三区成人| 亚洲香蕉网站| 欧美日韩一区综合| 亚洲精品免费一二三区| 亚洲精选视频免费看| 欧美a级理论片| 亚洲国产精品高清久久久| 激情综合色丁香一区二区| 午夜视频一区在线观看| 欧美一区免费视频| 国产综合色在线视频区| 久久久xxx| 你懂的网址国产 欧美| 在线观看成人小视频| 免费亚洲电影在线| 91久久国产自产拍夜夜嗨| 99热这里只有精品8| 欧美高清在线一区二区| 鲁大师成人一区二区三区| 亚洲成人在线视频播放| 免费高清在线视频一区·| 亚洲国产精品久久久| 日韩视频免费在线观看| 欧美日韩免费观看一区=区三区| 日韩视频一区二区三区| 亚洲欧美另类在线观看| 国产亚洲欧美日韩精品| 美国十次了思思久久精品导航| 国产精品成人一区二区| 亚洲欧美日韩一区二区在线| 欧美国产日韩在线观看| 亚洲国产精品免费| 亚洲午夜精品在线| 国产欧美日韩综合精品二区| 亚洲国产成人久久综合一区| 久久精品一区二区三区四区| 欧美福利网址| 中文日韩在线视频| 国产精品日韩欧美综合| 久久久久久久久久久一区| 亚洲高清视频中文字幕| 亚洲免费在线视频一区 二区| 国产精品一区二区久久久| 久久av在线| 99这里只有精品| 午夜精彩视频在线观看不卡| 日韩视频中午一区| 国产精品另类一区| 久久夜色精品亚洲噜噜国产mv | 亚洲黄色免费电影| 亚洲小说区图片区| 今天的高清视频免费播放成人| 欧美韩日亚洲| 欧美在线视频日韩| 99v久久综合狠狠综合久久| 久久免费视频一区| 亚洲一区欧美激情| 亚洲黄色天堂| 国内精品久久久久久久97牛牛| 欧美日韩色综合| 久久综合999| 午夜精品久久久久久久久久久久| 亚洲高清不卡av| 久久亚洲一区二区三区四区| 亚洲一区欧美激情| 日韩一级精品视频在线观看| 国产午夜精品久久| 国产精品久久影院| 欧美日韩1080p| 美日韩精品视频| 久久一区二区三区av| 欧美亚洲系列|