2 Stimmen

Rechtsseitiges Explorer-Kontextmenü (IID_IContextMenu?)

Eine meiner Anwendungen hat eine dem Windows Explorer ähnliche Dateilistensteuerung. Wenn der Benutzer mit der rechten Maustaste auf eine Datei klickt, kann ich erfolgreich das Explorer-Kontextmenü anzeigen (mit einigen zusätzlichen eigenen Optionen). Wenn der Benutzer jedoch mit der rechten Maustaste auf das Listensteuerelement selbst klickt (ohne ausgewählte Elemente), dann kann ich das "richtige" Kontextmenü nicht anzeigen. Ich möchte das Menü anzeigen, das im Windows Explorer auf der rechten Seite angezeigt wird, und nicht das im Baum auf der linken Seite.

Ich habe versucht, eine Reihe von Variationen in meine Aufrufe zu GetUIObjectOf, ich surfte das Google-Web, etc, aber ich habe nicht eine Lösung noch gefunden. Irgendeine Hilfe?

2voto

Remy Lebeau Punkte 498719

Rufen Sie IShellFolder::CreateViewObject() auf, um das IContextMenu für einen Ordner selbst zu erhalten. IShellFolder::GetUIObjectOf() ist für das Abrufen von Schnittstellen für einzelne Elemente innerhalb eines Ordners gedacht, nicht für einen Ordner selbst. Dies ist in der MSDN-Dokumentation angegeben:

IShellFolder::CreateViewObject-Methode

Diese Methode wird auch verwendet, um Objekte, die eine von mehreren optionalen Schnittstellen, einschließlich IContextMenu oder IExtractIcon. In diesem Kontext ist CreateViewObject ähnlich in der Verwendung mit IShellFolder::GetUIObjectOf. Allerdings rufen Sie IShellFolder::GetUIObjectOf auf, um ein Objekt für eine der einem der in einem Ordner enthaltenen Elemente anzufordern. Aufruf von IShellFolder::CreateViewObject auf ein Objekt für den Ordner selbst anzufordern selbst anzufordern.

0voto

Anders Punkte 89514

Die von Remy Lebeau gepostete Lösung ist wahrscheinlich der richtige Weg, aber wenn Sie nicht alle Shell-Objekte verwenden oder ein individuelleres Menü wünschen, sollten Sie in HKCR nachsehen \Directory\Background für eine Liste von GUIDs, die IContextMenu implementieren, den Rest der Menüpunkte müssen Sie selbst hinzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X