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

posts - 131, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

     摘要: 1程序段:?1234567vector <int> vecInt;for (int i=0;i<500;i++){    vecInt.push_back(i);}int j= vecInt.capacity();  //j=512i = vecInt.size(); //i=500?1 &...  閱讀全文

posted @ 2013-03-04 12:01 盛勝 閱讀(7957) | 評論 (0)編輯 收藏

使用DateTimePicker控件一般是獲 取其時間替代手工輸入帶來的不便,而DateTimePicker控件既可以獲取日期(2010-03-05)也可以獲取時間(16:27:33),要獲 取日期只需要更改控件屬性的格式為長日期或短日期,要獲取時間則將格式更改為時間即可!

         在添加控件變量時,選擇其變量類型為CDateTimeCtrl(類如m_DateCtrl);在程序中定義CTime對象用來保存獲取的時間,然后可以將其轉換為CString類型;具體實現(xiàn):

復制代碼
1        CTime time;
2 m_DateCtrl.GetTime(time);
3 CString strTime=time.Format("%Y-%m-%d") //獲取到的為日期 如:2010-03-05
4
5 CTime time;
6 m_DateCtrl.GetTime(time);
7 CString strTime=time.Format("%H:%M:%S") //獲取到的為時間 如:16:27:33
復制代碼

VC2005中DateTimePicker控件的使用

復制代碼
 1 1 顯示年月日時分秒的當前時間
2 CDateTimeCtrl m_DateItmeCtrl_Time;
3 m_DateItmeCtrl_Time.SetFormat(_T("yyyy-MM-dd HH:mm:ss"));
4 CTime TimeTemp=TimeTemp.GetCurrentTime();
5 m_DateItmeCtrl_Time.SetTime(&TimeTemp);
6
7 其中HH表示24小時制,hh表示12小時制
8 2 如果聲明一個控件類型為CTime的變量,那么時間將顯示1970-01-01 08:00:00.
9
10 3將DateTimePicker控件聲明變量類型為COleDateTime
11 COleDateTime轉CString
12 CString strTime;
13 COleDateTime dtTime;
14 strTime =dtTime.Format(_T("%Y-%m-%d %H:%M:%S"));
復制代碼


CString轉COleDateTime(因為VS2005時間日期控件關聯(lián)的Value變量默認是COleDateTime類型)

1 CString strTime =_T("2009-08-11 11:22:33");
2 COleVariant VariantTime;
3 VariantTime = strTime;
4 VariantTime.ChangeType(VT_DATE);
5 COleDateTime DataTime = VariantTime;

SetTime時 參數(shù)需要為指針

復制代碼
 1   m_ctrlMachineDeliveryDate.SetTime(&CTime::GetCurrentTime()); //將控件顯示當前日期
2 m_ctrlMachineInstallDate.SetTime(&CTime::GetCurrentTime());
3
4
5
6 CTime tDeliveryDate;
7 m_ctrlMachineDeliveryDate.GetTime(tDeliveryDate); //獲取發(fā)貨日期
8 pMachineInfoSet->m_MACHINE_DELIVERYDATE = tDeliveryDate;
9
10
11
12 CTime tDeliveryDate;
13 tDeliveryDate = pMachineInfoSet->m_MACHINE_DELIVERYDATE; //獲取記錄中的日期
14 m_ctrlMachineDeliveryDate.SetTime(&tDeliveryDate); //將記錄中的日期賦值到DateTime控件中顯示

例子:
string strTime,strYear,strMonth,strDay;
strTime = strBirthday.substr(0,10);
strYear = strTime.substr(0,4);
strMonth = strTime.substr(5,2);
strDay = strTime.substr(8,2);
CTime t(atoi(strYear.c_str()),atoi(strMonth.c_str()), atoi(strDay.c_str()),0,0,0);
m_DateBorn.SetTime(&t);
復制代碼

 // 設定時間日期控件允許選擇的范圍

復制代碼
 1  CTime tCurrentTime= CTime::GetCurrentTime();
2 CTimeSpan timespanOneMonth(30,0,0,0); //這里設置為當前日期推后30天
3 CTime tEndTime = tCurrentTime +timespanOneMonth;
4 m_ctrlADTipsDaysDate.SetRange(&tCurrentTime,&tEndTime);
5 /*
6 m_dtcTm:這個是DATE TIME PICKER控件變量
7 CTime begin_tm(1970,1,1,8,0,0),end_tm(2038,1,19,3,14,7);
8 m_dtcTm.SetRange(&begin_tm,&end_tm);
9 m_tmClock=CTime::GetCurrentTime();//設置初始值為當前時間
10 m_dtcTm.SetTime(&m_tmClock);
11 //m_dtcTm.SetFormat("yyyy-MM-dd HH'時'mm'分'"); //設置字符串格式
12 m_dtcTm.SetFormat("yyyy-MM-dd HH:mm:ss");
13 */
復制代碼

posted @ 2013-03-02 15:27 盛勝 閱讀(2519) | 評論 (0)編輯 收藏

     摘要: 這個例子類似于 Windows 的資源管理器,程序運行界面如圖一所示:圖一主要用到的類有:CListCtrl,CTreeCtrl,CImageList,CFileFind 和函數(shù)SHGetFileInfo()簡述步驟如下:1、增加 TreeCtrl 的 TVS_HASBUTTONS,TVS_HASLINES、TVS_LINESATROOT Style,代碼如下:1.DWORD dwSty...  閱讀全文

posted @ 2013-03-01 14:01 盛勝 閱讀(1249) | 評論 (0)編輯 收藏

