0

我有一个启用多项选择的列表视图。用户可以通过在按住 shift 或 Ctrl 键的同时单击多个项目来获得多项选择。我尝试实现的是通过按住鼠标左键并拖动项目以选择它们来获得多项选择。

我尝试按照 Microsoft 文档回复 LVN_MARQUEEBEGIN。我的程序从未收到此消息。该文档没有说明如何响应此消息。

这是我的代码示例:

static int  Count ;
static int  SelectedItem ;

case WM_NOTIFY :

  switch ((reinterpret_cast <NMHDR *> (lParam))->code) {

    case NM_CLICK:
        #define pnmitem ((NMITEMACTIVATE *) lParam)
        if (SelectedItem == pnmitem->iItem) {  // item clicked again
            SelectedItem = -1 ;
            ListView_SetItemState (hwndListView,-1,0,0x000F) ;
        } /* if (SelectedItem == pnmitem->iItem) */
        else {
            if (pnmitem->iItem != -1)
                SelectedItem = pnmitem->iItem ;
        } /* else */

        Count = ListView_GetSelectedCount (hwndListView) ;
        switch (Count) {
            case 0 :
                EnableWindow (hwndMerge,false) ;
                EnableWindow (hwndSplit,false) ;
                break ;
            case 1 :
                EnableWindow (hwndMerge,false) ;
                EnableWindow (hwndSplit,true) ;
                break ;
            default :
                EnableWindow (hwndMerge,true) ;
                EnableWindow (hwndSplit,true) ;
        } /* switch (Count) */
        return true ;

    case LVN_MARQUEEBEGIN :
        ;
        ;
        return 0 ;

  } /* switch ((reinterpret_cast <NMHDR *> (lParam))->code) */
  break ; 
  1. LVN_MARQUEEBEGIN 是在我的情况下使用的正确消息。
  2. 在我看来,选择完成后应该有另一条消息。或者为什么微软称它为 xxxbegin。但我找不到其他消息。
  3. 谁能告诉我在哪里可以找到使用 LVN_MARQUEEBEGIN 的示例或示例代码。

谢谢你们

4

0 回答 0