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

面對現實,超越自己
逆水行舟,不進則退
posts - 269,comments - 32,trackbacks - 0
本文轉自:http://blog.csdn.net/welcome_ck/article/details/236259

何謂消息、消息處理函數、消息映射?
消息簡單的說就是指通過輸入設備向程序發出指令要執行某個操作。具體的某個操作是你的一系列代碼。稱為消息處理函數。在SDK中消息其實非常容易理解,當窗口建立后便會有一個函數(窗口處理函數)開始執行一個消息循環,我們還可以清楚的看到消息處理的脈絡。一個switch case語句就可以搞定,消息循環直到遇到WM_QUIT消息才會結束,其余的消息均被攔截后調用相應的處理函數。但在封裝了API的MFC中,消息似乎變的有些復雜了,我們看不到熟悉的switch case語句了,取而代之的是一個叫消息映射的東西。為什么MFC要引入消息映射機制,你可以想象一下,在現在的程序開發活動中,你的一個程序是否擁有多個窗體,主窗口就算只有一個,那菜單、工具條、控件這些都是子窗口,那我們需要寫多少個switch case,并且還要為每個消息分配一個消息處理函數,這樣做是多么的復雜呀。因此MFC采用了一種新的機制。利用一個數組,將窗口消息和相對應的消息處理函數進行映射,你可以理解成這是一個表。這種機制就是消息映射。這張表在窗口基類CWnd定義,派生類的消息映射表如果你沒有動作它是空的,也就是說如果你不手工的增加消息處理函數,則當派生窗口接受一個消息時會執行父類的消息處理函數。這樣做顯然是高效的。
MFC提供的消息結構
同時MFC定義了下面的兩個主要結構:
AFX_MSGMAP_ENTRY
struct AFX_MSGMAP_ENTRY{
UINT nMessage;   // Windows消息的ID號
UINT nCode;  // 控制消息的通知
UINT nID;    // Windows控制消息的ID
UINT nLastID;   //表示是一個指定范圍的消息被映射的范圍
UINT nSig;  //表示消息的動作標識
AFX_PMSG pfn;    // 指向消息處理函數的指針
};
AFX_MSGMAP
struct AFX_MSGMAP{
#ifdef _AFXDLL
const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
#else
const AFX_MSGMAP* pBaseMap;
#endif
const AFX_MSGMAP_ENTRY* lpEntries;
};
///AFX_MSGMAP可以得到基類的消息映射入口地址和得到本身的消息映射入口地址。

MFC下一個消息的處理過程是一般是這樣的。
1、_AfxCbtFilterHook截獲消息(這是一個鉤子函數)
2、_AfxCbtFilterHook把窗口過程設定為AfxWndProc。
3、函數AfxWndProc接收Windows操作系統發送的消息。
4、函數AfxWndProc調用函數AfxCallWndProc進行消息處理。
5、函數AfxCallWndProc調用CWnd類的方法WindowProc進行消息處理。

如何添加自己的消息?
我們已經了解了WINDOW的消息機制,如何加入我們自己的消息呢?好我們來看
一個標準的消息處理程序是這個樣子的
在 CWnd 類中預定義了標準 Windows 消息 (WM_XXXX  WM是WINDOW MESSAGE的縮寫) 的默認處理程序。類庫基于消息名命名這些處理程序。例如,WM_PAINT 消息的處理程序在 CWnd 中被聲明為:
afx_msg void OnPaint();
afx_msg 關鍵字通過使這些處理程序區別于其他 CWnd 成員函數來表明 C++ virtual 關鍵字的作用。但是請注意,這些函數實際上并不是虛擬的,而是通過消息映射實現的。我們在本文的一開始便說明了為什么要這樣做。
所有能夠進行消息處理的類都是基于CCmdTarget類的,也就是說CCmdTarget類是所有可以進行消息處理類的父類。CCmdTarget類是MFC處理命令消息的基礎和核心。

