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

隨筆-162  評論-223  文章-30  trackbacks-0
  1/***************************************************************************************
  2  鄰接矩陣----用來表示所有窗口之間的鄰接關(guān)系,值1表示兩個窗口間相交或相切,值0表示
  3              兩個窗口間相離,實際存儲的是若干窗口組成的非連通無向圖結(jié)構(gòu)
  4  粘合窗口----由鄰接矩陣生成的包含老板窗口的集合,當(dāng)鼠標按在老板窗口上移動時,整個
  5              粘合窗口跟隨移動,實際存儲的是含有老板窗口的一個連通分量
  6  老板窗口----只有當(dāng)鼠標左鍵按在此窗口時,才能移動整個粘合窗口,僅允許有一個老板窗口
  7
  8  2009-12-11  當(dāng)新建客口時,能正確構(gòu)建鄰接矩陣和粘合窗口列表; 當(dāng)關(guān)閉窗口時,能正確重組鄰接矩陣
  9                          和粘合窗口列表當(dāng)大小改變時(如最大化,最小化時),能更新鄰接矩陣和粘合窗口列表
 10  2009-12-30  改進了矩形相切條件的精確判斷
 11  2009-12-31  支持老板窗口能連續(xù)獨立移動
 12****************************************************************************************/

 13
 14CWndMagnet::CWndMagnet():
 15m_hLead(0)
 16{
 17}

 18
 19CWndMagnet::~CWndMagnet()
 20{
 21}

 22
 23/*
 24  @brief 增加磁性窗口
 25  @param hWnd  需要組合分離的窗口
 26  * 一般在窗口初始化或創(chuàng)建時調(diào)用此方法,加入待組合分離的窗口,注意窗口句柄有效性
 27*/

 28void CWndMagnet::AddMagnetWnd(HWND hWnd)
 29{
 30    if (!hWnd || !IsWindow(hWnd)) return;
 31    int uIndex = m_map_magWnd.size();
 32    pair<map<HWND,int>::iterator,bool> pr = m_map_magWnd.insert(make_pair(hWnd, uIndex));
 33    if (!pr.second) return
 34    Add2DMatrix();
 35}

 36
 37/*
 38  @brief 移除磁性窗口
 39  @param hWnd 需要移除的窗口句柄
 40  * 一般在窗口關(guān)閉或銷毀時調(diào)用此方法,移除不組合分離的窗口,注意窗口句柄有效性
 41*/

 42void CWndMagnet::RemoveMagnetWnd(HWND hWnd)
 43{
 44    if (!hWnd || !IsWindow(hWnd)) return;
 45    m_map_leadWnd.erase(hWnd);
 46    Delete2DMatrix(hWnd);
 47    DeleteMagWnd(hWnd);
 48    UpdateLeadWndSet(hWnd);
 49}

 50
 51/*******************************************************************************************
 52 以下為消息映射處理方法,在窗口對應(yīng)消息處理中調(diào)用
 53(1) 在OnLButtonDown調(diào)用::SendMessage(m_hWnd,WM_SYSCOMMAND,0xF012,0)來實現(xiàn)按客戶區(qū)移動時
 54    經(jīng)測試發(fā)現(xiàn): 當(dāng)鼠標左鍵按在標題欄移動窗口時,而后釋放鼠標左鍵,卻收不到WM_NCLBUTTONUP消息,但收到了
 55    WM_NCLBUTTONDOWN消息.同理當(dāng)鼠標左鍵按在客戶區(qū)移動窗口時,,而后釋放鼠標左鍵,卻收不了WM_LBUTTONUP
 56    消息,但收到了WM_LBUTTONDOWN消息.這是移動窗口時發(fā)現(xiàn)的規(guī)律,本質(zhì)上是當(dāng)鼠標左鍵釋放時來更新粘合窗口列表,
 57    但鑒于此規(guī)律,正好符合調(diào)用來更新粘合窗口列表
 58(2) 如果應(yīng)用程序調(diào)用了OnLButtonDown或OnNcLButtonDown則在點擊窗體時就會粘在一起,否則只有移動時
 59    才粘在一起
 60********************************************************************************************/

 61
 62/*
 63  @brief 鼠標左鍵在老板窗口客戶區(qū)按下事件處理方法
 64  @param hWnd  窗口句柄
 65  * 這是為了使老板窗口有機會能獨立連續(xù)移動調(diào)用的方法
 66*/

 67void CWndMagnet::OnLButtonDown(HWND hWnd)
 68{
 69    if (!hWnd || !IsWindow(hWnd))  return;
 70    if (hWnd != m_hLead)           return;
 71 //   Update2DMatrix(hWnd);
 72    UpdateLeadWndSet(hWnd);
 73}

 74
 75/*
 76  @brief 鼠標左鍵在老板窗口非客戶區(qū)按下事件處理方法
 77  @param hWnd  窗口句柄
 78  * 這是為了使老板窗口有機會能獨立連續(xù)移動調(diào)用的方法
 79*/

 80void CWndMagnet::OnNcLButtonDown(HWND hWnd)
 81{
 82    if (!hWnd || !IsWindow(hWnd))  return;
 83    if (hWnd != m_hLead)           return;
 84    UpdateLeadWndSet(hWnd);
 85}

 86
 87/*
 88  @brief 鼠標移動事件處理方法
 89  @param hWnd  窗口句柄
 90  @param lpRect  窗口矩形區(qū)域
 91*/

 92void CWndMagnet::OnMoving(HWND hWnd, LPRECT lpRect)
 93{
 94    if (!m_map_leadWnd.empty()&&hWnd==m_hLead) // return;
 95    {
 96        MoveLeadWndSet(hWnd, lpRect);
 97    }

 98    else
 99    {
100    Update2DMatrix(hWnd, lpRect);
101        //移動老板窗口時,使其有機會能獨立連續(xù)移動
102        if (hWnd!=m_hLead) 
103        {
104            UpdateLeadWndSet(hWnd, lpRect);
105        }

106    }

107}

