DBO Geschrieben 1. August 2003 Geschrieben 1. August 2003 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... Zitieren
Klotzkopp Geschrieben 1. August 2003 Geschrieben 1. August 2003 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 Zitieren
DBO Geschrieben 4. August 2003 Autor Geschrieben 4. August 2003 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? Zitieren
Klotzkopp Geschrieben 4. August 2003 Geschrieben 4. August 2003 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] Zitieren
Empfohlene Beiträge
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.