• <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(太子) 閱讀(701) 評論(0)  編輯 收藏 引用 所屬分類: Windows Kernel
            日本久久久精品中文字幕| 久久久久18| 久久精品中文騷妇女内射| 久久久久亚洲av无码专区| 精品国产一区二区三区久久| 国产午夜福利精品久久| 亚洲欧洲久久久精品| 少妇久久久久久被弄高潮| 久久婷婷久久一区二区三区| 精品久久久久成人码免费动漫| 国产精品免费福利久久| 久久久这里有精品中文字幕| 久久婷婷五月综合色奶水99啪| 国产精品99久久久久久董美香| 久久人妻无码中文字幕| 99精品伊人久久久大香线蕉| AV无码久久久久不卡蜜桃| 狠狠精品干练久久久无码中文字幕| 亚洲色大成网站www久久九| 精品久久久久久无码中文字幕 | 久久精品亚洲精品国产色婷| 久久99精品久久久久久齐齐| 乱亲女H秽乱长久久久| 77777亚洲午夜久久多喷| 久久涩综合| 午夜精品久久久久久久无码| 99国内精品久久久久久久| 久久99久久99小草精品免视看| 午夜精品久久久久久99热| 一本综合久久国产二区| 久久久久国产一区二区| 久久久久无码国产精品不卡| 国内精品久久久久久麻豆 | 欧美粉嫩小泬久久久久久久| 91性高湖久久久久| 亚洲国产精品久久久久| 久久伊人精品青青草原高清| 一本久久久久久久| 狠狠色丁香婷婷综合久久来来去| 国产精品gz久久久| 久久精品综合一区二区三区|