108
109/*
110  @brief 窗口大小改變后事件處理方法 
111  @param hWnd  窗口句柄
112  @param uType 大小變化類型
113  * 當(dāng)大小改變時更新鄰接矩陣
114*/

115void CWndMagnet::OnSize(HWND hWnd, UINT uType)
116{
117    if (!hWnd || !IsWindow(hWnd))  return;
118    switch (uType)
119    {
120    case SIZE_RESTORED:
121    case SIZE_MINIMIZED:
122    case SIZE_MAXIMIZED:
123        {
124            Update2DMatrix(hWnd);
125            UpdateLeadWndSet(hWnd);
126        }

127        break;
128
129    case SIZE_MAXSHOW:
130        {
131        }

132        break;
133    }

134}

135
136/**************************************************************************
137   以下為實現(xiàn)方法,在類內(nèi)部調(diào)用以實現(xiàn)公有方法的功能
138**************************************************************************/

139void CWndMagnet::DeleteMagWnd(HWND hWnd)
140{
141    map<HWND,int>::iterator iter = m_map_magWnd.find(hWnd);
142    if (iter==m_map_magWnd.end())  return;
143 
144    int index = (*iter).second;
145    m_map_magWnd.erase(iter);
146    for (iter = m_map_magWnd.begin(); iter != m_map_magWnd.end(); ++iter)
147    {
148        int& indexTemp = (*iter).second;
149        if ( indexTemp > index) --indexTemp;
150    }

151}

152//當(dāng)新建窗口時要調(diào)用此函數(shù)來增加對應(yīng)的鄰接矩陣值
153void CWndMagnet::Add2DMatrix()
154{
155    int uColCount = m_map_magWnd.size();
156    int uRowCount = m_vec_2DMatrix.size();
157    for (int row = 0; row < uRowCount; ++row)
158    {
159        for (int col = uRowCount; col < uColCount; ++col)
160        {
161            m_vec_2DMatrix[row].push_back(false);
162        }

163    }

164    vector<bool> vec_bool; 
165    vec_bool.resize(uColCount);
166    m_vec_2DMatrix.push_back(vec_bool);
167}

168//當(dāng)窗口銷毀時要調(diào)用此函數(shù)來刪除對應(yīng)的鄰接矩陣值
169void CWndMagnet::Delete2DMatrix(HWND hWnd)
170{
171    map<HWND,int>::iterator mapIter = m_map_magWnd.find(hWnd);
172    if (mapIter==m_map_magWnd.end())  return;
173
174    int index = (*mapIter).second, row, col;
175    vector<vector<bool> >::iterator iter;
176    for (vector<vector<bool> >::iterator iter1 = m_vec_2DMatrix.begin(); iter1 != m_vec_2DMatrix.end(); ++iter1)
177    {
178        row = distance(m_vec_2DMatrix.begin(), iter1);
179        if (row == index) 
180        {
181            iter = iter1;
182        }

183        for (vector<bool>::iterator iter2 = m_vec_2DMatrix[row].begin(); iter2 != m_vec_2DMatrix[row].end(); ++iter2)
184        {
185            if (distance(m_vec_2DMatrix[row].begin(),iter2)==index) 
186            {
187               m_vec_2DMatrix[row].erase(iter2); break;
188            }

189        }

190    }

191    m_vec_2DMatrix.erase(iter);
192}