若要重寫基類中定義的處理程序,只需在派生類中定義一個具有相同原型的函數,并創建此處理程序的消息映射項。我們通過ClassWizard可以建立大多數窗口消息或自定義的消息,通過ClassWizard可以自動建立消息映射,和消息處理函數的框架,我們只需要把我們要做的事情填空,添加你要做的事情到處理函數。這個非常簡單,就不細說了。但是也許我們需要添加一些ClassWizard不支持的窗口消息或自定義消息,那么就需要我們親自動手建立消息映射和消息處理的框架,通常步驟如下:
第一步:定義消息。Microsoft推薦用戶自定義消息至少是WM_USER+100,因為很多新控件也要使用WM_USER消息。
#define WM_MYMESSAGE (WM_USER + 100)

第二步:實現消息處理函數。該函數使用WPRAM和LPARAM參數并返回LPESULT。
LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 處理用戶自定義消息,填空就是要填到這里。
return 0;
}
第三步:在類頭文件的AFX_MSG塊中說明消息處理函數:
// {{AFX_MSG(CMainFrame)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
第四步:在用戶類的消息塊中,使用ON_MESSAGE宏指令將消息映射到消息處理函數中。
ON_MESSAGE( WM_MYMESSAGE, OnMyMessage )

可以看出,用戶自定義的消息和我們通過ClassWizard添加的消息一樣,都是利用了ON_MESSAGE宏,建立的消息映射。

其實消息類別可以分成多種,上面說的只是其中之一。有三種主要的消息類別:(以下部分摘自MSDN)
1、Windows 消息
此類消息主要包括以前綴 WM_ 開頭的消息,WM_COMMAND 除外。Windows 消息由窗口和視圖處理。此類消息往往帶有用于確定如何處理消息的參數。
2、控件通知
此類消息包括從控件和其他子窗口發送到其父窗口的 WM_COMMAND 通知消息。例如,當用戶在編輯控件 (Edit Control) 中執行可能更改文本的操作后,該編輯控件 (Edit Control) 將向其父級發送包含 EN_CHANGE 控件通知代碼的 WM_COMMAND 消息。該消息的窗口處理程序以某種適當的方式響應此通知消息,例如在控件中檢索該文本。
框架像傳送其他 WM_ 消息一樣傳送控件通知消息。但是有一個例外的情況,即當用戶單擊按鈕時由按鈕發送的 BN_CLICKED 控件通知消息。該消息被作為命令消息特別處理,并像其他命令一樣傳送。
3、命令消息
此類消息包括用戶界面對象(菜單、工具欄按鈕和快捷鍵)發出的 WM_COMMAND 通知消息??蚣芴幚砻畹姆绞脚c處理其他消息不同,可以使用更多種類的對象處理命令。
Windows 消息和控件通知消息由窗口來處理(窗口是從 CWnd 類派生的類的對象)。包括 CFrameWnd、CMDIFrameWnd、CMDIChildWnd、CView、CDialog 以及從這些基類派生的您自己的類。這些對象封裝了 HWND——Windows 窗口的句柄。
命令消息可以由范圍更廣的對象(文檔、文檔模板以及應用程序對象本身)處理,而不僅僅由窗口和視圖處理。當某一命令直接影響到某個特定對象時,應當讓該對象處理此命令。例如,“文件”菜單中的“打開”命令在邏輯上與應用程序相關聯:該應用程序接收到此命令時會打開指定的文檔。因此“打開”命令的處理程序是應用程序類的成員函數。

命令消息我們比較常見的便是菜單項和工具條了,大家可以看到他的消息映射宏和窗口消息不太一樣,一般的形式是這樣的
ON_COMMAND(id,memberFxn)
第一個參數是命令ID,一個ID號對應一個消息處理,當然你可以讓多個ID共用一個處理函數。常見的應用例如:菜單項打開文檔的ID和工具條按鈕打開文檔的ID同時使用一個處理函數,或者直接將它們的ID設成相同的。

