Hallo. Hab mich schon wieder in einem Problem festgefahren…
Ich erzeuge eine Listbox mit CreateWindowEx und möchte ihrem Standardverhalten ein paar Dinge hinzufügen. Dazu habe ich mit
SetWindowLong(ListBoxHandle,GWL_WNDPROC,Integer(@ListboxWindowProc));
den WNDPROC-Zeiger auf meine WindowProc gebogen:
function ListboxWindowProc(hWin, Msg, wMessage, lMessage: LongInt): LongInt; stdcall;
Die wird auch ordnungsgemäß aufgerufen. Darin rufe ich die Standard-Proc auf mit
Result := DefWindowProc(hWin, Msg, wMessage, lMessage);
Das sollte doch eigentlich dafür sorgen, daß sich die Listbox wie eine ganz normale Listbox verhält.
Mein Problem: das tut sie nicht. Der Rand wird gezeichnet, nicht aber der Clientbereich. Eine WM_Paint - Botschaft erhält sie.
Sie erhält keine WM_DrawItem - Botschaft, unabhängig davon, ob LBS_Ownerdraw gesetzt ist oder nicht.
Wenn ich SetWindowLong NICHT aufrufe, verhält sie sich wie eine Standard-Listbox.
Dankbar für jeden Tipp, ich kenn mich mit der Non-VCL-Programmierung nicht aus, hab kein Buch dazu und die Online-Hilfe ist besch…
Jochen