193//當(dāng)窗口移動或大小改變時要調(diào)用此函數(shù)來更新鄰接矩陣的值
194//當(dāng)大小改變時lpRect為0
195void CWndMagnet::Update2DMatrix(HWND hWnd, LPRECT lpRect)
196{
197    map<HWND,int>::iterator iter = m_map_magWnd.find(hWnd);
198    if (iter == m_map_magWnd.end())  return;
199
200    UINT  uRow = (*iter).second, uCol;
201    HWND  hWndTemp;
202    RECT  rcWnd,rcTemp;   GetWindowRect(hWnd,&rcWnd);
203    for (iter = m_map_magWnd.begin(); iter != m_map_magWnd.end(); ++iter)
204    {
205        hWndTemp = (*iter).first;  uCol = (*iter).second;
206        if (hWnd != hWndTemp)
207        {
208            GetWindowRect(hWndTemp, &rcTemp);
209            if (0 == lpRect)
210            {
211                RECT rcInter;
212                if (IntersectRect(&rcInter,&rcWnd,&rcTemp)
213                    ||rcWnd.left==rcTemp.right||rcWnd.right==rcTemp.left
214                    ||rcWnd.top==rcTemp.bottom||rcWnd.bottom==rcTemp.top
215                    )
216                    m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = true;
217                else
218                    m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = false;
219            }

220            else
221            {
222                long  lWidth = lpRect->right-lpRect->left, lHeight = lpRect->bottom-lpRect->top;
223                long  lOffX  = lWidth/2, lOffY = lHeight/2;
224                POINT ptCenter = { lpRect->left + lOffX, lpRect->top + lOffY };
225                RECT  rcLeft, rcTop, rcRight, rcBottom, rcCenter;
226
227                SetRect(&rcLeft, rcTemp.left-s_c_iThreshold-lOffX, rcTemp.top-lOffY, 
228                    rcTemp.left-lOffX, rcTemp.bottom+lOffY);
229                SetRect(&rcTop, rcTemp.left-lOffX, rcTemp.top-s_c_iThreshold-lOffY, 
230                    rcTemp.right+lOffX, rcTemp.top-lOffY);
231                SetRect(&rcRight, rcTemp.right+lOffX, rcTemp.top-lOffY, 
232                    rcTemp.right+s_c_iThreshold+lOffX, rcTemp.bottom+lOffY);
233                SetRect(&rcBottom, rcTemp.left-lOffX, rcTemp.bottom+lOffY, 
234                    rcTemp.right+lOffX, rcTemp.bottom+s_c_iThreshold+lOffY);
235                SetRect(&rcCenter, rcTemp.left-lOffX, rcTemp.top-lOffY, 
236                    rcTemp.right+lOffX, rcTemp.bottom+lOffY);
237
238              /************************************************************************
239                  nOffset指示組合或分離時的矩形偏移值,默認為0   
240                  PtInRect判斷一個點是否在指定矩形內(nèi),意味著不包含底邊和右邊
241                ************************************************************************/

242                int nOffset = 0;  
243                if(!m_vec_2DMatrix[uRow][uCol])
244                {
245                    if (PtInRect(&rcLeft, ptCenter))
246                    {
247                        m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = true;
248                        lpRect->right = rcTemp.left - nOffset;
249                        lpRect->left = lpRect->right - lWidth;
250                    }

251                    else if (PtInRect(&rcTop, ptCenter))
252                    {
253                        m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = true;
254                        lpRect->bottom = rcTemp.top - nOffset;
255                        lpRect->top = lpRect->bottom - lHeight;
256                    }

257                    else if (PtInRect(&rcRight, ptCenter))
258                    {
259                        m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = true;
260                        lpRect->left = rcTemp.right + nOffset;
261                        lpRect->right = lpRect->left + lWidth;
262                    }

263                    else if (PtInRect(&rcBottom, ptCenter))
264                    {
265                        m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = true;
266                        lpRect->top = rcTemp.bottom + nOffset;
267                        lpRect->bottom = lpRect->top + lHeight;
268                    }

269                    else if (PtInRect(&rcCenter, ptCenter))
270                    {
271                        m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = true;
272                    }

273                    
274                }

275                else
276                {
277                    if (!PtInRect(&rcLeft, ptCenter)&&!PtInRect(&rcTop, ptCenter)&&!PtInRect(&rcRight, ptCenter)
278                        &&!PtInRect(&rcBottom, ptCenter)&&!PtInRect(&rcCenter, ptCenter))
279                    {
280                        m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = false;
281                    }

282                    else
283                    {
284                        ++nOffset;
285                        OffsetRect(&rcLeft, -nOffset, 0);  OffsetRect(&rcRight, nOffset, 0);
286                        OffsetRect(&rcTop, 0-nOffset);   OffsetRect(&rcBottom, 0, nOffset); 
287                        if (PtInRect(&rcLeft, ptCenter))
288                        {
289                            lpRect->right = rcTemp.left - s_c_iThreshold;
290                            lpRect->left = lpRect->right - lWidth;
291                            m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = false;
292                        }

293                        else if (PtInRect(&rcTop, ptCenter))
294                        {
295                            lpRect->bottom = rcTemp.top - s_c_iThreshold;
296                            lpRect->top = lpRect->bottom - lHeight;
297                            m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = false;
298                        }

299                        else if (PtInRect(&rcRight, ptCenter))
300                        {
301                            lpRect->left  = rcTemp.right + s_c_iThreshold;
302                            lpRect->right = lpRect->left + lWidth;
303                            m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = false;
304                        }

305                        else if (PtInRect(&rcBottom, ptCenter))
306                        {
307                            lpRect->top    = rcTemp.bottom + s_c_iThreshold;
308                            lpRect->bottom = lpRect->top + lHeight;
309                            m_vec_2DMatrix[uRow][uCol] = m_vec_2DMatrix[uCol][uRow] = false;
310                        }

311                    }

312                }

313            }

314        }

315    }

316}

