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

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

Windows API 技巧集

一)不規則窗口

  Windows提供的只是標準的矩形窗口,要想建立一個不規則的窗口就需要調用API函數來實現。建立一個不規則的窗口,一般是先用創建區域的API函數建立一個不規則的區域,再用API函數SetWindowRgn改變窗口的區域。這些API函數在C++ Builder中包含在頭文件wingdi.h和winuser.h里面,因此,要使用這些API函數就要先在程序頭部加上包含頭文件的語句:

include <wingdi.h>

include <winuser.h>

  SetWindowRgn函數能改變一個窗口的區域,該函數有三個參數,第一個參數hWnd是欲設置區域的窗口句柄,第二個參數hRgn是欲設置的區域,第三個參數bRedraw一般設為true,即立即重畫窗口。

  用來創建區域的API函數有多個,最常用的有三個:

  1、CreateRectRgn函數,用來創建一個由X1、Y1和X2、Y2坐標點確定的矩形區域。當坐標點X1和Y1相等、X2和Y2也相等的時候,創建的是一個正方形。

  例子:

//創建長方形

HRGN hRect=CreateRectRgn(0,0,400,200);

SetWindowRgn(Handle,hRect,true);

//創建正方形

HRGN hRect=CreateRectRgn(0,0,300,300);

SetWindowRgn(Handle,hRect,true);

  2、CreateEllipticRgn函數,用來創建一個由X1、Y1和X2、Y2坐標點確定的矩形所內切的橢圓。同樣,X1、Y1和X2、Y2坐標點所確定的矩形為正方形時,創建的就是一個圓形。

  例子:

//創建橢圓

HRGN hElliptic=CreateEllipticRgn(0,0,400,250);

SetWindowRgn(Handle,hElliptic,true);

//創建圓形

HRGN hElliptic=CreateEllipticRgn(0,0,400,400);

SetWindowRgn(Handle,hElliptic,true);

  3、CombineRgn函數,能將兩個區域組合為一個新區域,它有四個參數,第一個參數hrgnDest保存合并后的新區域,第二個參數hrgnSrc1、三個參數hrgnSrc2為欲合并的兩個區域,第四個參數fnCombineMode是區域組合的方式,它的值是為下面組合方式之一:

  組合方式 說明

RGN_AND 建立兩個區域的交集

RGN_COPY 建立hrgnSrc1的拷貝

RGN_DIFF 建立兩個區域不相交的部分

RGN_OR 建立兩個區域的并集

RGN_XOR 建立除兩個區域并集之外的部分

  例子:

//創建一個圓形和長方形交集的組合形狀

HRGN hRect=CreateRectRgn(0,0,300,300);

HRGN hElliptic=CreateEllipticRgn(0,0,400,250);

CombineRgn(hRect,hRect,hElliptic,RGN_OR);

SetWindowRgn(Handle,hRect,true);

  當需要將窗口還原為標準Windows矩形窗口時,只要將SetWindowRgn函數的hRgn參數設為0就行了,如:

SetWindowRgn(Handle,0,true);

(一)閃爍程序的標題欄

  在某些專業的應用程序中,當程序需要提醒用戶或要引起用戶的注意時,就不停地閃爍程序的標題欄。要實現這個功能,只需要一個Timer組件和使用一個API函數--FlashWindow。

  使用API函數FlashWindow可以閃爍顯示指定窗口,讓窗口在活動與非活動的狀態之間切換,它有兩個參數:hwnd和bInvert,頭文件為“winuser.h”。其中,參數hwnd為要閃爍的窗口句柄,參數bInvert是一個bool變量,設為true時,程序窗口標題欄從活動切換到非活動狀態、或反向切換,當設為false時,窗口標題欄還原為最初的狀態。如果配合一個時間組件(Timer組件),以一定的時間間隔執行語句:

FlashWindow(Form1->Handle,true);

