Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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...

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

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?

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]

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.