317//當(dāng)移動或擊點窗口時調(diào)用此函數(shù)更新粘合窗口列表
318//當(dāng)點擊窗口時,lpRect為0
319void CWndMagnet::UpdateLeadWndSet(HWND hWnd, LPCRECT lpRect /*=0*/)
320{
321    if (m_vec_2DMatrix.empty())  return;
322
323    map<HWND,int>::iterator iter = m_map_magWnd.find(m_hLead);
324    if (iter == m_map_magWnd.end())  return;
325        
326    m_map_leadWnd.clear();
327    int lead_wnd_index = (*iter).second;
328    int rows = m_vec_2DMatrix.size(), cols = m_vec_2DMatrix[0].size();
329    assert(rows == cols);
330    
331    vector<int> vecCol;
332    vector<bool> vecVisited(rows);
333    DFS(lead_wnd_index, vecVisited, vecCol);
334
335    RECT rcLead; GetWindowRect(m_hLead, &rcLead);
336    for (vector<int>::iterator vecIter = vecCol.begin()+1; vecIter!=vecCol.end();++vecIter)
337    {
338        int index = *vecIter;
339        for (iter = m_map_magWnd.begin(); iter != m_map_magWnd.end(); ++iter)
340        {
341            if ((*iter).second==index) 
342            {
343                HWND hTemp = (*iter).first; RECT rcTemp; 
344                GetWindowRect(hTemp, &rcTemp);
345                LPCRECT pRect = 0;
346                if (0==lpRect||hWnd!=m_hLead) 
347                    pRect = &rcLead;
348                else 
349                    pRect = lpRect;
350                POINT pt = {rcTemp.left-pRect->left, rcTemp.top-pRect->top};
351                m_map_leadWnd[hTemp] = pt; 
352                break;
353            }

354        }

355    }

356}

357//當(dāng)移動老板窗口時調(diào)用此函數(shù)來移動整個粘合窗口
358void CWndMagnet::MoveLeadWndSet(HWND hWnd, LPCRECT lpRect)
359{
360    if (hWnd != m_hLead) return;
361
362    HWND hTemp;    RECT rcTemp; 
363    long lNewLeft, lNewTop;
364    for (map<HWND,POINT>::iterator Iter = m_map_leadWnd.begin(); Iter != m_map_leadWnd.end();++Iter)
365    {
366        lNewLeft = lpRect->left + (*Iter).second.x; 
367        lNewTop  = lpRect->top  + (*Iter).second.y;
368        hTemp = (*Iter).first; GetWindowRect(hTemp,&rcTemp);
369        if (rcTemp.left != lNewLeft || rcTemp.top != lNewTop)
370        {
371          /***********************************************************************************
372               如果不考慮隱藏窗口,已最小化和最大化窗口,則加上以下代碼
373           if ((IsWindowVisible(hTemp))&&!IsIconic(hTemp) && !IsZoomed(hTemp))
374          ************************************************************************************/

375            SetWindowPos(hTemp, 0, lNewLeft, lNewTop, 00, SWP_NOSIZE|SWP_NOZORDER);
376        }

377    }

378}