程序窗口的標題欄就在活動、非活動的狀態之間不停地切換。若把hwnd指定成為應用程序的句柄(Application->Handel),將會閃爍程序在任務欄上的標題欄。

  下面就讓我們來做一個閃爍窗口標題欄和任務欄上標題欄的程序。

  首先,在Form1中添加三個按鈕Button1、Button2和Button3,把它們的屬性分別為“閃爍窗口標題欄”、“閃爍任務標題欄”和“停止閃爍”,再加入兩個時間組件Timer1和Timer2,將兩個Timer組件的Enabled屬性都設為false,將Interval屬性都設為為500(即半秒),改變這個屬性的值可以修改閃爍的頻率。

  然后雙擊Timer1,在OnTimer事件中加入:

FlashWindow(Form1->Handle,true);

  雙擊Timer2,在OnTimer事件中加入:

FlashWindow(Application->Handel,true);

  雙擊Button1,在Button1的OnClick事件中加入:

Timer1->Enabled=true;

  雙擊Button2,在Button2的OnClick事件中加入:

Timer2->Enabled=true;

  最后雙擊Button3,在Button3的OnClick事件中加入:

Timer1->Enabled=false;

Timer2->Enabled=false;

FlashWindow(Form1->Handle,false);

FlashWindow(Application->Handel,false);

  這樣一個簡單的例子就完成了。按F9編譯運行程序,你就可閃爍窗口標題欄或是閃爍任務欄上的標題欄了。
(二)拖動無標題窗體

  現在的Windows應用程序,大都使用了圖形化的界面、不規則窗口技術,使得程序界面更加漂亮了。但是,使用界面一般要先把窗體的標題欄去掉(在BCB中,將窗體的BorderStyle屬性設為bsNone,就可以把窗體的標題欄去掉),這樣就不能使用原來的標題欄了,出現了窗口不能移動的問題。沒有標題欄怎樣用鼠標拖動窗體呢?我們可以使用Windows的API函數SendMessage來解決這個問題。

  首先新建一個工程,把窗體的BorderStyle屬性設為bsNone去掉窗體的標題欄,按F12鍵切換到代碼編輯窗口,在頭部加入包含頭文件"winuser.h"的代碼:

#include <winuser.h>

  然后在窗體的 OnMouseDown 事件中加入下面的代碼:

if(Button == mbLeft)//判斷是否按了鼠標左鍵

{

ReleaseCapture();//釋放鼠標操作

SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

}

  這樣
用鼠標左鍵點住窗口拖動,就可以實現拖動沒有標題的窗口了。也可以在窗體上添加組件,然后在該組件的 OnMouseDown 事件中加入上面的代碼,這樣也可以點住這個組件拖動窗口。你還可以把SendMessage函數的第一個參數修改為這個組件的句柄,如:往窗體添加一個Button組件,在它的 OnMouseDown 事件中加入上面的代碼,其中把SendMessage那行語句改為:

