Mehere Listen in einem Dialog bei Headerclick sortieren

ToDu

Mitglied
Hi,

ich habe momentan einen Dialog mit 3 CListCtrl Feldern. Ich möchte nun erreichen das wenn ein User auf den Headerclicked nach diesem die Liste sortiert wird. Leider schaffe ich es nur, dass eine Liste sortiert wird egal von welcher Liste ich den Header anklicke. Es wird wohl daran liegen, dass ich das Ereignis mit HDN_ITEMCLICK abfange aber anders habe ich es bisher nicht hinbekommen. Nun stellen sich mir 2 Fragen:

1. Gibt es eine Möglichkeit nach dem Ereigniss herauszufinden von welcher Liste der Header geklicked wurde?
2. Sollte ich einen anderen Handler als HDN_ITEMCLICK benutzen?


Mfg
ToDU
 
In der NMHEADER struct in LPARAM gibt es ein NMHDR struct. (Bei ALLEN Notify-Messages in WM_NOTIFY ist dieses vorhanden).

Innerhalb des NMHDR structs gibt es ein HWND hwndFrom sowie ein UINT idFrom. Daran kannst du die auslösende ListControl erkennen.

HDN_ITEMCLICK ist genau richtig.
 
Moin,

danke für den Tipp ich werde das gleich mal testen.

Edit: So getestet. Von idFrom bekomme ich immer eine 0 und bei hwndFrom weiß ich nicht wirklich wie ich es mit der IDC_LIST1 vergleichen soll :). Wenn du mir da nochmal auf die Sprünge helfen könntest wäre ich dir echt dankbar.

MFG
ToDu
 
Zuletzt bearbeitet:
Also:

Ich hab mal wieder nicht genau nachgedacht. Ich vermute stark, dass das HWND in hwndFrom das HWND vom HeaderControl ist, nicht von der Liste. Da die HeaderControl aber direkt innerhalb der ListControl steckt, müsstest du mit GetParent( hdr.hwndFrom) das HWND der Liste rausbekommen.

Die HWNDs der drei ListControls müsstest du ja eigentlich kennen. Du hast die Listen ja erstellt bzw. sprichst die ja auch für das Sortieren an. Wenn du MFC hast, häng am besten ein CListControl an jede der drei Controls (wenn nicht sowieso schon so getan).
 
So:

Ich arbeite mit Visual Studio 2005 und unter WinXP. ich Poste mal bissl Code dann kann ich einfacher erklären wo mein Problem ist.
Code:
OnHeaderClicked(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
	
        HWND pTemp = ::GetParent(phdn->hdr.hwndFrom);

	if(pTemp == m_pPS_Lager.m_hWnd)  
		......
	
	// Ab hier is alles klar soweit.
        if( phdn->iButton == 0 )
        {
                // User clicked on header using left mouse button
                if( phdn->iItem == nSortedCol )
                        bSortAscending = !bSortAscending;
                else
                        bSortAscending = TRUE;

                nSortedCol = phdn->iItem;
				if(nSortedCol <= 3)
					SortTextItems_LS( nSortedCol, bSortAscending,0,-1 );
				else
					SortNumericItems_LS( nSortedCol, bSortAscending,0,-1 );

        }
        *pResult = 0;
}
Ich denke wenn ich den hwnd der Listen ermitteln könnte so sollte ein Vergleichen möglich sein.

MFG ToDu

EDIT: DANKE GetParent hat super funktioniert.
 
Zuletzt bearbeitet:
Zurück