• <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(太子) 閱讀(685) 評論(0)  編輯 收藏 引用 所屬分類: Windows Kernel
            久久99精品免费一区二区| 麻豆一区二区99久久久久| 伊人久久大香线蕉精品| 青青草原综合久久| 欧美与黑人午夜性猛交久久久| 久久久久综合中文字幕| 久久久精品2019免费观看| 国产成人精品久久亚洲高清不卡| 亚洲国产成人久久一区WWW| 亚洲精品乱码久久久久久| 亚洲国产精品久久久久久| 奇米影视7777久久精品人人爽| 久久夜色精品国产噜噜亚洲AV| 国产精品成人99久久久久| 无码人妻少妇久久中文字幕蜜桃 | 伊人久久大香线蕉亚洲| www性久久久com| 精品久久久一二三区| 久久精品国产影库免费看| 亚洲AV日韩AV永久无码久久| 精品久久国产一区二区三区香蕉| 亚洲精品乱码久久久久66| 亚洲国产香蕉人人爽成AV片久久| 久久精品成人免费看| 久久亚洲私人国产精品vA| 久久香综合精品久久伊人| 久久精品国产亚洲5555| 伊人色综合久久天天| 狠狠色丁香婷综合久久| 国内精品久久久久久99蜜桃 | 无码精品久久久天天影视| 久久亚洲精品无码播放| 久久精品男人影院| 日韩一区二区久久久久久| 久久久久免费精品国产| 97久久天天综合色天天综合色hd | 伊人 久久 精品| 思思久久99热只有频精品66| 亚洲国产成人久久综合一区77| 欧美久久天天综合香蕉伊| 色综合久久久久综合99|