Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Rückgabewert für QueryContextMenu erstellen

  Alt 8. Jul 2008, 14:45
Mir geht es um das Erstellen des Rückgabewertes (HResult) für "QueryContextMenu".

Ich habe ein Programm geschrieben, bei dem ein Explorer-ContextmenuHandler benutzt wird, also eine DLL. In dieser DLL wird "QueryContextMenu" aufgerufen, wenn per Com-Objekt meine MenuItems in das Explorer-Kontextmeü eingefügt werden sollen.

Worum es mir geht ist, den HResult-Rückgabewert korrekt zu erstellen. Derzeit weise ich einfach einen Zahlenwert zu, den ich statisch festlege.
Also zum Beispiel:
Delphi-Quellcode:
// wenn 2 MenuItems erstellt wurden, dann
Result := 2
Dieses Vorgehen habe ich aus einem Tutorial übernommen. Ich bin jedoch nicht wirklich überzeugt, ob es nicht eine bessere Vorgehensweise gibt.

Auszug aus der MSDN:

Return Value

If successful, returns an HRESULT value that has its severity value set to SEVERITY_SUCCESS and its code value set to the offset of the largest command identifier that was assigned, plus one. For example, assume that idCmdFirst is set to 5 and you add three items to the menu with command identifiers of 5, 7, and 8. The return value should be MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1). Otherwise, it returns an OLE error value.

Wie hier die MSDN erklärt, wird auch in einigen Beispielen mithilfe von MAKE_HRESULT der Rückgabewert erstellt.
C++-Beispiel:
Code:
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(IDM_LAST + 1));
Siehe http://support.microsoft.com/kb/179911/de.

Ich verstehe die Zusammenhänge jedoch nicht komplett, wie HRESULT "zusammengebaut" wird und würde mich freuen, wenn mir das jemand "auf gut Deutsch" erklären würde, oder ein Tutorial / eine Erklärung verlinken würde, bei dem auch ich durchblicke.

Guido.
  Mit Zitat antworten Zitat