SendMessage( Button1->Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

這樣就可以在程序運行時,用鼠標在窗口的范圍內移動Button1了。
(三)隱藏程序在任務欄的圖標

  使用API函數ShowWindow可以隱藏一個程序在任務欄的圖標,它被包含在頭文件“winuser.h”里面。

  1、隱藏任務欄圖標的代碼就是:

ShowWindow(Application->Handle, SW_HIDE);

  2、要重新顯示的時候就使用:

ShowWindow(Application->Handle, SW_SHOW);

  但是,如果將程序最小化后,在任務欄的圖標就會重新出現。若要在程序還原最小化后,程序在任務欄的圖標重新被隱藏起來,可以在窗體的OnPaint事件中加入隱藏程序在任務欄的圖標的代碼,這樣,程序只有在最小化時任務欄才會出現圖標,當程序還原最小化時圖標又會重新被隱藏起來。
(四)重啟、關閉Windows

  當用戶修改了Windows里面的一些設置,Windows經常會提問是否要重新啟動計算機,當用戶點Yes的時候,計算機將會自動重啟。這個就是API函數ExitWindowsEx的一個典型的應用

  ExitWindowsEx,顧名思義就是退出Windows的函數,它有兩個參數,第一個是退出Windows的選項,常用的有:EWX_REBOOT(重新啟動計算機),EWX_SHUTDOWN(關閉計算機),EWX_LOGOFF(注銷當前用戶),第二個參數系統保留沒有使用,可設為0。

  在自編的程序中(如:注冊表修改程序),當用戶修改了某項設置需要重新啟動計算機的時候,就要使用EWX_REBOOT選項重啟計算機。

ExitWindowsEx(EWX_REBOOT,0);

  使用WX_SHUTDOWN選項,可以實現關機。

ExitWindowsEx(EWX_SHUTDOWN,0);

  當需要注銷的時候,就使用EWX_LOGOFF選項。

ExitWindowsEx(EWX_LOGOFF,0);

----------------------------
函數名:

  SetWindowPos

頭文件:

  winuser.h

函數原型:

  BOOL SetWindowPos
  (
  HWND hWnd, //窗口句柄
  HWND hWndInsertAfter, //排列順序的句柄
  int X, //水平坐標
  int Y, //垂直坐標
  int cx, //寬
  int cy, //高
  UINT uFlags //窗口定位標識
  );

說明:

  這個函數能改變窗口的大小、位置和設置子窗口、彈出窗口或頂層窗口的排列順序。
  返回值:

  BOOL,如果返回值非零表示成功,返回零表示失敗。錯誤信息請參看GetLastError函數。

參數表:

  參數 類型及說明
  hwnd HWND,欲定位的窗口句柄
  hWndInsertAfter HWND,置于hwnd前面的窗口句柄。這個參數必須是窗口的句柄或是下面的值之一:    HWND_BOTTOM 將窗口置于其它所有窗口的底部
  HWND_NOTOPMOST 將窗口置于其它所有窗口的頂部,并位于任何最頂部窗口的后面。如果這個窗口非頂部窗口,這個標記對該窗口并不產生影響
  HWND_TOP 將窗口置于它所有窗口的頂部
  HWND_TOPMOST 將窗口置于其它所有窗口的頂部,并位于任何最頂部窗口的前面。即使這個窗口不是活動窗口,也維持最頂部狀態

x: 
 
  int,指定窗口新的X坐標

Y:  

  int,指定窗口新的Y坐標

cx:  

  int,指定窗口新的寬度

cy: 
 

  int,指定窗口新的高度

wFlags:

  UINT,指定窗口狀態和位置的標記。這個參數使用下面值的組合: SWP_DRAWFRAME 圍繞窗口畫一個框
  SWP_FRAMECHANGED 發送一條WM_NCCALCSIZE消息進入窗口,即使窗口的大小沒有發生改變。如果不指定這個參數,消息WM_NCCALCSIZE只有在窗口大小發生改變時才發送
  SWP_HIDEWINDOW 隱藏窗口
  SWP_NOACTIVATE 不激活窗口
  SWP_NOCOPYBITS 屏蔽客戶區域
  SWP_NOMOVE 保持當前位置(X和Y參數將被忽略)
  SWP_NOOWNERZORDER 不改變所有窗口的位置和排列順序
  SWP_NOREDRAW 窗口不自動重畫
  SWP_NOREPOSITION 與SWP_NOOWNERZORDER標記相同
  SWP_NOSENDCHANGING 防止這個窗口接受WM_WINDOWPOSCHANGING消息
  SWP_NOSIZE 保持當前大小(cx和cy會被忽略)
  SWP_NOZORDER 保持窗口在列表的當前位置(hWndInsertAfter將被忽略)
  SWP_SHOWWINDOW 顯示窗口


備注:

  如果設置了SWP_SHOWWINDOW或SWP_HIDEWINDOW標記,這個窗口不發生移動或改變大小。窗口成為最頂級窗口后,它的所有子窗口也會進入最頂級。一旦將其設為非最頂級,則它的所有子窗口也會轉為非最頂級。

相關函數

  MoveWindow,SetActiveWindow,SetForegroundWindow

例子:

  //設置頂層窗口
  SetWindowPos( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);

  //取消頂層窗口
  SetWindowPos( Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);
超級鏈接效果

   在很多共享軟件的關于對話框里有一些模仿網頁的超級鏈接,如主頁URL或E-Mail之類的,當鼠標移到它上面的時候,文字變成紅色的,當鼠標離開時,文字又變回原來的藍色,如果用鼠標點擊這個鏈接則會彈出瀏覽器窗口打開指定的URL或是運行默認的E-Mail程序撰寫新郵件,就和真的超鏈接一樣。你是不是也想在你的程序里做一個呢?其實,我們只要調用API函數ShellExecute和在鼠標移動時改變一下文字的顏色,就可以在自己的程序中出現這種效果。

  首先新建一個工程,在窗體Form1上添加兩個Label組件,它們的Name屬性使用默認的Label1和Label2。

  然后在Form1的OnCreate事件中加入代碼:

Label1->Cursor=crHandPoint;

Label2->Cursor=crHandPoint;

Label1->Font->Color =clBlue;

Label2->Font->Color =clBlue;

Label1->Caption="主頁:初學者之家網站";

Label2->Caption="E-Mail:fdlweb@sina.com";

  再在Label1的OnClick(單擊)事件中加入:

//藍色的字請改成自己的主頁地址

ShellExecute(Handle,NULL,"http://fdlweb.myrice.com/",NULL,NULL,SW_SHOWNORMAL);

  在OnMouseMove事件中加入:

Label1->Font->Color=clRed;

  在Label2的OnClick事件中加入:

//藍色的字請改成自己郵箱地址

ShellExecute(Handle,NULL,"mailto:fdlweb@sina.com",NULL,NULL,SW_SHOWNORMAL);

  在OnMouseMove事件中加入:

Label2->Font->Color=clRed;

  最后在Form1的OnMouseMove事件中加入:

Label1->Font->Color=clBlue;

Label2->Font->Color=clBlue;

  代碼輸入完了,按F9編譯運行程序就看到效果了。
拷貝屏幕

  BitBlt函數可以將一幅位圖從一個設備場景拷貝到另一個設備場景,這個函數經常用在抓圖程序和游戲編程方面,也可以用來做基于桌面的屏幕保護程序。下面讓我們用BitBlt函數來做一個虛假桌面的程序:

  首先,添加一個Image組件到窗體中,將窗體Form1的BorderStyle屬性設為:bsNone。

  接著在窗體的OnCreate事件加入程序代碼:

Left=0;

Top=0;

Width=Screen->Width;

Height=Screen->Height;

Image1->Left=0;

Image1->Top=0;

Image1->Width=Screen->Width;

Image1->Height=Screen->Height;

//這句代碼就是將桌面拷貝到組件Image1中來存放,

// 其中GetDC(0)返回桌面設備的句柄(HDC)

BitBlt(Image1->Canvas->Handle,0,0,Screen->Width,Screen->Height,GetDC(0),0,0,SRCCOPY);

  按F9運行,一個假的桌面就出來了,在這個“桌面”上怎么按鼠標都沒有反應,可以用來捉弄人喔!。有些桌面的小游戲也是這么干的,你可以在這個程序的基礎上加上更多的功能,如在窗體上加上Label組件和Timer組件,用Timer組件來控制Label組件在窗體上移動,再在窗體Form1的OnKeyDown事件和Image1的OnMouseDown事件中加入關閉窗口的代碼“Close();”,最后將編譯了的程序的擴展名改為scr,這就成了一個文字在桌面上亂動的屏幕保護程序了。
取得磁盤總空間和剩余空間

  要取得磁盤總空間和剩余空間,最簡單直接的方法是調用API函數 GetDiskFreeSpace。

  GetDiskFreeSpace函數有5個參數,第一個參數是要判斷可用空間的驅動器名,第二個參數是一個存放每簇扇區數的變量,第三個參數是一個存放每扇區字節數的變量,第四個參數是存放剩余簇數的變量,第五個參數是存放總簇數的變量。套用相應計算磁盤空間的公式即可得出指定驅動器的總空間或剩余空間。

磁盤總空間和剩余空間的計算公式分別為:

  磁盤上剩余空間(字節) = 簇的扇區數 * 扇區的字節數 * 剩余簇數

  磁盤上總空間(字節) = 簇的扇區數 * 扇區的字節數 * 總簇數

下面就是取得C盤的總空間和剩余空間的例子:

unsigned long Sectors,Bytes,Free,Total;

GetDiskFreeSpace("C:\\",&Sectors,&Bytes,&Free,&Total);

//可用空間(單位:MB)

int FreeKB = Bytes * Sectors * Free / 1024;

//總空間(單位:MB)

int TotalKB = Bytes * Sectors * Total / 1024;

ShowMessage("C盤的可用空間有:" + IntToStr(FreeKB) + "MB,總空間有:" + IntToStr(TotalKB) +"MB");
--------------------------
 
提取圖標


  調用API函數ExtractIcon可以提取出在程序文件中的圖標,它的頭文件是shellapi.h,原型為:

HICON ExtractIcon
(
HINSTANCE hInst, //實例句柄
LPCTSTR lpszExeFileName, //要提取圖標的那個程序的文件名
UINT nIconIndex //要提取的圖標的索引
);

  調用該函數時,參數hInst一般設為當前應用程序的實例句柄,如:Form1->Handle。

  參數lpszExeFileName為需要提取圖標的程序文件的完整路徑,這個程序文件可以是EXE文件、DLL文件、ICO文件等,只要是包含有圖標資源的文件一般都可以提取圖標。

  當參數nIconIndex指定一個圖標的索引可以返回指向圖標的句柄,如指定的文件中不存在圖標,則返回零,當參數nIconIndex設為-1,函數返回文件的圖標總數。

  函數返回的句柄可以賦給一個用TIcon類聲明的變量,再使用該變量的SaveToFile方法就可以把圖標保存出來。

例子:

TIcon *Icon = new TIcon();
AnsiString FileName = "C:\\WINDOWS\\SYSTEM\\SHELL32.DLL";
int TotalIcon;
//得到文件SHELL32.DLL的總圖標數
TotalIcon = (int)ExtractIcon(Form1->Handle,FileName.c_str(), -1);
//提取第一個圖標,0為第一個,1為第二個,類推...
Icon->Handle = ExtractIcon( Form1->Handle, FileName.c_str(), 0);
//保存圖標
Icon->SaveToFile("C:\\1.ICO");
下面給出一個完整的圖標提取程序源碼。

  這個程序需要四個按鈕控件(Button)、四個文本標簽控件(Label)、兩個文本框控件(Edit)、一個水平滾動條控件(ScrollBar)、一個打開文件對話框控件(OpenDialog)、一個保存文件對話框控件(SaveDialog)和一個圖片控件(Image),還有一個Panel控件是裝飾用的。界面如圖所示:

             

  把各個控件排列好,再把四個Label控件的Caption屬性修改一個,最后輸入程序代碼,運行程序,一個提取圖標的程序就出來了,你以后也就不會為沒有圖標資源可用而發愁了。

程序清單(Unit1.cpp):
//----------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include 
"Unit1.h"
//----------------------------------------------------------------
#pragma package(smart_init)
#pragma resource 
"*.dfm"
TForm1 
*Form1;
AnsiString FileName;
TIcon 
*Icon = new TIcon();
int TotalIcon;
//----------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}


//----------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{

Caption
="圖標小偷 1.0";
Button1
->Caption="選擇文件";
Button2
->Caption="保存圖標";
Button3
->Caption="保存所有";
Button4
->Caption="退出";
Edit1
->Text=0;
Edit2
->Text=0;
Image1
->Width=32;
Image1
->Height=32;
OpenDialog1
->Filter="可執行文件(*.exe,*.dll)|*.exe;*.dll|圖標文件(*.ico)|*.ico|所有文件(*.*)|*.*";
SaveDialog1
->Filter="圖標文件|*.ico";
ScrollBar1
->Enabled=false;
Button2
->Enabled=false;
Button3
->Enabled=false;

}

