首先,這是個比較簡單的功能,也就是實現CListCtrl控件可以處理完當前行後自動換到下一行而且自已選中,思路很簡單,先給CListCtrl控件添加個NM_CLICK事件響應函數,手動或者自動都行。
然後用代碼選中需要顯示的行,代碼如下:
m_List.SetFocus() m_List.SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
第一句需要添加,網上有的貼子寫選中行時沒有添加第一行,也就是沒有設置焦點,這樣第二句不會生效,也就是不會選中。
選中之後,剩下的就是給窗口發事件通知了,其實我們這個事件的過程是當用戶手動點擊了List控件的某一行時,控件知道自己被點擊了,然後給父窗口發送事件通知,而父窗口收到通知後會查相應的事件響應,查找到對應的響應函數。所以,我們要做的就是模擬用戶單擊CListCtrl控件,給窗口發消息。
代碼很簡單,如下:
NMLISTVIEW nmListView; nmListView.iItem = nItem; //告訴響應函數選中的是第幾行,如果爲-1則爲不選中 nmListView.hdr.code = 事件類型(我們這裏寫NM_CLICK); nmListView.hdr.idFrom = 控件ID; nmListView.hdr.hwndFrom = 控件自己的窗口句柄; ::SendMessage(響應的窗口句柄,WM_NOTIFY,NULL,(LPARAM)&nmListView);
嗯嗯。很簡單吧,雖然很簡單,但還是發出來,給有需要的同學用用!!