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

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

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

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

 22
 23/*
 24  @brief 增加磁性窗口
 25  @param hWnd  需要組合分離的窗口
 26  * 一般在窗口初始化或創建時調用此方法,加入待組合分離的窗口,注意窗口句柄有效性
 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  * 一般在窗口關閉或銷毀時調用此方法,移除不組合分離的窗口,注意窗口句柄有效性
 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 以下為消息映射處理方法,在窗口對應消息處理中調用
 53(1) 在OnLButtonDown調用::SendMessage(m_hWnd,WM_SYSCOMMAND,0xF012,0)來實現按客戶區移動時
 54    經測試發現: 當鼠標左鍵按在標題欄移動窗口時,而后釋放鼠標左鍵,卻收不到WM_NCLBUTTONUP消息,但收到了
 55    WM_NCLBUTTONDOWN消息.同理當鼠標左鍵按在客戶區移動窗口時,,而后釋放鼠標左鍵,卻收不了WM_LBUTTONUP
 56    消息,但收到了WM_LBUTTONDOWN消息.這是移動窗口時發現的規律,本質上是當鼠標左鍵釋放時來更新粘合窗口列表,
 57    但鑒于此規律,正好符合調用來更新粘合窗口列表
 58(2) 如果應用程序調用了OnLButtonDown或OnNcLButtonDown則在點擊窗體時就會粘在一起,否則只有移動時
 59    才粘在一起
 60********************************************************************************************/

 61
 62/*
 63  @brief 鼠標左鍵在老板窗口客戶區按下事件處理方法
 64  @param hWnd  窗口句柄
 65  * 這是為了使老板窗口有機會能獨立連續移動調用的方法
 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 鼠標左鍵在老板窗口非客戶區按下事件處理方法
 77  @param hWnd  窗口句柄
 78  * 這是為了使老板窗口有機會能獨立連續移動調用的方法
 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  窗口矩形區域
 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        //移動老板窗口時,使其有機會能獨立連續移動
102        if (hWnd!=m_hLead) 
103        {
104            UpdateLeadWndSet(hWnd, lpRect);
105        }

106    }

107}

108
109/*
110  @brief 窗口大小改變后事件處理方法 
111  @param hWnd  窗口句柄
112  @param uType 大小變化類型
113  * 當大小改變時更新鄰接矩陣
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   以下為實現方法,在類內部調用以實現公有方法的功能
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//當新建窗口時要調用此函數來增加對應的鄰接矩陣值
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//當窗口銷毀時要調用此函數來刪除對應的鄰接矩陣值
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//當窗口移動或大小改變時要調用此函數來更新鄰接矩陣的值
194//當大小改變時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判斷一個點是否在指定矩形內,意味著不包含底邊和右邊
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//當移動或擊點窗口時調用此函數更新粘合窗口列表
318//當點擊窗口時,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//當移動老板窗口時調用此函數來移動整個粘合窗口
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 下面為實現圖深度搜索遍歷算法的函數
382 DFS:復雜度為O(N*N),N為無向圖的頂點個數,可考慮用鄰接表存儲圖來實現,
383 其復雜度為N+E,N為頂點個數,E為邊數
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>
            亚洲永久字幕| 免费日韩av片| 黄页网站一区| 国产一区二三区| 国产一区二区主播在线| 国产亚洲永久域名| 怡红院精品视频| 亚洲第一天堂av| 亚洲国产人成综合网站| 亚洲精品少妇网址| 亚洲色图制服丝袜| 午夜免费久久久久| 美女精品在线观看| 99精品欧美一区二区三区| 亚洲图片在线| 久久久在线视频| 午夜一区在线| 国产精品99免视看9| 国产精品捆绑调教| 伊人成人在线视频| 一区二区三区久久| 久久精品国产91精品亚洲| 嫩草成人www欧美| 一本久久综合| 久久精品视频在线看| 欧美日韩天天操| 在线观看久久av| 午夜精品在线| 亚洲国产视频直播| 亚洲欧美激情在线视频| 女主播福利一区| 国产亚洲一区在线| 亚洲免费在线视频一区 二区| 久久久另类综合| 一区二区黄色| 欧美成人久久| 国外成人在线| 亚洲欧美日韩一区二区三区在线观看| 欧美成人激情在线| 亚洲一区二区精品在线观看| 欧美国产在线视频| 在线观看91精品国产麻豆| 亚洲一区二区在线视频| 亚洲欧洲日韩在线| 蜜臀av一级做a爰片久久| 午夜影院日韩| 亚洲欧洲在线看| 亚洲男人的天堂在线| 欧美黄免费看| 亚洲精品1234| 麻豆成人av| 亚洲一二三四久久| 欧美午夜精品理论片a级大开眼界| 在线视频成人| 蜜臀久久99精品久久久久久9| 欧美影院精品一区| 国产视频欧美视频| 香蕉久久久久久久av网站| 国产精品99久久久久久人| 欧美日韩在线观看一区二区三区| 亚洲毛片在线看| 亚洲欧洲视频| 欧美午夜一区二区福利视频| 亚洲日本国产| 久久久久久久成人| 亚洲淫片在线视频| 亚洲欧美成人一区二区在线电影| 欧美人成网站| 中文在线不卡| 99视频精品免费观看| 欧美三级精品| 午夜在线不卡| 亚洲午夜激情网站| 香蕉成人啪国产精品视频综合网| 伊人夜夜躁av伊人久久| 亚洲色图在线视频| 亚洲激情在线观看| 亚洲欧美中文另类| 国产精品最新自拍| 久久精品视频99| 久久国产精品久久w女人spa| 国内自拍一区| 欧美激情在线免费观看| 欧美精品二区三区四区免费看视频| 亚洲国产欧美另类丝袜| 亚洲精品美女久久久久| 国产精品成人播放| 欧美一区影院| 免费欧美视频| 亚洲在线一区| 午夜精品视频一区| 亚洲激精日韩激精欧美精品| 一二三区精品福利视频| 国内精品久久久久影院优| 美女在线一区二区| 欧美亚州一区二区三区| 久久都是精品| 欧美激情一区二区三级高清视频| 国产精品99久久久久久久女警| 亚洲欧美另类中文字幕| 亚洲电影第三页| 亚洲午夜视频在线| 亚洲国产欧美另类丝袜| 亚洲欧美美女| 一本色道**综合亚洲精品蜜桃冫| 亚洲图片欧美一区| 亚洲激情在线观看视频免费| 亚洲一区二区三区精品在线观看| 国内精品福利| 亚洲天堂av图片| 亚洲高清不卡av| 小辣椒精品导航| 亚洲一区二区三区中文字幕在线 | 久久精品国语| 欧美黑人国产人伦爽爽爽| 欧美一区二区三区电影在线观看| 欧美大片在线观看一区二区| 久久大香伊蕉在人线观看热2| 欧美日本中文字幕| 免费观看一区| 国色天香一区二区| 午夜欧美不卡精品aaaaa| 亚洲视频在线一区观看| 欧美黄色影院| 久久综合图片| 极品av少妇一区二区| 欧美一二三区精品| 午夜久久电影网| 国产精品极品美女粉嫩高清在线| 欧美成人免费大片| 一区二区三区精品国产| 老司机午夜精品视频| 久久精品在线免费观看| 国产欧美欧洲在线观看| 一本久道久久综合婷婷鲸鱼| 亚洲精品123区| 毛片精品免费在线观看| 欧美国产日韩视频| 亚洲国产高清aⅴ视频| 老司机一区二区| 欧美激情一区二区久久久| 亚洲国产成人一区| 久久午夜视频| 亚洲狠狠婷婷| 亚洲视频在线观看免费| 欧美日韩综合久久| 亚洲视频成人| 久久激情五月丁香伊人| 国产在线成人| 久久久精品免费视频| 欧美成人精品1314www| 亚洲国产三级网| 欧美激情在线观看| 99精品欧美一区二区三区 | 激情欧美一区二区三区在线观看| 羞羞色国产精品| 狂野欧美激情性xxxx欧美| 亚洲高清资源| 欧美日韩国产成人在线免费| 中文有码久久| 久热综合在线亚洲精品| 亚洲靠逼com| 国产精品国产馆在线真实露脸| 亚洲精品一二三| 性伦欧美刺激片在线观看| 好看不卡的中文字幕| 欧美精品福利| 小黄鸭精品aⅴ导航网站入口| 欧美风情在线| 午夜精品久久久久久久久久久久久 | 亚洲精品视频一区| 欧美在线一二三| 亚洲精品国精品久久99热| 国产精品电影在线观看| 久久久久久69| 这里只有精品丝袜| 欧美成人影音| 欧美在线播放一区| 亚洲精品日韩激情在线电影| 国产美女搞久久| 欧美精品九九| 久久精品国产清高在天天线 | 久久久人成影片一区二区三区观看| 亚洲国产一区二区a毛片| 欧美一区日本一区韩国一区| 最新日韩av| 永久91嫩草亚洲精品人人| 国产精品毛片在线看| 欧美国产先锋| 久久成人综合视频| 一区二区三区黄色| 亚洲欧洲日韩综合二区| 免费在线欧美黄色| 久久国产精品72免费观看| 一区二区久久| 亚洲欧美在线免费| 99re6这里只有精品视频在线观看| 国产欧美日韩一区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 国产一区视频网站|