方法一:
void CTreeTest_demoDlg::ChangeTreeItemAll(CTreeCtrl &tree, HTREEITEM hItem,BOOL bSelect) 
HTREEITEM x = tree.GetChildItem(hItem); 
if(NULL == x) return; 
do
tree.SetCheck( x, bSelect ); 
ChangeTreeItemAll(tree,x,bSelect);
}
while( ( x = tree.GetNextSiblingItem( x ) )!= NULL ); 
}

 void CTreeTest_demoDlg::OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult)
 {
  // TODO: 在此添加控件通知處理程序代碼
 
  CPoint point; 
  UINT pflags; 
  GetCursorPos(&point); 
  m_ctrTree.ScreenToClient(&point); 
  HTREEITEM hitItem = m_ctrTree.HitTest( point, &pflags );
  if ( pflags & (TVHT_ONITEMSTATEICON )) 
 
 
  //if(m_bSelectDirect) // 選中父結點時他的直接孩子(兒子)結點同時被選中 
  //{ 
  // if ( m_ctrTree.GetCheck( hitItem ) )
  //
  // ChangeTreeItemDirect(m_ctrTree,hitItem,FALSE); 
  // }
  // else 
  //
  // ChangeTreeItemDirect(m_ctrTree,hitItem,TRUE); 
  // }
  //} 
//   if(m_bSelectAll) // 選中父結點時他的孩子結點以及所有后代(孫子)的節(jié)點被選中 
   
    if ( m_ctrTree.GetCheck( hitItem ) ) 
   
    ChangeTreeItemAll(m_ctrTree,hitItem,FALSE); 
   
    else 
    {
    ChangeTreeItemAll(m_ctrTree,hitItem,TRUE); 
   
    }
 
  *pResult = 0;
 }


方法二:
void CTreeTest_demoDlg::UpdateTreeCheck(const HTREEITEM hParent, const BOOL flag) 
if (m_ctrTree.ItemHasChildren(hParent)) 
HTREEITEM hNextItem; 
HTREEITEM hChildItem = m_ctrTree.GetChildItem(hParent); 
while (hChildItem != NULL) 
//遞歸獲取當前節(jié)點下的子節(jié)點 
m_ctrTree.SetCheck(hChildItem,flag); 
UpdateTreeCheck(hChildItem,flag); 
hNextItem = m_ctrTree.GetNextItem(hChildItem, TVGN_NEXT);
hChildItem = hNextItem;
void CTreeTest_demoDlg::OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知處理程序代碼
DWORD dw = GetMessagePos();
CPoint pt(LOWORD(dw),HIWORD(dw)); //鼠標的屏幕坐標
CPoint ptClient; 
CRect rcPart;
m_ctrTree.GetWindowRect(rcPart);
ptClient.x = pt.x - rcPart.left;
ptClient.y = pt.y - rcPart.top; 
UINT uFlags;
HTREEITEM hItem = m_ctrTree.HitTest(ptClient, &uFlags); 
if ((hItem != NULL) && (uFlags & TVHT_ONITEMSTATEICON)) 
if (m_ctrTree.ItemHasChildren(hItem)) 
BOOL flag = m_ctrTree.GetCheck(hItem); //這時父節(jié)點還沒有更新,需要取反 
UpdateTreeCheck(hItem,!flag); 
}
m_ctrTree.Select(hItem, TVGN_CARET);
*pResult = 0;
}

posted @ 2013-02-28 16:50 盛勝 閱讀(693) | 評論 (0)編輯 收藏