//----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

if(OpenDialog1->Execute())
{

TotalIcon 
= (int)ExtractIcon( Form1->Handle, OpenDialog1->FileName.c_str(), -1 );
if(TotalIcon>0)
{

if(TotalIcon<2)

ScrollBar1
->Enabled=false;

else

ScrollBar1
->Max=TotalIcon-1;

Button2
->Enabled=true;
Button3
->Enabled=true;
FileName 
= OpenDialog1->FileName;
Edit1
->Text =TotalIcon;
Icon
->Handle = ExtractIcon( Form1->Handle, FileName.c_str(), 0);
Image1
->Picture->Icon=Icon;
Edit2
->Text=1;

}

else
{

ShowMessage(
"該文件沒有圖標");

}


}


}

//----------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{

if(SaveDialog1->Execute())
{

//保存圖標
Icon->SaveToFile( SaveDialog1->FileName);

}


}

//----------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{

if(SaveDialog1->Execute())
//提取所有的圖標
for(int i=0;i<TotalIcon-1;i++)
{

Icon
->Handle = ExtractIcon( Form1->Handle, FileName.c_str(), i);
Icon
->SaveToFile(SaveDialog1->FileName+(AnsiString)i+".ico");

}


}

//----------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{

Close();

}

//----------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{

Edit2
->Text=ScrollBar1->Position+1;
Icon
->Handle = ExtractIcon(Form1->Handle, FileName.c_str(),ScrollBar1->Position);
Image1
->Picture->Icon=Icon;

}



