CMFCShellListCtrl Header Spalten ändern
-
Hallo,
ich möchte das neue CMFCShellListCtrl control einsetzen funktioniert auch so weit.
Nun möchte ich jetzt im Header die Spalten Size+Typ will ich nicht angezeigt haben und Spalten Breite ändern können. Hat jemand Erfahrung? MSDN konnte ich darüber nichts finden
-
Ein CMFCShellListCtrl ist ein normales CListCtrl.
Also kannst Du ganz normal SetColumnWidth verwenden.Du kannst eine Spalte nicht wntfernen, denn die Spaltennummern sind hart codiert.
DDu kannst aber die Splatenweite auf 0 setzen und das Aufziehen der Spalte verhindern.
-
Hallo Martin,
danke für den Tipp hat wunderbar funktioniert.
-
ich bins noch mal hab da noch was
kann ich beim Doppelclick auf PDF Dateien verhindern, dass externe PDF Programm gestartet wird? Ich brauch lediglich ausgewählte Dateinamen.
-
OnDblClk (NM_DBLCLK) Handler selbst schreiben.
Oder CMFCShellListCtrl::DoDefault überschreiben.
Schau Dir den Code in der MFC an, was dort gemacht wird.
-
Nochmals Danke
ich habs so gelöst vielleicht braucht das ja jemand
BOOL OpenDial::PreTranslateMessage(MSG* pMsg) { if( pMsg->message == WM_LBUTTONDBLCLK ) { s = m_ShellList.GetItemText( m_ShellList.GetSelectionMark() ,0 ); if( s.MakeUpper().Find(".PDF")!=-1) { SelectedFile = s ; ( ( CEMS_ClientDlg* )m_pWnd )->SelectedFile = m_OrdnerPfad+"\\"+SelectedFile; CDialog::OnOK(); } else { SelectedFile.Empty(); return 0; } } else return CDialogEx::PreTranslateMessage(pMsg); }
-
Falscher Weg. Damit fängst Du auch einen Doppelklick auf den Header ab.
Warum baust Du keinen Handler ein.
-
Hallo,
ganz einfach, wenn ich das Ereignis (NM_DBLCLK) über VS2010 hinzufüge, wird sie nicht angesprungen. Vielleicht mach ich das ja falsch deswegen der Umweg über Pretranslate und über Abfrage ist das z.Z. selektierte Zeile wirklich eine Datei.
-
Ist denn in der Message-Map auch ein Eintrag drin?
Hast Du auch eine Messagemap definiert?Da in der Basisimplementierung NM_DBLCLK angesprungen wird, kannst Du mir schwer erzählen, dass es nicht geht
-
Ich hab es wieder getestet und es klappt nicht!!!
.h Datei afx_msg void OnNMDblclkMfcshelllist1(NMHDR *pNMHDR, LRESULT *pResult); .cpp Datei BEGIN_MESSAGE_MAP(OpenDial, CDialogEx) ON_NOTIFY(NM_DBLCLK, IDC_MFCSHELLLIST1, &OpenDial::OnNMDblclkMfcshelllist1) END_MESSAGE_MAP() void OpenDial::OnNMDblclkMfcshelllist1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. *pResult = 0; }
-
Du sollstest auch eine eigene Klasse ableiten und dort per ON_NOTIFY_REFLECT NM_DBLCLK behandeln.
Schau Dir bitte einfach mal den Sourcode von CMFCShellListCtrl. Da NM_DBLCLK durch ON_NOTIFY_REFLECT behandelt wird, erreicht es niemals die Messagemap des Dialoges.