TreeCtrl的擴展類,可以改節(jié)點字體顏色和背景色
類下載:http://www.codeproject.com/treectrl/simptree.asp
  其中有CSimpleTreeCtrl類和MyNewTreeCtrl類兩個
  CSimpleTreeCtrl類繼承自CTreeCtrl,而MyNewTreeCtrl類繼承自CSimpleTreeCtrl類
  生成MyNewTreeCtrl的對象,加載到主面板中。
  比CTreeCtrl控件好用的地方在:插入節(jié)點很直觀,可以改變某節(jié)點的顏色和背景色,可以很方便的得到父節(jié)點和子節(jié)點
  getNumChildren:得到子節(jié)點的個數(shù)
  addChild:在自己下面增加子節(jié)點
  getChild ( int i ):得到子節(jié)點i
  getParent():得到父節(jié)點
  InsertItem( item, parent ):在parent后插入item
  setTextColor:設置字體顏色
  setBkColor:設置背景顏色
  
  示例:
  (1)
  
   CSimpleTreeCtrl::TreeCtrlItem* item = new MyNewTreeCtrl::NewTreeCtrlItem ( name );
   item->setName(name);
   if( red == "true")
   item->setTextColor(#ff0000);
   item->setBkColor(#ffffff);
   m_Tree.InsertItem(item,NULL);
  
  
  (2)
   CSimpleTreeCtrl::TreeCtrlItem* item = new MyNewTreeCtrl::NewTreeCtrlItem ( name );
   item->setName(name);
   if( god == "true")
   item->setTextColor(#ff0000);
   item->setBkColor(#ffffff);
   m_Tree.InsertItem(item,fatherHand); 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static char *color[]={"white","black","red","blue","yellow","cyan","purple","green"};
HICON hIcon[8];
int n;
//CImageList m_list;
m_list.Create(16,16,0,8,8);
hIcon[0]=AfxGetApp()->LoadIcon(IDI_ICON_WHITE);
hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON_BLACK);
hIcon[2]=AfxGetApp()->LoadIcon(IDI_ICON_RED);
hIcon[3]=AfxGetApp()->LoadIcon(IDI_ICON_BLUE);
hIcon[4]=AfxGetApp()->LoadIcon(IDI_ICON_YELLOW);
hIcon[5]=AfxGetApp()->LoadIcon(IDI_ICON_CYAN);
hIcon[6]=AfxGetApp()->LoadIcon(IDI_ICON_PURPLE);
hIcon[7]=AfxGetApp()->LoadIcon(IDI_ICON_GREEN);
for(n=0;n<8;n++)
m_list.Add(hIcon[n]);

////////////////////////////////////////////////////////
CTreeCtrl *pTree=(CTreeCtrl *) GetDlgItem(IDC_TREE);

pTree->SetImageList(&m_list,TVSIL_NORMAL); //設置圖片列表
TV_INSERTSTRUCT tvinsert;    //創(chuàng)建待加入的TV_INSERTSTRUCT的結構
tvinsert.hParent=NULL;       //無父節(jié)點
tvinsert.hInsertAfter=TVI_LAST;  //插入到本層最后
tvinsert.item.mask=TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT;
//掩碼,圖標、選選中圖標、文字
tvinsert.item.hItem=NULL;//句柄為空
tvinsert.item.state=0;   //狀態(tài)
tvinsert.item.stateMask=0;//狀態(tài)為掩碼
tvinsert.item.cchTextMax=6;//最大文字長度
tvinsert.item.iSelectedImage=1;//選中圖標索引
tvinsert.item.cChildren=0;   //唯有子節(jié)點
tvinsert.item.lParam=0;     //自定義數(shù)據(jù)


pTree->SetBkColor(#383838);
pTree->SetTextColor(#dedede);
//創(chuàng)建第一層
tvinsert.item.iImage=5;     //一般圖標
tvinsert.item.pszText="father";//插入第一層的一個節(jié)點“father”
HTREEITEM hDad=pTree->InsertItem(&tvinsert);
tvinsert.item.pszText="mother";//插入第一層的第二個節(jié)點“mother”
HTREEITEM hMom=pTree->InsertItem(&tvinsert);
//創(chuàng)建第二層
tvinsert.hParent=hDad;            //父節(jié)點為"father"
tvinsert.item.iImage=3;               //一般圖標
tvinsert.item.pszText="david";          // 插入第二層father的第一個節(jié)點son
pTree->InsertItem(&tvinsert);         
tvinsert.item.pszText="lili";          // 插入第二層father的第一個節(jié)點son
pTree->InsertItem(&tvinsert); 
tvinsert.item.pszText="kate";          // 插入第二層father的第一個節(jié)點son
pTree->InsertItem(&tvinsert);         
tvinsert.item.pszText="jime";          // 插入第二層father的第一個節(jié)點son
pTree->InsertItem(&tvinsert);  


tvinsert.hParent=hMom;                   //父節(jié)點為hMom
tvinsert.item.iImage=4;                 // 
tvinsert.item.pszText="david";          // 插入第二層mother的第一個節(jié)點son
pTree->InsertItem(&tvinsert);         
tvinsert.item.pszText="lili";          // 插入第二層mother的第一個節(jié)點son
pTree->InsertItem(&tvinsert); 
tvinsert.item.pszText="kate";          // 插入第二層mother的第一個節(jié)點son
pTree->InsertItem(&tvinsert);         
tvinsert.item.pszText="jime";          // 插入第二層mother的第一個節(jié)點son

HTREEITEM hOther=pTree->InsertItem(&tvinsert);
//創(chuàng)建第三層
tvinsert.hParent=hOther;   //父節(jié)點為jime
tvinsert.item.iImage=7;

tvinsert.item.pszText="tom";          // 插入第二層hOther的第一個節(jié)點tom
pTree->InsertItem(&tvinsert);         
tvinsert.item.pszText="baidi";          // 插入第二層hOther的第一個節(jié)點baidu
pTree->InsertItem(&tvinsert);

posted @ 2013-02-28 13:41 盛勝 閱讀(1501) | 評論 (0)編輯 收藏

在MFC類庫提供了CWnd::OnCtlColor函數(shù),在工作框架的子窗口被重畫時將調(diào)用該成員函數(shù).因此可以重載WM_CTLCOLOR消息的響應函數(shù).此函數(shù)的原型:

  afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);
           參數(shù)nCtlColor用于指定控件的類型,可以是:
           .CTLCOLOR_BTN                按鈕控件
           .CTLCOLOR_DLG                對話框
           .CTLCOLOR_EDIT               編輯框
           .CTLCOLOR_LISTBOX            列表控件
           .CTLCOLOR_MSGBOX             消息控件
           .CTLCOLOR_SCROLLBAR 滾動條控件
           .CTLCOLOR_STATIC             靜態(tài)控件
[程序實現(xiàn)]
           假設你已有了名為My的對話框工程.你有了一個STATIC的控件,ID為IDC_STATIC1.
  HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
           {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  
        // TODO: Change any attributes of the DC here
           if (nCtlColor==CTLCOLOR_STATIC)

              {
                    pDC->SetTextColor(RGB(255,0,0));
  //字體顏色
                    pDC->SetBkColor(RGB(0, 0, 255));   //字體背景色  

                }
       
 // TODO: Return a different brush if the default is not desired
        return hbr;
           }


如果要指定某個特定控件可以這樣寫:ID為IDC_STATIC1

if (pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
       pDC->SetTextColor
(
RGB(255,0,0));  //設置字體顏色
       pDC->SetBkMode(TRANSPARENT); //設置字體背景為透明
// TODO: Return a different brush if the default is not desired
  return (HBRUSH)::GetStockObject(BLACK_BRUSH);  // 設置背景色
}
else
return hbr;

【注】

BLACK_BRUSH:黑色

WHITE_BRUSH:白色

GRAY_BRUSH:灰色

NULL_BRUSH:透明

HOLLOW_BRUSH :透明

 

http://hi.baidu.com/sicceer/blog/item/1f3ac41f27f5007ef724e4f2.html

posted @ 2013-02-28 10:44 盛勝 閱讀(1506) | 評論 (0)編輯 收藏

一鍵解決沙盤報錯:初始化Start.exe進程失敗

Tags:, Posted in WindowsFun,宅技術7 條留言

相信用SandBox3.4X版本的沙盤的同學可能遇到過這種問題。

神馬是沙盤?

之前曾經(jīng)介紹過。就是一個幫你運行懷疑或者有可能生成木馬病毒的程序的軟件。

 

這個好東西一直妥妥的,突然有一天出錯了。可能你以為是大姨媽,但后來你發(fā)現(xiàn),每次都報錯,不會每天大姨媽吧?

錯誤

所謂“好軟件如女朋友”,總不能你同居的女朋友每天大姨媽吧。是病,得治。

導致這個問題的原因的:打了KB2393802補丁(后面稱③補丁)。

SandBox原作者tzuk:

Aha, I think I understand now. 
The old updates, KB979683 and KB981852 install a new version of the Windows kernel in Windows XP. 
Sandboxie looks for a record of either of these two updates, to adjust itself to this new kernel version. 
I assume the newest update KB2393802 also installs this same new version of the Windows kernel. 
So the problem happens for people who haven’t had KB979683 or KB981852 installed at all. 
And then install this latest update KB2393802. In this case there is a new version of the Windows XP kernel but Sandboxie is not aware of this. 
I will fix Sandboxie to look for a record of KB2393802, just like it does for the two older updates.

按照原作者的話,就是:

舊的版本更新,KB979683補丁(后面稱為①補丁)跟KB981852補丁(②補丁)為XP安裝了一個新內(nèi)核。沙盤自動尋找前面兩個補丁記錄調(diào)整自己到相應的內(nèi)核。如果之前安裝了①和②在安裝③補丁,沙盤也會自動調(diào)整到新的內(nèi)核。 
問題就在于,之前沒有打①②補丁的機器直接打③補丁,沙盤不能調(diào)整過來。(看來③補丁為XP又安裝了一個新的內(nèi)核)

網(wǎng)上很多人都說卸載③補丁,但會帶來什么樣的影響,沒有人能明確指出③補丁究竟為系統(tǒng)帶來什么樣影響,會不會不安全?不過大部分人是刪除了,沒辦法,年輕人,沖動嘛。

在SandBox的官網(wǎng)上,我們找到更為簡潔的解決方法:

Create registry key 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP4\KB979683

創(chuàng)建一個以補丁①名字命名的鍵。感覺像是蠱惑一下沙盤讀取注冊表的那個機制。得承認的是,這個可以解決問題……

posted @ 2013-02-26 19:30 盛勝 閱讀(4672) | 評論 (0)編輯 收藏

OpenGL可以把紋理映射到指定的圖形的表面上。簡單一點的,就是給平面映射紋理,比如一個四邊形,一個長方體的6個面,都可以指定位圖作為紋理映射到各個面上。

關于將一個位圖作為紋理映射到某個或者多個面上,可以學習Jeff Molofee的OpenGL系列教程。

對于指定的多個紋理,要根據(jù)自己的需要映射到不同的面上,需要對位圖創(chuàng)建一個數(shù)組,用來存儲位圖的名稱,然后在初始化OpenGL的時候,可以讀取這些位圖,然后生成多個紋理存儲到一個紋理數(shù)組中,接著就可以指定繪制的某個面,對該指定的面進行紋理映射。

下面,在的Jeff Molofee教程的第六課的基礎上,實現(xiàn)對6個面分別進行不同的紋理映射。

準備工作就是制作6幅不同的位圖,如圖所示:


關鍵代碼及其說明如下。

創(chuàng)建全局紋理數(shù)組

GLuint texture[6];   // 創(chuàng)建一個全局的紋理數(shù)組,用來存儲將位圖轉換之后得到的紋理,對應于立方體的6個面

加載位圖文件

加載位圖,也就是把位圖讀取到內(nèi)存空間,實現(xiàn)紋理的創(chuàng)建,加載位圖的函數(shù)說明一下:

AUX_RGBImageRec *LoadBMP(char *Filename)    // 根據(jù)位圖文件的名稱進行加載
{
FILE *File=NULL;        // 文件指針

if (!Filename)         // 如果沒有指定位圖文件名稱就返回NULL
{
   return NULL;         
}

File=fopen(Filename,"r");       // 根據(jù)指定的位圖文件名稱,打開該位圖文件

if (File)           // 如果位圖文件存在
{
   fclose(File);         // 因為只是需要判斷問題是否存在,而不需要對位圖文件進行寫操作,所以關閉位圖文件
   return auxDIBImageLoad(Filename);   // 其實,只需要一個真正存在的位圖文件的名稱,實現(xiàn)加載位圖文件,并返回一個指針
}

return NULL;          // 位圖文件加載失敗就返回NULL
}

上面實現(xiàn)加載位圖的函數(shù)中,AUX_RGBImageRec是glaux.h中定義的類型,該類型的定義如下所示:

/*
** RGB Image Structure
*/

typedef struct _AUX_RGBImageRec {
    GLint sizeX, sizeY;
    unsigned char *data;
} AUX_RGBImageRec;

首先,AUX_RGBImageRec類型是一個RGB圖像結構類型。該結構定義了三個成員:

sizeX —— 圖像的寬度;
sizeY —— 圖像的高度;
data; —— 圖形所包含的數(shù)據(jù),其實也就是該圖形在內(nèi)存中的像素數(shù)據(jù)的一個指針。

AUX_RGBImageRec類型的變量描述了一幅圖像的特征。

上述函數(shù)中,調(diào)用了glaux.h庫文件中的auxDIBImageLoad函數(shù),其實它是一個宏,函數(shù)原型為auxRGBImageLoadW(LPCWSTR)或者auxRGBImageLoadA(LPCSTR),可以在該庫文件中找到它的定義,如下所示:

/* AUX_RGBImageRec * APIENTRY auxRGBImageLoad(LPCTSTR); */
#ifdef UNICODE
#define auxRGBImageLoad auxRGBImageLoadW
#else
#define auxRGBImageLoad auxRGBImageLoadA
#endif
AUX_RGBImageRec * APIENTRY auxRGBImageLoadA(LPCSTR);
AUX_RGBImageRec * APIENTRY auxRGBImageLoadW(LPCWSTR);

#ifdef UNICODE
#define auxDIBImageLoad auxDIBImageLoadW
#else
#define auxDIBImageLoad auxDIBImageLoadA
#endif
AUX_RGBImageRec * APIENTRY auxDIBImageLoadA(LPCSTR);
AUX_RGBImageRec * APIENTRY auxDIBImageLoadW(LPCWSTR);

宏auxDIBImageLoad實現(xiàn)的功能就是:根據(jù)指定的位圖名稱,將該位圖的信息加載到內(nèi)存中,以便用來創(chuàng)建成為紋理。

創(chuàng)建紋理并加載紋理

用于創(chuàng)建并加載紋理的函數(shù)為LoadGLTextures,實現(xiàn)如下所示:

int LoadGLTextures()         // 根據(jù)加載的位圖創(chuàng)建紋理
{
int Status=FALSE;         // 指示紋理創(chuàng)建是否成功的標志

AUX_RGBImageRec *TextureImage[6];     // 創(chuàng)建一個紋理圖像數(shù)組,這里指定數(shù)組大小為6

memset(TextureImage,0,sizeof(void *)*6);          // 初始化紋理圖像數(shù)組,為其分配內(nèi)存

char *pictures[] = {// 創(chuàng)建一個位圖名稱數(shù)組,對應6幅位圖
   "Data/No1.bmp",
   "Data/No2.bmp",
   "Data/No3.bmp",
   "Data/No4.bmp",
   "Data/No5.bmp",
   "Data/No6.bmp"
};
for(int i=0; i<6; i++)// 遍歷位圖名稱數(shù)組,根據(jù)位圖名稱分別生成
{
   if (TextureImage[i]=LoadBMP(pictures[i]))// 加載位圖i成功,修改狀態(tài)標志變量Status為TRUE
   {
    Status=TRUE;         

   glGenTextures(1, &texture[i]);     // 為第i個位圖創(chuàng)建紋理
   glBindTexture(GL_TEXTURE_2D, texture[i]);// 將生成的紋理的名稱綁定到指定的紋理上
   glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[i]->sizeX, TextureImage[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   }

   if (TextureImage[i])         // 釋放位圖數(shù)組占用的內(nèi)存空間
   {
    if (TextureImage[i]->data)       
    {
     free(TextureImage[i]->data);    
    }

    free(TextureImage[i]);        
   }
}
return Status;          // 創(chuàng)建紋理并加載,返回成功或者失敗的標志Status
}

上述函數(shù)是創(chuàng)建和加載紋理的核心實現(xiàn)。

1、glGenTextures函數(shù)

其中,調(diào)用了glGenTextures函數(shù),查看MSDN可以看到,聲明如下所示:

void glGenTextures(
GLsizein,         
GLuint *textures  
);

函數(shù)參數(shù)的含義:

n—— 生成的紋理的名稱的個數(shù);

textures—— 生成的紋理名稱所存儲位置的指針,也就是一個紋理數(shù)組的內(nèi)存地址,或者說是數(shù)組首元素的內(nèi)存地址。

函數(shù)被調(diào)用,會生成一系列紋理的名字,并存儲到指定的數(shù)組中。

2、glBindTexture函數(shù)

glBindTexture函數(shù)實現(xiàn)了將調(diào)用glGenTextures函數(shù)生成的紋理的名字綁定到對應的目標紋理上。該函數(shù)的聲明如下所示:

void glBindTexture(
GLenumtarget,  
GLuinttexture  
);

函數(shù)參數(shù)的含義:

target—— 紋理被綁定的目標,它只能取值GL_TEXTURE_1D或者GL_TEXTURE_2D;

texture—— 紋理的名稱,并且,該紋理的名稱在當前的應用中不能被再次使用。

3、glTexImage2D函數(shù)

調(diào)用glTexImage2D函數(shù),用來指定二維紋理圖像。該函數(shù)的聲明如下所示:

void glTexImage2D(
GLenumtarget,       
GLintlevel,         
GLintcomponents,    
GLsizeiwidth,       
GLsizeiheight,      
GLintborder,        
GLenumformat,       
GLenumtype,         
const GLvoid*pixels
);

函數(shù)參數(shù)的含義:

target—— 指定目標紋理,必須為GL_TEXTURE_2D;

level—— 指定圖像級別的編號,0表示基本圖像,其它可以參考MSDN;

components—— 紋理中顏色組件的編號,可是是1或2或3或4;

width—— 紋理圖像的寬度;

height—— 紋理圖像的高度;

border—— 紋理圖像的邊框寬度,必須是0或1;

format—— 指定像素數(shù)據(jù)的格式,一共有9個取值:GL_COLOR_INDEX、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_RGB、GL_RGBA、GL_BGR_EXT、GL_BGRA_EXT、GL_LUMINANCE、GL_LUMINANCE_ALPHA ,具體含義可以參考MSDN;

type—— 像素數(shù)據(jù)的數(shù)據(jù)類型,取值可以為GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, and GL_FLOAT;

pixels—— 內(nèi)存中像素數(shù)據(jù)的指針。

4、glTexParameteri函數(shù)

glTexParameteri函數(shù)或者glTexParameterf函數(shù)用來設置紋理參數(shù),聲明如下所示:

void glTexParameterf(
GLenumtarget,
GLenumpname,
GLfloatparam
);

void glTexParameteri(
GLenumtarget,
GLenumpname,
GLintparam   
);

函數(shù)參數(shù)的含義:

target—— 目標紋理,必須為GL_TEXTURE_1D或GL_TEXTURE_2D;

pname—— 用來設置紋理映射過程中像素映射的問題等,取值可以為:GL_TEXTURE_MIN_FILTER、GL_TEXTURE_MAG_FILTER、GL_TEXTURE_WRAP_S、GL_TEXTURE_WRAP_T,詳細含義可以查看MSDN;

param—— 實際上就是pname的值,可以參考MSDN。

另外,該類函數(shù)還有兩個:

void glTexParameterfv(
GLenumtarget,        
GLenumpname,         
const GLfloat*params
);

void glTexParameteriv(
GLenumtarget,      
GLenumpname,       
const GLint*params
);

上述程序中調(diào)用如下:

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

功能就是實現(xiàn)線形濾波的功能,當紋理映射到圖形表面以后,如果因為其它條件的設置導致紋理不能更好地顯示的時候,進行過濾,按照指定的方式進行顯示,可能會過濾掉顯示不正常的紋理像素。

紋理映射過程

紋理映射的過程是在DrawGLScene函數(shù)中實現(xiàn)的,也就是在繪制圖形的過程中,直接進行我呢里映射,或者稱為,為指定的平面貼紋理,DrawGLScene函數(shù)實現(xiàn)如下所示:

int DrawGLScene(GLvoid)         
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();         
glTranslatef(0.0f,0.0f,-5.0f);

glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);


  // Front Face
glBindTexture(GL_TEXTURE_2D, texture[0]);//   選擇第一個紋理texture[0],進行貼紋理
glBegin(GL_QUADS);
  glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
   glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
   glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
   glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glEnd();

  // Back Face
glBindTexture(GL_TEXTURE_2D, texture[1]);//   選擇第二個紋理texture[1],進行貼紋理
glBegin(GL_QUADS);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
   glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
   glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
   glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glEnd();

  // Top Face
glBindTexture(GL_TEXTURE_2D, texture[2]);//   選擇第三個紋理texture[2],進行貼紋理
glBegin(GL_QUADS);
   glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
   glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
   glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glEnd();

  // Bottom Face
glBindTexture(GL_TEXTURE_2D, texture[3]);//   選擇第四個紋理texture[3],進行貼紋理
glBegin(GL_QUADS);
   glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
   glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
   glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glEnd();

  // Right face
glBindTexture(GL_TEXTURE_2D, texture[4]);//   選擇第五個紋理texture[4],進行貼紋理
glBegin(GL_QUADS);
   glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
   glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
   glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
   glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glEnd();

  // Left Face
glBindTexture(GL_TEXTURE_2D, texture[5]);//   選擇第六個紋理texture[5],進行貼紋理
glBegin(GL_QUADS);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
   glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
   glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();

xrot+=0.3f;
yrot+=0.2f;
zrot+=0.4f;
return TRUE;          
}

因為,通過前面的過程,已經(jīng)將位圖加載并創(chuàng)建和加載紋理成功,紋理數(shù)組已經(jīng)存在于內(nèi)存之中,調(diào)用上述函數(shù)實現(xiàn)紋理映射,即,從內(nèi)存中取出指定的紋理,將其映射到立方體的指定的面上。

上述函數(shù)中調(diào)用了glTexCoord2f函數(shù),設置紋理坐標,該函數(shù)的聲明如下所示:

void glTexCoord2f(
GLfloats,
GLfloatt
);

glTexCoord2f 的第一個參數(shù)是X坐標,當s=0.0f 時是紋理的左側,s=0.5f 時是紋理的中點,s=1.0f 時是紋理的右側。 glTexCoord2f 的第二個參數(shù)是Y坐標,t=0.0f 是紋理的底部,t=0.5f 是紋理的中點, t=1.0f 是紋理的頂部。

上述函數(shù)在為前面那個面映射紋理的時候調(diào)用如下:

   // Front Face
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
   glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
   glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
   glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glEnd();

其中:

glTexCoord2f(0.0f, 0.0f);表示將紋理texture[0]的左下角坐標(0.0f, 0.0f)映射到立方體前面那個面的頂點(-1.0f, -1.0f, 1.0)上;

glTexCoord2f(1.0f, 0.0f);表示將紋理texture[0]的右下角坐標(1.0f, 0.0f)映射到立方體前面那個面的頂點(1.0f, -1.0f, 1.0f)上;

glTexCoord2f(1.0f, 1.0f);表示將紋理texture[0]的右上角坐標(1.0f, 1.0f)映射到立方體前面那個面的頂點(1.0f, 1.0f, 1.0f)上;

glTexCoord2f(0.0f, 1.0f);表示將紋理texture[0]的左上角坐標(0.0f, 1.0f)映射到立方體前面那個面的頂點(-1.0f, 1.0f, 1.0f)上。

這樣,紋理texture[0]就被映射到了立方體前面那個面上。

紋理映射結果

為了使立方體能夠運動起來,對立方體進行累的旋轉變換,而且,定義了三個全局變量:

GLfloat xrot;    // 沿著x旋轉的變量
GLfloat yrot;    // 沿著y旋轉的變量
GLfloat zrot;   // 沿著z旋轉的變量

初始化都為0,然后,在每次調(diào)用DrawGLScene函數(shù)的時候,改變x、y、z的分量值,在DrawGLScene函數(shù)中如下所示:

xrot+=0.3f;
yrot+=0.2f;
zrot+=0.4f;

在DrawGLScene函數(shù)中還要執(zhí)行旋轉變換:

glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);

每次重繪都在改變旋轉軸,所以我們繪制的立方體能夠動起來,看到各個進行紋理映射的面的效果,如圖所示




posted @ 2013-02-20 09:52 盛勝 閱讀(3056) | 評論 (0)編輯 收藏

     摘要: VC用ADO訪問數(shù)據(jù)庫全攻略,介紹了VC用ADO來訪問數(shù)據(jù)庫的各個對象及各方法,很經(jīng)典,也很實用,很值得一看。 正文 一、ADO概述 ADO是Microsoft為最新和最強大的數(shù)據(jù)訪問范例 OLE DB 而設計的,是一個便于使用的應用程序層接口。ADO 使您能夠編寫應用程序以通過 OLE. DB 提供者訪問和操作數(shù)據(jù)庫服務器中的數(shù)據(jù)。ADO 最主要的優(yōu)點是易于使用、速...  閱讀全文

posted @ 2013-02-18 08:50 盛勝 閱讀(10490) | 評論 (0)編輯 收藏

//方案— 優(yōu)點:僅使用C標準庫;缺點:只能精確到秒級
#include <time.h> 
#include <stdio.h> 
int main( void ) 
    time_t t = time(0); 
    char tmp[64]; 
    strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); 
    puts( tmp ); 
    return 0; 
}
size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);
根據(jù)格式字符串生成字符串。
struct tm *localtime(const time_t *timer);
取得當?shù)貢r間,localtime獲取的結果由結構tm返回
返回的字符串可以依下列的格式而定:
%a 星期幾的縮寫。Eg:Tue 
%A 星期幾的全名。 Eg: Tuesday
%b 月份名稱的縮寫。 
%B 月份名稱的全名。 
%c 本地端日期時間較佳表示字符串。 
%d 用數(shù)字表示本月的第幾天 (范圍為 00 至 31)。日期
%H 用 24 小時制數(shù)字表示小時數(shù) (范圍為 00 至 23)。 
%I 用 12 小時制數(shù)字表示小時數(shù) (范圍為 01 至 12)。 
%j 以數(shù)字表示當年度的第幾天 (范圍為 001 至 366)。 
%m 月份的數(shù)字 (范圍由 1 至 12)。
%M 分鐘。 
%p 以 ''AM'' 或 ''PM'' 表示本地端時間。 
%S 秒數(shù)。 
%U 數(shù)字表示為本年度的第幾周,第一個星期由第一個周日開始。 
%W 數(shù)字表示為本年度的第幾周,第一個星期由第一個周一開始。 
%w 用數(shù)字表示本周的第幾天 ( 0 為周日)。 
%x 不含時間的日期表示法。 
%X 不含日期的時間表示法。 Eg: 15:26:30
%y 二位數(shù)字表示年份 (范圍由 00 至 99)。 
%Y 完整的年份數(shù)字表示,即四位數(shù)。 Eg:2008
%Z(%z) 時區(qū)或名稱縮寫。Eg:中國標準時間 
%% % 字符。