379
380/*****************************************************************************************
381 下面為實現(xiàn)圖深度搜索遍歷算法的函數(shù)
382 DFS:復(fù)雜度為O(N*N),N為無向圖的頂點個數(shù),可考慮用鄰接表存儲圖來實現(xiàn),
383 其復(fù)雜度為N+E,N為頂點個數(shù),E為邊數(shù)
384******************************************************************************************/

385//找到頂點v的第一個鄰接點
386int CWndMagnet::GetFirstNeighbor(int v)
387{
388    if (-1==v)  return -1;
389    int  num = m_vec_2DMatrix.size();
390    assert(v < num);
391    for (int col = 0; col < num; ++col)
392    {
393        if (m_vec_2DMatrix[v][col]) return col;
394    }

395    return -1;
396}

397//找到頂點V的鄰接點W的下一個鄰接點
398int CWndMagnet::GetNextNeighbor(int v, int w)
399{
400    if (-1==|| -1==w)  return -1;
401    int num = m_vec_2DMatrix.size();
402    for (int col = w + 1; col < num; ++col)
403    {
404        if (m_vec_2DMatrix[v][col])  return col;
405    }

406    return -1;
407}

408
409void CWndMagnet::DFS(int v, vector<bool>& vecVisited, vector<int>& vecNeighbor)
410{
411   vecVisited[v] = true;
412   vecNeighbor.push_back(v);
413   int w = GetFirstNeighbor(v); 
414   for (; w !=-1 ;)
415   {
416       if (!vecVisited[w]) DFS(w, vecVisited, vecNeighbor);
417       w = GetNextNeighbor(v, w);
418   }

419}
posted on 2011-08-27 15:12 春秋十二月 閱讀(2644) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一本色道**综合亚洲精品蜜桃冫 | 久久久国产成人精品| 99re6这里只有精品| 亚洲激情专区| 日韩一区二区免费高清| 亚洲欧美国产另类| 久久久久久久久久码影片| 免费永久网站黄欧美| 最新日韩中文字幕| 99精品热视频| 午夜亚洲视频| 麻豆成人在线| 国产精品啊啊啊| 好吊视频一区二区三区四区| 亚洲国产视频a| 亚洲尤物视频网| 久久青草久久| 一本久道久久综合狠狠爱| 亚洲欧美自拍偷拍| 欧美激情视频免费观看| 国产精品色在线| 亚洲国产精品久久久| 亚洲一区二区少妇| 蜜臀av在线播放一区二区三区 | 欧美一级二区| 欧美激情精品久久久久久蜜臀| 欧美体内she精视频| 精品96久久久久久中文字幕无| 一区二区三区视频在线看| 久久久久中文| 中文在线一区| 欧美freesex交免费视频| 国产乱码精品一区二区三区忘忧草| 亚洲国产你懂的| 久久精品二区三区| 中日韩视频在线观看| 欧美成人黑人xx视频免费观看| 欧美精品一区二区三区久久久竹菊| 国内自拍一区| 亚洲精品之草原avav久久| 欧美与欧洲交xxxx免费观看 | 欧美高清在线| 亚洲欧美日本日韩| 欧美香蕉视频| 一本色道久久综合亚洲精品婷婷| 欧美a级一区| 久久久精品一品道一区| 国产欧美日韩综合一区在线观看 | 久久久噜噜噜久久人人看| 欧美肉体xxxx裸体137大胆| 亚洲激情一区| 亚洲第一中文字幕在线观看| 小处雏高清一区二区三区 | 久久亚洲色图| 亚洲第一区在线| 久久久久久婷| 欧美在线精品免播放器视频| 国产精品免费aⅴ片在线观看| 亚洲视频高清| 在线一区二区三区做爰视频网站| 欧美日韩综合另类| 亚洲午夜国产成人av电影男同| 亚洲国产精品传媒在线观看| 欧美1级日本1级| 一区二区高清在线观看| 一区二区三区四区五区精品视频| 欧美日韩在线看| 亚洲欧美精品中文字幕在线| 亚洲视频一区在线观看| 国产色婷婷国产综合在线理论片a| 欧美一区三区三区高中清蜜桃 | 久久gogo国模裸体人体| 午夜视频一区在线观看| 国内成人精品视频| 亚洲电影免费| 欧美视频在线观看免费| 欧美一区二区三区免费观看| 久久riav二区三区| 91久久精品国产91久久| 亚洲老板91色精品久久| 欧美午夜寂寞影院| 久久国产手机看片| 久久婷婷av| 亚洲私拍自拍| 久久精品伊人| 中文久久精品| 久久精品一级爱片| 免费看av成人| 欧美精品一区二区三区视频| 中国女人久久久| 亚洲欧美日韩久久精品| 在线观看一区视频| 99这里只有久久精品视频| 国产片一区二区| 亚洲成人在线视频网站| 国产精品成人免费| 欧美成va人片在线观看| 国产精品v片在线观看不卡| 久久久久成人网| 欧美日韩国产麻豆| 久久婷婷国产综合精品青草| 欧美激情中文字幕乱码免费| 久久精品国产第一区二区三区| 欧美www在线| 久久精品亚洲一区| 欧美日韩精品在线观看| 欧美成人精品| 国产亚洲人成网站在线观看| 91久久综合| 国模精品娜娜一二三区| 亚洲午夜精品久久| 亚洲日韩欧美视频一区| 午夜欧美大尺度福利影院在线看| 日韩一级裸体免费视频| 欧美中文字幕精品| 欧美一区二区三区精品 | 欧美午夜电影完整版| 蜜桃av一区| 国产婷婷精品| 亚洲性视频h| 亚洲一区在线观看视频| 欧美精品亚洲精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | 一区二区三区精品国产| 亚洲国产三级| 久久综合狠狠综合久久综合88| 久久国产精品久久久| 国产精品久久久久久久久| 亚洲福利视频专区| 在线观看亚洲精品视频| 久久精品99国产精品| 欧美一区二区三区久久精品茉莉花| 欧美日本网站| 亚洲精品极品| 一本色道久久88综合亚洲精品ⅰ| 蜜臀av性久久久久蜜臀aⅴ| 浪潮色综合久久天堂| 一区二区三区在线不卡| 亚洲先锋成人| 亚洲女女做受ⅹxx高潮| 国产精品高潮在线| 亚洲一区二区久久| 久久精品国产69国产精品亚洲| 国产精品最新自拍| 销魂美女一区二区三区视频在线| 久久精品麻豆| 黄色精品在线看| 久久久亚洲欧洲日产国码αv| 欧美日韩精品综合| 亚洲天堂av在线免费| 欧美日韩激情小视频| 日韩午夜在线观看视频| 国产精品99久久不卡二区| 国产精品成人一区二区三区夜夜夜| 99re热这里只有精品视频| 亚洲综合成人婷婷小说| 国产日韩欧美日韩| 免费91麻豆精品国产自产在线观看| 亚洲国产成人精品久久久国产成人一区 | 亚洲一区二区三区四区五区黄| 亚洲欧美日韩系列| 国产一区二区欧美日韩| 免费成人av在线| 一本色道久久综合亚洲二区三区| 欧美一区免费| 亚洲精品一区二区三区av| 国产精品theporn| 欧美影院在线| 亚洲欧洲在线免费| 久久久久久久国产| 在线一区二区三区四区五区| 国产视频一区二区在线观看| 欧美成人一区二区三区在线观看| 中文国产成人精品| 久热这里只精品99re8久| 亚洲精品一区在线观看| 国产精品一区二区久激情瑜伽| 久久久久亚洲综合| 一区二区三区欧美在线| 免费在线国产精品| 性色av一区二区三区红粉影视| 亚洲福利视频三区| 国产欧美日韩不卡免费| 欧美国产综合视频| 欧美一区二区三区在| 一本久道久久综合狠狠爱| 麻豆精品传媒视频| 亚洲欧美日韩综合aⅴ视频| 亚洲国产婷婷综合在线精品| 国产精品久久久久毛片软件 | 亚洲欧美三级伦理| 亚洲日本无吗高清不卡| 久久久久久综合网天天| 亚洲一区日本| 一本久久综合亚洲鲁鲁| 亚洲激情午夜| 亚洲国产高清一区| 国产亚洲精品综合一区91| 欧美日韩一区在线播放| 欧美激情2020午夜免费观看|