2010-10-10 68 views
2
後immideately更新

OS:Win7的後的Win32列表框不LB_ADDSTRING消息

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); 
} 

回答

1

應該自行更新。 UpdateWindow和InvalidateRect不起作用的事實告訴我這個錯誤可能在你的代碼中的其他地方。如果它很小,請隨時發佈。列表框是否位於任何其他控件之上?當您調整窗口大小時會發生什麼?

+0

它280行..所以沒有發佈:)低於它,只是父母的客戶區。當我調整它的大小時,文字會出現。 – 2010-10-10 11:17:20

+0

嗯...做了什麼特別的控制(如子類)? – 2010-10-10 11:22:23

+0

是的。 WNDPROC oldListDataProcedure;如你所見,胸圍還沒有。 oldListDataProcedure =(WNDPROC)SetWindowLong(hwndListData,GWL_WNDPROC,(LPARAM)ListDataProc); LRESULT CALLBACK ListDataProc \t(HWND HWND,UINT消息,WPARAM wParam參數,LPARAM lParam的) { \t返回CallWindowProc的(oldListDataProcedure,HWND,消息的wParam,LPARAM); } – 2010-10-10 11:51:30

0

要修復它,去到ListBox控件性能和真正改變NoRedraw