我插入一個項目在我的共同控制列表視圖這樣的:禁用自動滾動(WIN32 API,C)
void InsertRow (HWND hWnd, char *col1, char *col2)
{
LV_ITEM lvItem;
lvItem.mask = 0;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.iItem = ListView_InsertItem (hWnd, &lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.pszText = col1;
lvItem.cchTextMax = strlen (lvItem.pszText);
ListView_SetItem (hWnd, &lvItem);
lvItem.iSubItem = 1;
lvItem.pszText = col2;
lvItem.cchTextMax = strlen (lvItem.pszText);
ListView_SetItem (hWnd, &lvItem);
}
和工作正常,但它是一種痛苦,因爲垂直滾動回到列表的頂部,所以如果我正在觀看一個項目並調用這個插入函數,我就失去了我的視圖,並且必須手動回滾,導致我的程序無法使用。
如何防止這種自動滾動?
我在C編程,直接與win32 API(不是MFC)。
Pd積:ListView的風格: LVS_SINGLESEL | WS_BORDER | WS_TABSTOP | WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|LVS_REPORT
從我使用本地列表框的經驗等,我發現他們的默認行爲很粗糙。你可以嘗試的是「列出」列表框,即爲某些消息運行自定義的windproc。在這種情況下,你應該尋找WM_VSCROLL或類似的東西。每當你添加一個項目到列表中,在你的程序中設置一個標誌「no_scroll」。如果在設置「no_scroll」的情況下,子類Windproc獲得滾動消息,請將其丟棄。 – Lundin