//方案二 優(yōu)點:能精確到毫秒級;缺點:使用了windows API 
#include <windows.h> 
#include <stdio.h> 
int main( void ) 
SYSTEMTIME sys; 
GetLocalTime( &sys ); 
printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d/n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek); 
return 0;
}
//方案三,優(yōu)點:利用系統(tǒng)函數(shù),還能修改系統(tǒng)時間
//此文件必須是c++文件
#include<stdlib.h>
#include<iostream>
using namespace std;
void main()
{
    system("time");
}
//方案四,將當前時間折算為秒級,再通過相應的時間換算即可
//此文件必須是c++文件
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
time_t now_time;
now_time = time(NULL);
cout<<now_time;
return 0;
}

posted @ 2013-02-17 10:31 盛勝 閱讀(2235) | 評論 (0)編輯 收藏

僅列出標題
共14頁: 1 2 3 4 5 6 7 8 9 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧洲精品一区二区精品久久久| 久久网站热最新地址| 在线观看欧美激情| 亚洲欧美日韩一区在线| 国产精品丝袜久久久久久app| 蜜臀久久99精品久久久画质超高清| 欧美视频在线播放| 亚洲国产精品女人久久久| 久久久91精品| 欧美一区视频在线| 国产精品丝袜久久久久久app| 一区二区三区日韩| 亚洲精品社区| 欧美激情影院| 一区二区欧美日韩| 99天天综合性| 国产精品豆花视频| 性伦欧美刺激片在线观看| 亚洲视频综合| 国产欧美日韩另类一区| 久久爱另类一区二区小说| 欧美一区二区啪啪| 国内精品久久久久久| 久久久综合视频| 久久日韩精品| 一区二区三区久久精品| 国产精品99久久久久久白浆小说 | 久久露脸国产精品| 一色屋精品视频在线看| 免费观看成人| 欧美极品aⅴ影院| 亚洲专区国产精品| 亚洲欧美日韩天堂一区二区| 国产一区再线| 欧美激情女人20p| 欧美日韩喷水| 欧美亚洲一区| 快she精品国产999| 亚洲最新视频在线| 亚洲欧美一区二区精品久久久| 国产主播一区二区三区| 亚洲国产精品悠悠久久琪琪| 欧美日韩精品免费| 久久精品国产第一区二区三区| 久久免费视频在线观看| 一区二区三区日韩欧美| 新67194成人永久网站| 亚洲国产精品久久久久| 一区二区精品在线观看| 黄色成人av网| 亚洲美女视频在线免费观看| 国产欧美日韩伦理| 91久久夜色精品国产九色| 国产精品―色哟哟| 亚洲动漫精品| 国产色婷婷国产综合在线理论片a| 欧美成人免费观看| 国产精品老女人精品视频| 欧美freesex交免费视频| 欧美午夜精品久久久久久久| 免费亚洲电影在线| 国产欧美日韩视频一区二区| 亚洲日韩欧美视频| 亚洲大黄网站| 欧美一区二区视频97| 国产一区二区三区在线观看免费| 亚洲第一视频| 亚欧成人精品| 亚洲午夜免费福利视频| 久久人人97超碰人人澡爱香蕉| 一区二区三区www| 狼人天天伊人久久| 久久精品国产亚洲高清剧情介绍| 欧美精品手机在线| 欧美freesex8一10精品| 国产精品一区二区男女羞羞无遮挡| 欧美freesex交免费视频| 国产乱肥老妇国产一区二| 亚洲剧情一区二区| 日韩午夜激情| 久久综合久色欧美综合狠狠 | 久久成人一区二区| 亚洲欧美日韩一区二区三区在线观看| 欧美xxx在线观看| 农村妇女精品| 精品动漫3d一区二区三区免费| 亚洲欧美在线免费| 亚洲一区国产| 欧美视频官网| 亚洲人成亚洲人成在线观看| 亚洲国产日韩一级| 久久精品欧洲| 免费看成人av| 亚洲国产视频直播| 久久一区免费| 亚洲第一在线视频| 亚洲精品少妇| 欧美黄污视频| 亚洲娇小video精品| 日韩特黄影片| 欧美日韩精品免费看| 99国产精品久久久| 亚洲一区二区三区久久| 国产精品v亚洲精品v日韩精品 | 亚洲丰满少妇videoshd| 亚洲开发第一视频在线播放| 欧美成人嫩草网站| 日韩午夜电影av| 亚洲一二三区在线观看| 国产精品久久久久久妇女6080 | 美女免费视频一区| 亚洲国产一区二区三区青草影视 | 欧美福利视频一区| 亚洲老板91色精品久久| 欧美日韩色一区| 亚洲一区二区三| 久久精品一区| 亚洲欧洲日本mm| 欧美视频精品在线| 欧美一区二区成人| 欧美激情精品久久久久久免费印度 | 久久最新视频| 亚洲一区日本| 久久精品成人一区二区三区| 小黄鸭精品密入口导航| 亚洲欧美日韩在线不卡| 午夜精品理论片| 免费日韩av片| 国产一二三精品| 亚洲欧美网站| 一区二区三区久久精品| 免费久久99精品国产自| 欧美激情91| 亚洲天堂成人| 黄色成人av网站| 欧美三级在线| 久久久噜噜噜久久中文字幕色伊伊 | 一本久久a久久精品亚洲| 国产精品美女久久久久av超清| 久久精品电影| 亚洲小说欧美另类婷婷| 欧美成人免费在线视频| 亚洲欧美另类久久久精品2019| 激情亚洲网站| 国产乱肥老妇国产一区二| 欧美精品国产| 久久嫩草精品久久久精品一| 亚洲一二三区在线观看| 亚洲国产精品99久久久久久久久| 午夜免费久久久久| 日韩午夜免费| 亚洲狠狠婷婷| 黄色精品一区| 国产农村妇女精品一区二区| 欧美日韩第一区日日骚| 久久精品一级爱片| 亚洲午夜性刺激影院| 日韩午夜av在线| 亚洲精品视频在线播放| 亚洲国产精品v| 欧美99久久| 久久久综合网站| 欧美在线视频在线播放完整版免费观看 | 亚洲欧美在线磁力| 91久久精品网| 激情综合久久| 国内精品久久国产| 国产欧美日韩在线观看| 国产精品久久久久99| 欧美日韩福利视频| 欧美喷水视频| 欧美日本精品一区二区三区| 免费成人黄色| 欧美sm重口味系列视频在线观看| 久久久国产精品亚洲一区| 久久国产精品99国产| 性色一区二区三区| 先锋影院在线亚洲| 久久国产一区| 久久欧美肥婆一二区| 老司机久久99久久精品播放免费| 久久嫩草精品久久久精品| 久久影院午夜片一区| 99精品国产在热久久| 欧美日韩色婷婷| 久久影视精品| 国产喷白浆一区二区三区| 91久久线看在观草草青青| 国产欧美午夜| 亚洲一区二区三区四区中文| 亚洲精品乱码久久久久久按摩观| 午夜视频久久久| 一二三区精品| 欧美成年人视频| 欧美黄色影院| 欧美精品一区二区在线观看| 欧美久久99| 国产精品乱子久久久久| 国产日韩欧美在线观看| 合欧美一区二区三区|