Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

mit hilfe des Styles LVS_EX_HEADERDRAGDROP ist es bei einen CListCtrl einfach möglich per Drag und Drop(Linke Maustaste) die Spaltentitel zu verschieben.

Jetzt hab ich aber das Problem, dass ich keine Message finde die vor/während/oder nach der Drag and Drop aktion aufgerufen wird!?!

Wenn man innerhalb des ListCtrls drag and drop ausgeführt wird kann man ja die Messages LVN_BEGINDRAG LVN_ENDDRAG etc. abfangen. Nur die Passende bei den Spaltentitel(m.M. nach HDN_BEGINDRAG und HDN_ENDDRAG) werden einfach nicht aufgerufen!

Muss ich irgendeine andere message abfangen? Bzw. binn ich mit den abfangen der Message in meinen dlg auch an der richtigen stelle, wenn nein, wo dann?

Vielen Dank schon mal im Voraus!

P.S. Benutze VC 6.0 + MFC 6 und ListCtrl ist auf einen Dlg...

Geschrieben

Der Klassenassistent von VC6 generiert bei Headerbenachrichtigungen eines List Control falsche MessageMap-Einträge. Wahrscheinlich steht in der cpp-Datei deines Dialogs in etwa das:

...

ON_NOTIFY(HDN_BEGINDRAG, IDC_LIST1, OnHdnBegindragList1)

ON_NOTIFY(HDN_ENDDRAG, IDC_LIST1, OnHdnEnddragList1)

...

Wenn du IDC_LIST1 (oder was auch immer die Resource-ID deines List Controls ist) durch 0 ersetzt, sollte es funktionieren.

VC7 hat diesen Bug übrigens nicht mehr ;)

Geschrieben

danke, funktioniert!:uli

Noch ne interessensfrage: Was bewirkt die umstellung dieses Parameters auf 0? Wenn ich das richtig verstehe wird dann die notification message nicht nur an das listctrl sondern auch an den dlg geschickt, oder?

Geschrieben
Original geschrieben von DBO

Was bewirkt die umstellung dieses Parameters auf 0? Wenn ich das richtig verstehe wird dann die notification message nicht nur an das listctrl sondern auch an den dlg geschickt, oder?

Richtig. Der zweite Parameter des ON_NOTIFY-Makros gibt die Kind-Id des sendenden Steuerelements an. Hier setzt der Klassenassistent fälschlicherweise die ID des List Control selbst ein. Die Nachricht stammt aber vom Header Control, das wiederum ein Kind des List Control ist. Da das Header Control immer die Kind-ID Null hat, funktioniert die Änderung.

Dieser "Workaround" hat aber den Nachteil, das bei mehreren List Controls alle Headernachrichten in derselben Funktion aufschlagen, weil ja alle Header Controls dieselbe ID haben. Um das wieder aufzulösen, kann man das Handle des Elternfensters des Header Controls ermitteln und mit den Handles der List Controls vergleichen:

void CMeinDlg::OnHdnItemclickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
HWND hListCtrl = ::GetParent( phdr->hdr.hwndFrom );
if( hListCtrl == m_list1.GetSafeHwnd() ) {
// List Control 1
}
else if( hListCtrl == m_list2.GetSafeHwnd() ) {
// List Control 2
}

// ...

*pResult = 0;
}[/CODE]

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...