2015-05-22 142 views
0

我有一個CListCtrl列表框,我想在全部功能之間進行切換,並且是隻讀的(即用戶無法更改選擇)。MFC:CListCtrl.EnableWindow(FALSE),但仍然可滾動?

成員函數CListCtrl.EnableWindow(FALSE)似乎專爲這,只是當我打電話

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

其上的滾動條停止工作(假設我有更多的內容比將適合的CListCtrl)。

除了覆蓋鼠標處理程序或重置每個頁面上的選擇刷新之外,是否有優雅的方式來實現只讀但仍然滾動的行爲?

回答

1

您可以通過從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」語句中(例如,檢查與單選按鈕關聯的標誌)。

相關問題