Eine Listbox mutiert ...


Eine DragListbox ist nur eine etwas modifizierte normale Listbox. Letztendlich bringen wir ihr nur bei, Einträge per Drag&Drop verschieben zu können. Diese Modifizierung wird ganz einfach durch einen Aufruf der API-Funktion MakeDragList erreicht. Übergeben wird einfach das Handle der zu modifizierenden Listbox:

MakeDragList(GetDlgItem(HDlg,IDC_LISTBOX));

Der bool-Rückgabewert kann zur Kontrolle dienen. Sollte die Listbox nicht modifiziert werden können, sollten Sie das Programm beenden, bzw. zumindest alle Funktionen, die irgendwie von der Modifizierung abhängig sind, deaktivieren.


Zusätzlich muss man noch eine Nachricht bei Windows registrieren, die von Windows generiert wird, wenn es zu einer Drag&Drop-Operation in der Listbox kommt:

DL_MESSAGE := RegisterWindowMessage(DRAGLISTMSGSTRING);

"DL_MESSAGE" ist unsere Nachricht, und hinter DRAGLISTMSGSTRING verbirgt sich eine vom System vorgegebene Stringkonstante.
Die Funktion RegisterWindowMessage erzeugt eine systemweit einzigartige Nachricht. Das bedeutet, ruft ein anderes Fenster die Funktion mit der gleichen Stringkonstante auf, dann wird kein neuer Wert erzeugt, sondern die Funktion liefert den zuvor registrierten numerischen Wert zurück.

Auf diese Weise könnten Sie Kontakt mit anderen Programmen aufnehmen, die solche Nachrichten im System registrieren. Aber das ist hier nicht das Thema ... :o)