判斷驅動器的類型


  使用API函數GetDriveType能判斷一個驅動器的類型,該函數返回一個int型的值,當返回值為2時,是軟盤;為3時,是硬盤;為4時,是網絡映射盤;為5時,是光驅;為6時,是 RAM 磁盤;為其它值時,是非法的盤符。這個API函數包含在winbase.h頭文件中,首先在程序頭部加上語句:
include <winbase.h>
包含頭文件,然后在程序中加入以下代碼就可以判斷驅動器的類型:
int drv;
//這里的"C:\\"為要判斷的盤符
drv=GetDriveType("C:\\");
switch (drv) //判斷drv的值
{
case 2 : //DRIVE_REMOVABLE
ShowMessage("軟盤");
break;
case 3 : //DRIVE_FIXED
ShowMessage("硬盤");
break;
case 4 : //DRIVE_REMOTE
ShowMessage("網絡映射盤");
break;
case 5 : //DRIVE_CDROM
ShowMessage("光驅");
break;
case 6 : //DRIVE_RAMDISK
ShowMessage("RAM 磁盤");
break;
default :
ShowMessage("這個磁盤不存在!");
break;
}

注:case語句后的數值也可以用注釋后的常數替換。如2可用常數 DRIVE_REMOVABLE 來替換。