還有一種消息叫通知消息。例如樹型控件的等一些復雜的控件在單擊后需要傳遞更多的信息,例如光標的位置和當前項的一個結構,所以MFC為控件的每個通知消息也定義了一個宏,它長成了這個樣子:
ON_CONTROL(EN_CHANGE,id,memberFxn)

還有很多種消息存在于MFC,宏定義有區別,大家可以觸類旁通。

窗口消息有上百個。你可以從MSDN上查到WM_開頭的,或者查看CWnd的成員函數,會給你列出很多,別忘了還有很多非窗口消息

其他鏈接:http://blog.csdn.net/liufei_learning/article/details/5903287
                     http://www.cnblogs.com/lantionzy/archive/2009/10/10/1580428.html
posted @ 2012-04-19 16:06 王海光 閱讀(1978) | 評論 (0)編輯 收藏
本文轉自:http://hi.baidu.com/agodliness/blog/item/8ad01d0a21734728b0351d70.html

環境變量是指那些可為系統所使用的包含有環境信息的字符串,根據級別的不同而分為系統環境變量和用戶環境變量,并以此給出諸如文件搜索路徑,存放臨時文件的目錄等與系統和用戶相關的環境變量。下表列出了用于環境變量訪問的函數。

                       環境變量訪問函數
 ────────────────────────────────────
               環境變量函數                   函數說明
 ────────────────────────────────────
 GreateEnvironmentBlock()      為特定的用戶創建一個環境塊
 ────────────────────────────────────
 DestoryEnvironmentBlock()     釋放由CreateEnvironmentBlock()創建的環境塊
 ────────────────────────────────────
 GetEnvironmentStrings()       得到當前進程的環境塊的地址
 ────────────────────────────────────
 FreeEnvironmentStrings()      釋放由GetEnvironmentStrings()得到的環境塊
 ────────────────────────────────────
 GetEnvironmentVariable()      得到指定環境變量的相關信息
 ────────────────────────────────────
 SetEnvironmentVariable()      添加,修改或刪除一個指定的環境變量
 ───────────────────────────────────

 注:環境塊是指與進程相關的,包含有環境變量名及其對應值的一個在進程地址空間內分配的內存塊。

   下面的給出的代碼演示了對進程的環境變量進行讀,寫訪問的基本操作過程。

  

 1 // 待操作的環境變量名
 2  CString sEnvironmentName = "PUBLIC";
 3  char cBuffer[256];
 4 
 5  // 讀取環境變量信息
 6   DWORD dwRet = GetEnvironmentVariable(sEnvironmentName, cBuffer, 256);
 7     if (dwRet == 0)
 8     {
 9          // 如果環境變量不存在,則創建之
10     CString sEnvironmentValue("<進程的環境變量測試程序>");
11 
12     BOOL bRet=SetEnvironmentVariable(sEnvironmentName,sEnvironmentValue);
13       if (bRet == TRUE) AfxMessageBox("環境變量設置完畢!");
14                  else AfxMessageBox("環境變量設置失敗!"); 
15     }else{
16            // 如果環境變量存在,顯示環境變量內容
17             CString sMessage("環境變量PUBLIC值為:");
18             sMessage += CString(cBuffer);
19             AfxMessageBox(sMessage);
20     }


    進程的環境變量是具有可繼承性的,即在創建子進程時,是可以同時將環境變量傳遞給子進程的。在創建子進程的過程中,可以有父進程負責控制子進程,子進程可以繼承那些環境變量,一旦子進程創建完畢,父進程即失去對子進程環境變量的控制。實際上,子進程從父進程繼承來的環境變量只是父進程環境變量的一個副本,子進程對其環境變量的修改并不會影響到父進程。


