Список Win32 не обновляется сразу после сообщения LB_ADDSTRING - PullRequest
2 голосов
/ 10 октября 2010

ОС: Win7

Список

не обновляет свой регион после

SendMessage (hwndListData, LB_ADDSTRING, 0, (LPARAM) szListMainBuffer);

Если курсор мыши наведен на пустую строку, которая должна содержать текст из szListMainBuffer, и щелкнуть мышью, появится текст. Я пытался использовать функции UpdateWindow (), InvalidateRect (), нацеленные на hwndListData и родительское окно, без эффекта.

Кто-нибудь знает, как решить проблему обновления списка после вставки строки?

        hwndListData = CreateWindow(TEXT("listbox"), L"Data List", 
                                            WS_CHILDWINDOW | WS_VISIBLE | LBS_NOTIFY | WS_VSCROLL | WS_HSCROLL | WS_BORDER, 
                                            cxChar * 50, cyChar, 
                                            cxChar * 38 + GetSystemMetrics(SM_CXVSCROLL), cyChar * 26 + GetSystemMetrics(SM_CYHSCROLL), 
                                            hwnd, (HMENU) ID_LISTDATA, 
                                            (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
                                            NULL);

Дополнение:

Global scope: WNDPROC oldListDataProcedure;

During WM_CREATE: oldListDataProcedure = (WNDPROC) SetWindowLong (hwndListData, GWL_WNDPROC, (LPARAM) ListDataProc); 

LRESULT CALLBACK ListDataProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
   return CallWindowProc(oldListDataProcedure, hwnd, message, wParam, lParam); 
}

Ответы [ 2 ]

1 голос
/ 10 октября 2010

должно обновиться само собой. Тот факт, что UpdateWindow и InvalidateRect не работали, также говорит мне, что ошибка может быть в другом месте вашего кода. Если он маленький, не стесняйтесь размещать его. Список находится сверху любого другого элемента управления? Что происходит, когда вы изменяете размер окна?

0 голосов
/ 06 июля 2017

Чтобы исправить это, перейдите в свойства Listbox Control и измените NoRedraw с true на false .

...