posted on 2006-01-25 16:19 夢在天涯 閱讀(4585) 評論(0)  編輯 收藏 引用 所屬分類: CPlusPlusMFC/QTWindows API

公告

EMail:itech001#126.com

導航

統計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1813332
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              一本久久综合亚洲鲁鲁五月天| 亚洲电影免费观看高清完整版在线| 亚洲精品一区在线| 最新高清无码专区| 欧美黄色片免费观看| 最新日韩欧美| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美国产三区| 亚洲欧美日韩精品一区二区| 亚洲永久免费| 在线观看成人av| 亚洲精品1234| 国产精品尤物| 免播放器亚洲一区| 欧美美女操人视频| 久久9热精品视频| 久久婷婷成人综合色| 99pao成人国产永久免费视频| 亚洲美女色禁图| 国产在线不卡视频| 亚洲精品一区二区三区不| 国产精品青草久久| 欧美xart系列高清| 欧美色欧美亚洲另类二区| 久久精品人人做人人综合 | 欧美18av| 欧美日韩亚洲综合| 久久久久久一区| 欧美日韩一区视频| 久久久噜噜噜久久中文字幕色伊伊| 欧美福利精品| 久久久福利视频| 欧美天堂亚洲电影院在线播放| 久久另类ts人妖一区二区| 欧美日韩成人在线观看| 免费的成人av| 国产曰批免费观看久久久| 一区二区三区不卡视频在线观看 | 国产一区二区三区精品欧美日韩一区二区三区 | 久久久www成人免费无遮挡大片| 亚洲免费观看在线观看| 香港久久久电影| 亚洲亚洲精品在线观看| 久热精品在线| 久久精品夜色噜噜亚洲a∨| 欧美日韩在线亚洲一区蜜芽| 美国成人直播| 国产在线欧美| 午夜精品一区二区三区在线| 亚洲欧美综合网| 欧美人体xx| 欧美激情网友自拍| 极品尤物一区二区三区| 午夜精品视频在线观看| 亚洲综合激情| 欧美午夜美女看片| 一区二区三区偷拍| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 最新国产乱人伦偷精品免费网站| 亚洲欧美日韩天堂| 午夜电影亚洲| 国产日本欧美视频| 性欧美videos另类喷潮| 久久国产精品久久国产精品| 国产精品三上| 欧美一区成人| 久久中文字幕导航| 亚洲高清激情| 欧美大色视频| 亚洲免费观看高清完整版在线观看| 亚洲精品系列| 欧美视频中文一区二区三区在线观看 | 欧美一级淫片播放口| 国产精品主播| 久久国产99| 欧美大片在线观看一区| 亚洲精品小视频在线观看| 欧美精品日韩综合在线| 99精品欧美一区| 亚洲一区二区影院| 国产伪娘ts一区| 久久久久国产精品麻豆ai换脸| 蜜臀av一级做a爰片久久| 在线视频国内自拍亚洲视频| 欧美激情一区二区| 这里只有视频精品| 久久综合久色欧美综合狠狠| 亚洲国内欧美| 国产精品激情电影| 午夜视频一区| 欧美激情欧美激情在线五月| 正在播放亚洲一区| 国内精品国产成人| 欧美成人免费在线视频| 在线视频亚洲欧美| 久久久久久久久伊人| 亚洲人成在线播放| 国产日韩av高清| 欧美a级片网站| 亚洲在线一区二区| 欧美电影免费观看| 午夜电影亚洲| 亚洲国产精品悠悠久久琪琪| 欧美视频在线不卡| 久久久精品午夜少妇| 夜久久久久久| 欧美大成色www永久网站婷| 亚洲一区不卡| 91久久综合| 国产亚洲观看| 国产精品久久999| 欧美**人妖| 欧美在线首页| 一区二区欧美国产| 亚洲第一二三四五区| 久久大综合网| 亚洲欧美日韩久久精品| 亚洲人成在线观看网站高清| 黄色在线一区| 国产精品一区二区久久久| 欧美精品免费在线| 久久综合九色九九| 欧美在线观看视频在线| 亚洲一区在线播放| 99re这里只有精品6| 免费欧美日韩国产三级电影| 久久精品国产久精国产爱| 亚洲午夜高清视频| 一区二区三区高清| 欧美精品在线网站| 欧美电影在线播放| 免费日韩一区二区| 蜜臀av在线播放一区二区三区| 香蕉成人久久| 亚洲欧美日韩精品在线| 中文精品在线| 中文av字幕一区| 99热免费精品| 夜夜嗨av一区二区三区网站四季av| 亚洲国产毛片完整版| 老司机成人在线视频| 久热精品视频在线免费观看| 久久免费视频网站| 久久综合伊人77777麻豆| 久久久久久久999精品视频| 久久狠狠久久综合桃花| 欧美一区二区三区免费看| 欧美一二三区精品| 欧美在线黄色| 久久欧美中文字幕| 久久综合一区二区| 亚洲国产高清在线观看视频| 亚洲国产午夜| 99国产精品视频免费观看| 亚洲视频视频在线| 亚洲欧美一区二区三区久久| 性欧美大战久久久久久久免费观看| 新狼窝色av性久久久久久| 欧美在线视频观看| 女人天堂亚洲aⅴ在线观看| 欧美国产日韩一区二区三区| 欧美伦理在线观看| 国产精品99免费看 | 老色批av在线精品| 欧美日韩1区2区3区| 国产精品黄视频| 激情久久综合| 99riav国产精品| 校园春色综合网| 欧美成人69av| 一区二区三区欧美在线观看| 午夜精品亚洲| 欧美岛国激情| 国产精品久久久久久久第一福利| 国产欧美精品日韩区二区麻豆天美| 国产一区香蕉久久| 日韩性生活视频| 久久av一区二区| 欧美激情一区二区三区在线| 在线视频中文亚洲| 久久亚洲色图| 国产精品日本精品| 亚洲国产欧美一区二区三区丁香婷| 一区二区免费在线视频| 久久激情五月婷婷| 亚洲精品美女在线| 久久久99爱| 国产精品久久久久久久久免费桃花 | 在线欧美小视频| 亚洲制服丝袜在线| 欧美激情一区二区三级高清视频| 亚洲在线成人| 欧美区在线观看| 在线精品视频一区二区三四| 亚洲欧美日韩国产精品| 欧美国产一区视频在线观看| 亚洲欧美日本在线| 欧美调教vk| 99re6热只有精品免费观看 | 国产精品久久久久久久久免费桃花|