posted @ 2012-04-17 12:21 王海光 閱讀(1774) | 評論 (0)編輯 收藏
VBS中啟動exe程序:
1 set ws=WScript.CreateObject("WScript.Shell"
2 ws.Run "AutoUpdateEx.exe",0,true
3 ws.Run "打印配置工具.exe",0,true
4 ws.Run "DOMASClientMonitor.exe",0,true
5 ws.Run "PrinterMonitorEx.exe",0,false

VBS中啟動exe程序絕對路徑:
1 set ws=WScript.CreateObject("WScript.Shell"
2 ws.Run """C:\Program Files\Test\AutoUpdateEx.exe""",0,true
3 ws.Run """C:\Program Files\Test\DOMASClientMonitor.exe""",0,false
4 ws.Run """C:\Program Files\Test\PrinterMonitorEx.exe""",0,false
5 ws.Run """C:\Program Files\Test\打印配置工具.exe""",0,false

ws.Run實際參數是"C:\Program Files\Test\AutoUpdateEx.exe",因為帶空格,先將它括起來作為一個整體,而兩側的"按要求應該用轉義""表示,故成為""C:\Program Files\Test\AutoUpdateEx.exe"",而Run本身調用參數就得在外部加一對引號,故共有三對引號。用msgbox"""C:\Program Files\Test\AutoUpdateEx.exe"""可驗證結果為"C:\Program Files\Test\AutoUpdateEx.exe"。對于Run方法,可以統一都用三個引號,ws.Run"""C:\"""同樣可以解析;本例也可用ws.Run"C:\progra~1\Test\AutoUpdateEx.exe"來實現。

posted @ 2012-04-16 12:41 王海光 閱讀(2924) | 評論 (0)編輯 收藏
寫注冊表字符串值:
 
 1     //訪問注冊表,hKEY則保存此函數所打開的鍵的句柄
 2     HKEY hKey;
 3     //如果無法打開hKEY,則創建
 4     if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\EMFPrinter"
 5         , 0, KEY_READ|KEY_WRITE|KEY_SET_VALUE, &hKey))
 6     {
 7         if (ERROR_SUCCESS != RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\EMFPrinter",&hKey))
 8 
 9         {    
10             LOG("創建注冊表 %s 失敗", hKey);
11             return FALSE;
12         }
13     }
14 
15     DWORD    dwTypeString = REG_SZ;
16     TCHAR    pDirBuf[255= {0};
17     DWORD    len = 255;
18     //如果無法查詢有關的注冊表信息,設置相關注冊表信息
19     if (ERROR_SUCCESS != RegQueryValueEx(hKey, ""0&dwTypeString,(LPBYTE)pDirBuf, &len))
20     {
21         RegSetValueEx(hKey, ""0, REG_SZ,NULL, 0);    
22     }    
23     RegCloseKey(hKey);

讀取注冊表中DWORD值并且改變其值:

 1 CString sPrinterRegPath = "SYSTEM\\CurrentControlSet\\Control\\Print\\Printers\\dd";
 2     HKEY hkey;
 3     if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, sPrinterRegPath, 0, KEY_READ|KEY_WRITE|KEY_SET_VALUE, 
 4         &hkey)) 
 5     {
 6         LOG("打開打印機注冊表項%s失敗", sPrinterRegPath);
 7         return FALSE;
 8     }
 9 
10     DWORD    dwTypeString = REG_SZ;
11     DWORD    len = 255;
12     DWORD    dwValue;
13     DWORD   dwData = 1;
14     //如果存在有關的注冊表信息,修改相關注冊表信息
15     if (ERROR_SUCCESS == RegQueryValueEx(hkey, "123"0&dwTypeString,(BYTE*)&dwValue, &len))
16     {
17         if (ERROR_SUCCESS == RegSetValueEx(hkey, "123"0, REG_DWORD,(LPBYTE)&dwData, sizeof(DWORD)))
18         {
19             LOG("修改注冊表成功!")
20         }   
21     }    


posted @ 2012-04-13 17:54 王海光 閱讀(1039) | 評論 (0)編輯 收藏
本文轉自:http://m.shnenglu.com/tgh621/archive/2008/04/15/47100.aspx?opt=admin

 1 #include <stdlib.h> #include <iostream>
 2 using namespace std;
 3 
 4 class tgh
 5 {
 6 public:
 7     tgh():i(3){}
 8     const int a() const {return 5;}
 9     int a(){return i;}
10 protected:
11     int i;
12 private:
13 };
14 
15 void main()
16 {
17     const tgh v;
18     tgh s;
19     const int i=s.a();//調用的是int a()
20     int const j=s.a();//調用的是int a()
21     printf("%d,%d",j,i);
22     const int k = v.a();();//調用的是const int a() 
23     cout<<k<<endl;
24     system("pause");
25 }
26 
27 結果是3,3,5 
posted @ 2012-04-13 15:01 王海光 閱讀(384) | 評論 (0)編輯 收藏
相關文章鏈接:

http://special.csdn.net/mongodb/
http://www.cnblogs.com/fish-li/archive/2011/06/26/2090800.html#_labelStart


Hadoop

一個分布式系統基礎架構,由Apache基金會開發。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力高速運算和存儲。Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有著高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬件上。而且它提供高傳輸率(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以流的形式訪問(streaming access)文件系統中的數據。


joomla

(Content Management System, CMS),它屬于Portal(企業入口網站)類型,顧名思義,就是比較適合作為商業類型的網站程序。一般人對這類型的內容管理系統可能會有以下的別名來稱呼:
  ■ 架站程序(或軟件
  ■ 快速架站程序(或軟件)
  ■ 整站程序
posted @ 2012-04-13 12:35 王海光 閱讀(495) | 評論 (0)編輯 收藏
本文轉自:http://m.shnenglu.com/humanchao/archive/2008/07/24/57063.html

學習數據結構和算法的好東西,非常形象,制作水平比較高,向制作者致敬!里面包含以下算法的過程演示:

B樹的刪除
B樹的生長過程
三元組表的轉置
中序線索化二叉樹
串的順序存儲
二分查找
二叉排序樹的刪除
二叉排序樹的生成
二叉樹的建立
克魯斯卡爾算法構造最小生成樹
冒泡排序
分塊查找
單鏈表結點的刪除
單鏈表結點的插入
圖的深度優先遍歷
基數排序
堆排序
頭插法建單鏈表
尋找中序線索化二叉樹指定結點的前驅
尋找中序線索化二叉樹指定結點的后繼
尾插法建表
希兒排序
開放定址法建立散列表
循環隊列操作演示
快速排序
拉鏈法創建散列表
拓撲排序
數據結構和算法Flash動畫演示.rar
最短路徑
樸素串匹配算法過程示意
構造哈夫曼樹的算法模擬
構造哈夫曼樹過程
棧與遞歸
...更多

點擊下載
posted @ 2012-04-13 12:05 王海光 閱讀(676) | 評論 (0)編輯 收藏
本文轉自:http://m.shnenglu.com/humanchao/archive/2008/07/02/55154.html


#import   
"scrrun.dll"   raw_interfaces_only

// 參數格式:"c:\" 或 "c:\test"
ULONGLONG GetPathUseSpace(
const char *szPath)
{
    ASSERT(szPath 
!= NULL);

    
int nLen = strlen(szPath);
    
if (nLen == 0)
        
return 0;

    ULONGLONG result 
= 0;

    
if (nLen == 3)      // c:\
    {
        ULARGE_INTEGER nFreeBytesAvailable;
        ULARGE_INTEGER nTotalNumberOfBytes;
        ULARGE_INTEGER nTotalNumberOfFreeBytes;
        
//
        if (GetDiskFreeSpaceEx(szPath,
              
&nFreeBytesAvailable,
              
&nTotalNumberOfBytes,
              
&nTotalNumberOfFreeBytes))
        {
            result 
= nTotalNumberOfBytes.QuadPart - nFreeBytesAvailable.QuadPart;
        }
    }
    
else
    {
        CoInitialize(NULL);  
        {  
            
try  
            {  
                Scripting::IFileSystem3Ptr   fs;  
                fs.CreateInstance(__uuidof(Scripting::FileSystemObject)); 
                
                Scripting::IFolderPtr   folder;  
                fs
->GetFolder(_bstr_t(szPath),&folder);
                
                _variant_t vsize;
                folder
->get_Size(&vsize);
                result 
= (double)vsize;
            }  
            
catch(_com_error &e)  
            {  
                result 
= -1;
            }  
        }  

        CoUninitialize();   
    }

    
return result;
}

Scrrun.dll枚舉文件
CoInitialize(NULL); 

    
try 
    {  
        Scripting::IFileCollectionPtr   files; 
        folder
-> get_Files(&files); 
        
long   count   =   0
        files
-> get_Count(&count); 
        cout 
< < "files   count: " < <count < <endl; 
        IUnknown   
*pUnk=NULL; 
        HRESULT   hr   
=   files-> get__NewEnum(&pUnk); 
        
if(SUCCEEDED(hr)) 
        { 
            CComPtr 
<IEnumVARIANT>   pEnum; 
            hr   
=   pUnk-> QueryInterface(IID_IEnumVARIANT,(void**)&pEnum); 
            
if(pEnum) 
            { 
                pEnum
-> Reset(); 
                ULONG   fget   
=   1
                
while(SUCCEEDED(hr)&&fget> 0
                { 
                    Scripting::IFilePtr   file; 
                    _variant_t   varfile; 
                    hr   
=   pEnum-> Next(1,&varfile,&fget); 
                    
if(SUCCEEDED(hr)   &&   fget> 0
                    { 
                        file   
=              varfile.pdispVal; 
                        BSTR   bspath; 
                        file
-> get_Path(&bspath); 
                        cout 
< < "file   path: " < <(LPCTSTR)_bstr_t(bspath) < <endl; 
                    } 
                    
else 
                    { 
                        cout 
< < "   get   file     return   " < <hr < <endl; 
                    } 
                } 
            } 
        } 
    } 
    
catch(_com_error   &e) 
    { 
         _bstr_t   bstrSource(e.Source()); 
         _bstr_t   bstrDescription(e.Description()); 
          cout 
< < "Get   directory    size   via   FileSystemObject,   by    masterz " < <endl; 
          cout 
< < "COM   error    occurred,source: " < <(LPCTSTR)bstrSource < <endl; 
          cout 
< < "Description: " < <(LPCTSTR)bstrDescription < <endl; 
    } 

CoUninitialize();
posted @ 2012-04-13 09:33 王海光 閱讀(812) | 評論 (0)編輯 收藏
本文轉自:http://m.shnenglu.com/humanchao/archive/2008/07/23/56962.html

如果BAT不帶參數,腳本內容如下:

SetOutPath '$INSTDIR'
ExecWait '$INSTDIR\A.bat'

如果BAT需要參數時,要把帶參數的命令寫入另外一個新的BAT中,執行新BAT:

B.bat內容:
CALL A.bat install

NSIS 腳本:
SetOutPath '$INSTDIR'
ExecWait '$INSTDIR\B.bat'
posted @ 2012-04-12 13:00 王海光 閱讀(1078) | 評論 (0)編輯 收藏
本文轉自:http://m.shnenglu.com/humanchao/archive/2008/08/19/59309.html

我們先看一個函數:函數的功能完成1~10的加法。

int Add1to10(int a, int b)
{
   
return a +b;
}

但是一般我們還需要加上幾條代碼:

int Add1to10(int a, int b)
{
    assert(a 
>= 1 && a <= 10);
    assert(b 
>= 1 && b < =10);

    
if ( a < 1 || a > 10 || b < 1 || b > 10)
        
return -1;

    
return a +b;
}

加上上面幾條代碼的作用是檢查函數的輸入參數,當參數不正確的時候不光要在返回值上得到體現,而且會觸發assert斷言,提醒我們參數有誤。

斷言式編程體現一個編程的思想,在我們的程序執行偏離預想的路線時給出提醒。當程序執行偏離預想的路線時一般會出現兩種可能:即斷言以上的程序沒有理解下面程序的調用條件、或斷言以下的程序需要接受更為寬泛輸入條件。以下分別討論修改方法:

1、如果函數的輸入參數是我們編程的一個疏漏,我們認為根本就不應該出現或產生這樣的值,那我們應該修改調用函數處的代碼,避免非預想的值出現。

2、如果無法避免出現或者產生一個非法輸入值,那我們要么在函數調用處加入判斷,產生符合條件的值時調用函數,不符合參數條件else處理;要么修改函數,使函數可以接受更為寬泛輸入條件,并調整斷言內容和參數判斷邏輯。

斷言不僅可以出現在函數的參數檢查的場合,也可以出現在其他的上下文調用的場合。而且它還會隨著程序的開發進程逐漸的增加、刪除和調整。它可以驗證程序是按照我們預想的思路在執行,當出現意外時及時的給出提醒,提醒我們修正程序或者自己的思路。
posted @ 2012-04-12 12:58 王海光 閱讀(654) | 評論 (0)編輯 收藏
僅列出標題
共27頁: First 19 20 21 22 23 24 25 26 27 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲青涩在线| 久久久久久久综合狠狠综合| 亚洲免费在线精品一区| 日韩天天综合| 亚洲靠逼com| 国产精品久久二区| 亚洲激情社区| 久久精品在线视频| 亚洲欧美日韩爽爽影院| 亚洲片在线资源| 亚洲午夜在线观看视频在线| 欧美丰满少妇xxxbbb| 亚洲国产美女| 欧美国产日产韩国视频| 狂野欧美一区| 亚洲日韩视频| 亚洲激情影视| 亚洲人成高清| 欧美日本高清| 亚洲精品久久嫩草网站秘色| 欧美国产丝袜视频| 午夜激情亚洲| 一区二区三区毛片| 亚洲免费观看高清完整版在线观看熊 | 国产精品一区二区视频| 亚洲欧美日韩国产中文| 一本一本久久a久久精品牛牛影视| 欧美视频二区| 亚洲欧美区自拍先锋| 欧美mv日韩mv国产网站| 欧美成人按摩| 亚洲精品乱码视频| 中文av一区特黄| 99精品视频免费观看视频| 欧美日韩伦理在线免费| 在线视频精品一| 亚洲图片激情小说| 国产精品每日更新| 在线一区日本视频| 日韩视频在线永久播放| 国产精品久久久久9999高清| 亚洲永久免费观看| 欧美日韩一卡| 欧美在线一级视频| 久久福利视频导航| 国产精品一二| 久久久欧美精品sm网站| 免费在线国产精品| 亚洲一区一卡| 久久久久久久性| 亚洲午夜视频在线观看| 亚洲欧美日韩人成在线播放| 亚洲高清在线观看一区| 亚洲精华国产欧美| 久久精品综合| 亚洲一区二区三区精品动漫| 欧美亚洲日本一区| 一本色道久久综合| 久久久www成人免费无遮挡大片| 亚洲精选在线| 欧美在线短视频| 亚洲婷婷综合久久一本伊一区| 久久国产直播| 男女激情久久| 国产一区二区福利| 日韩视频一区二区在线观看 | 久久精品国产免费| 亚洲精品久久久久中文字幕欢迎你| 午夜日韩在线| 午夜精品久久久久| 欧美日韩国产免费| 亚洲国产成人av好男人在线观看| 国产欧美日韩精品a在线观看| 亚洲成人在线视频网站| 国产一区二区三区久久| 午夜精品一区二区三区四区| 欧美激情a∨在线视频播放| 久久久欧美精品| 国产日韩欧美二区| 亚洲一区二区三区久久| 亚洲图片欧洲图片av| 欧美激情性爽国产精品17p| 免费观看成人| 国内自拍一区| 精品粉嫩aⅴ一区二区三区四区| 亚洲激情女人| 亚洲精品日本| 欧美国产视频在线| 亚洲黄色在线| 亚洲精品久久久久久久久久久久久 | 久久国产精品亚洲77777| 欧美日韩国产不卡在线看| 欧美成人午夜激情| 黄色成人小视频| 午夜精品亚洲| 久久国产精品久久久久久| 亚洲视频综合在线| 亚洲午夜电影在线观看| 欧美日韩亚洲高清| 亚洲精品之草原avav久久| 亚洲最新色图| 欧美呦呦网站| 在线观看一区视频| 亚洲国产高清视频| 亚洲国产精品成人综合| 欧美午夜www高清视频| 国产精品久久久久久一区二区三区| 欧美日本二区| 免费在线观看精品| 欧美在线高清| 欧美激情一区二区三区 | 日韩午夜视频在线观看| 亚洲美女免费视频| 亚洲人成人一区二区在线观看| 国产精品久久亚洲7777| 伊人久久亚洲热| 亚洲美女视频| 欧美中文字幕在线| 欧美国产专区| 国产精品一区二区三区四区五区| 久久美女性网| 欧美亚洲一区| 欧美三级特黄| 国内精品嫩模av私拍在线观看| 久久久99久久精品女同性| aa亚洲婷婷| 欧美va亚洲va香蕉在线| 精品动漫av| 午夜精品在线视频| 久久精品中文字幕一区二区三区| 91久久精品一区| 久久激情一区| 欧美片第1页综合| 久久亚洲精品一区二区| 99综合视频| 一区二区三区在线观看视频| 久久不射2019中文字幕| 一本色道久久综合亚洲精品小说 | 狠狠久久婷婷| 美国十次了思思久久精品导航| 国产精品福利av| 亚洲国产精品悠悠久久琪琪| 免费在线亚洲欧美| 亚洲视频免费在线| 国产精品久在线观看| 日韩小视频在线观看| 91久久精品美女| 久久久久久国产精品一区| 国产精品久久久久久久久免费桃花| 乱人伦精品视频在线观看| 亚洲女女女同性video| 欧美精品v日韩精品v韩国精品v | 欧美一区亚洲| 久久精品国产久精国产爱| 国产精品久久7| 美女成人午夜| 久久久久99精品国产片| 亚洲第一久久影院| 亚洲国产导航| 欧美一区日韩一区| 亚洲香蕉伊综合在人在线视看| 黄色一区二区在线| av成人免费在线观看| 国产精品毛片va一区二区三区| 91久久香蕉国产日韩欧美9色| 国产精品久久久久久久久久久久久 | 亚洲日本va午夜在线电影| 亚洲精品1区| 免费观看在线综合色| 亚洲欧美日韩精品一区二区| 亚洲午夜久久久久久尤物 | 午夜精品久久久久久久| 日韩午夜电影av| 亚洲精品乱码久久久久久| 在线观看中文字幕亚洲| 黄色成人在线| 在线成人小视频| 激情国产一区二区| 精品1区2区3区4区| 国产主播一区二区三区| 国产主播精品| 亚洲欧洲精品一区二区三区不卡 | 一区二区不卡在线视频 午夜欧美不卡' | 久久高清福利视频| 亚洲一本大道在线| 国产一区二区成人| 国产精品综合av一区二区国产馆| 欧美日韩国产免费| 欧美日韩一区在线| 国产精品v亚洲精品v日韩精品 | 亚洲精品一区中文| 欧美成人国产一区二区| 亚洲日本中文字幕| 99在线精品观看| 中文有码久久| 欧美一区二区私人影院日本 | 亚洲国产成人不卡| 亚洲国产另类久久久精品极度| 最近看过的日韩成人| 一区二区三区成人精品|