MFC: CListCtrl.EnableWindow(FALSE),但仍然可滚动



我有一个CListCtrl列表框,我想在完整的功能之间切换,并且是只读的(即用户不能改变选择)。

成员函数CListCtrl.EnableWindow(FALSE)似乎就是为此设计的,除了当我调用

m_listCtrl.EnableWindow(FALSE);
GetDlgItem( IDC_LIST_CTRL_EDIT )->EnableWindow(FALSE);

它的滚动条停止工作(假设我有更多的内容,将适合在CListCtrl)。

是否有一种优雅的方法来实现只读但仍然滚动的行为,而不是覆盖鼠标处理程序,或在每次页面刷新时重置选择?

您可以通过从CListCtrl派生您自己的类并处理LVN_ITEMCHANGING通知来实现这一点。请看下面的示例代码…

void MyClistCtrl::OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult)
    {
    *pResult = FALSE;
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO: Add your control notification handler code here
    // If there is no selection allowed, prevent the item from changing 
    if ((pNMLV->uNewState & LVIS_SELECTED) /* check flag to if it should be read only ie check radiobutton state*/)
        {
        *pResult = TRUE;
        }
    }

上面的代码将无条件地阻止选择,同时仍然允许滚动条发挥作用。控制这种行为的能力可以添加到"if"语句中(例如;检查与单选按钮绑定的标志)

相关内容

  • 没有找到相关文章

最新更新