• <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>
            隨筆-60  評論-111  文章-0  trackbacks-0
              1 /***
              2  * DESCRIPTION:
              3  * Processes mouse down messages (left mouse button).
              4  *
              5  * PARAMETERS:
              6  *   infoPtr  [I ] valid pointer to the listview structure
              7  *   wKey     [I ] key flag
              8  *   x,y      [I ] mouse coordinate
              9  *
             10  * RETURN:
             11  *   Zero
             12  */
             13 static LRESULT LISTVIEW_LButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, INT y)
             14 {
             15   LVHITTESTINFO lvHitTestInfo;
             16   static BOOL bGroupSelect = TRUE;
             17   POINT pt = { x, y };
             18   INT nItem;
             19 
             20   TRACE("(key=%hu, X=%u, Y=%u)\n", wKey, x, y);
             21 
             22   /* send NM_RELEASEDCAPTURE notification */
             23   if (!notify(infoPtr, NM_RELEASEDCAPTURE)) return 0;
             24 
             25   /* set left button down flag and record the click position */
             26   infoPtr->bLButtonDown = TRUE;
             27   infoPtr->ptClickPos = pt;
             28   infoPtr->bDragging = FALSE;
             29   infoPtr->bMarqueeSelect = FALSE;
             30   infoPtr->bScrolling = FALSE;
             31 
             32   lvHitTestInfo.pt.x = x;
             33   lvHitTestInfo.pt.y = y;
             34 
             35   nItem = LISTVIEW_HitTest(infoPtr, &lvHitTestInfo, TRUE, TRUE);
             36   TRACE("at %s, nItem=%d\n", wine_dbgstr_point(&pt), nItem);
             37   if ((nItem >= 0&& (nItem < infoPtr->nItemCount))
             38   {
             39     if ((infoPtr->dwLvExStyle & LVS_EX_CHECKBOXES) && (lvHitTestInfo.flags & LVHT_ONITEMSTATEICON))
             40     {
             41         toggle_checkbox_state(infoPtr, nItem);
             42         return 0;
             43     }
             44 
             45     if (infoPtr->dwStyle & LVS_SINGLESEL)
             46     {
             47       if (LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED))
             48         infoPtr->nEditLabelItem = nItem;
             49       else
             50         LISTVIEW_SetSelection(infoPtr, nItem);
             51     }
             52     else
             53     {
             54       if ((wKey & MK_CONTROL) && (wKey & MK_SHIFT))
             55       {
             56         if (bGroupSelect)
             57     {
             58           if (!LISTVIEW_AddGroupSelection(infoPtr, nItem)) return 0;
             59           LISTVIEW_SetItemFocus(infoPtr, nItem);
             60           infoPtr->nSelectionMark = nItem;
             61     }
             62         else
             63     {
             64           LVITEMW item;
             65 
             66       item.state = LVIS_SELECTED | LVIS_FOCUSED;
             67       item.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
             68 
             69       LISTVIEW_SetItemState(infoPtr,nItem,&item);
             70       infoPtr->nSelectionMark = nItem;
             71     }
             72       }
             73       else if (wKey & MK_CONTROL)
             74       {
             75         LVITEMW item;
             76 
             77     bGroupSelect = (LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED) == 0);
             78     
             79     item.state = (bGroupSelect ? LVIS_SELECTED : 0| LVIS_FOCUSED;
             80         item.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
             81     LISTVIEW_SetItemState(infoPtr, nItem, &item);
             82         infoPtr->nSelectionMark = nItem;
             83       }
             84       else  if (wKey & MK_SHIFT)
             85       {
             86         LISTVIEW_SetGroupSelection(infoPtr, nItem);
             87       }
             88       else
             89       {
             90     if (LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED))
             91     {
             92       infoPtr->nEditLabelItem = nItem;
             93       infoPtr->nLButtonDownItem = nItem;
             94 
             95           LISTVIEW_SetItemFocus(infoPtr, nItem);
             96     }
             97     else
             98       /* set selection (clears other pre-existing selections) */
             99       LISTVIEW_SetSelection(infoPtr, nItem);
            100       }
            101     }
            102 
            103     if (infoPtr->dwLvExStyle & LVS_EX_ONECLICKACTIVATE)
            104         if(lvHitTestInfo.iItem != -1) notify_itemactivate(infoPtr,&lvHitTestInfo);
            105   }
            106   else
            107   {
            108     if (!infoPtr->bFocus)
            109         SetFocus(infoPtr->hwndSelf);
            110 
            111     /* remove all selections */
            112     if (!(wKey & MK_CONTROL) && !(wKey & MK_SHIFT))
            113         LISTVIEW_DeselectAll(infoPtr);
            114     ReleaseCapture();
            115   }
            116   
            117   return 0;
            118 }
            posted on 2011-09-15 21:45 shaker(太子) 閱讀(696) 評論(0)  編輯 收藏 引用 所屬分類: Windows Kernel
            大香伊人久久精品一区二区| 久久香蕉国产线看观看精品yw| 精品国产乱码久久久久久郑州公司 | 国产精品美女久久久久久2018| 久久精品国产精品亚洲毛片| 99久久精品国产高清一区二区 | 曰曰摸天天摸人人看久久久| 久久中文精品无码中文字幕| 亚洲av日韩精品久久久久久a| 国内精品久久久久久野外| 国产精品内射久久久久欢欢| 亚洲中文字幕无码久久综合网| 久久夜色精品国产亚洲| 久久久久se色偷偷亚洲精品av| 91久久精品国产成人久久| 亚洲美日韩Av中文字幕无码久久久妻妇 | 亚洲精品无码久久久久去q | 青青青国产成人久久111网站| 亚洲&#228;v永久无码精品天堂久久| 久久精品青青草原伊人| 久久99精品久久久久久噜噜| 一本色综合网久久| 四虎国产精品成人免费久久| 国产精品欧美久久久久天天影视| 久久亚洲AV成人无码国产| 亚洲国产成人久久精品99 | 久久精品成人免费网站| 久久久久国产精品人妻| 久久久精品日本一区二区三区 | 国产精品99久久久精品无码| 久久精品国产精品亜洲毛片| 国产精品成人精品久久久| 久久亚洲日韩精品一区二区三区| 精品久久久久久久国产潘金莲| 久久精品无码一区二区app| 久久青青草原综合伊人| 久久99精品国产99久久| 亚洲国产成人久久精品动漫| 久久被窝电影亚洲爽爽爽| 国产精品久久久久国产A级| 国产亚洲综合久久系列|