Blog gunsmoker (traduceri) cum să gestionați icontextmenu, partea 1 - cuvânt introductiv

Cum se administrează IContextMenu, Partea 1 - Cuvânt introductiv

IContextMenu este folosit după cum urmează:
  • Creare.
  • IContextMenu.QueryContextMenu. Aceasta inițializează meniul contextual. În timpul acestei convorbiri, meniul contextual decide care elemente să fie afișate pe baza steagurilor pe care le-ați trimis.
  • Afișați meniul sau selectați comanda acestuia într-un mod diferit, utilizând IContextMenu.GetCommandString. IContextMenu2.HandleMenuMsg și IContextMenu3.HandleMenuMsg 2 pentru emularea interacțiunii utilizatorilor.
  • IContextMenu.InvokeCommand. Acest apel execută comanda.






Detaliile acestor acțiuni sunt explicate în modulul Crearea contextualizării din perspectiva implementatorului IContextMenu.






Coaja primește primul apel IContextMenu.QueryContextMenu. Acesta trece descriptorul HMENU, pe care metoda îl poate utiliza pentru a adăuga elemente în meniul contextual. Dacă utilizatorul selectează una dintre comenzi, IContextMenu.GetCommandString este apelat pentru a obține șirul prompt care va fi afișat în bara de stare Microsoft Explorer. Dacă utilizatorul face clic pe unul dintre elementele de meniu, shell-ul solicită IContextMenu.InvokeCommand. Apoi, manipulatorul poate executa acțiunile comenzii. Citiți acest lucru din partea cealaltă și veți vedea ce trebuie să faceți pentru a utiliza IContextMenu:
Controlul IContextMenu primește primul apel IContextMenu.QueryContextMenu. Acesta trece descriptorul HMENU, pe care metoda îl poate utiliza pentru a adăuga elemente în meniul contextual. Dacă utilizatorul selectează una dintre comenzi, IContextMenu.GetCommandString este apelat pentru a obține șirul prompt, care va fi afișat în bara de stare a apelantului. Dacă utilizatorul dă clic pe unul dintre elementele meniului, managerul IContextMenu apelează IContextMenu.InvokeCommand. Apoi, manipulatorul poate executa acțiunile comenzii. Studiul implicațiilor acestei noi interpretări a documentației din meniul contextual se va concentra pe următoarele câteva săptămâni.

Bine, să începem. Să începem, ca întotdeauna, cu o aplicație VCL goală. Voi presupune că deja cunoașteți spațiul de nume al shell-ului și pidl, așa că mă voi concentra asupra problemei meniului contextual.


Această funcție simplă ia calea și primește obiectul shell-ului UI pentru aceasta. Convertim calea către PIDL folosind SHParseDisplayName. apoi legați (legați) de părinte PIDL folosind SHBindToParent. apoi interogăm părintele pentru obiectul UI folosind IShellFolder.GetUIObjectOf. Presupun că aveți suficientă experiență cu spațiul de nume, astfel încât acest cod să nu provoace probleme.

(Auxiliară de tip funcție SHParseDisplayName SHBindToParent și nu fac nimic ce nu ai putea face pentru ei înșiși. Ei pur și simplu salvați timp pentru codul de imprimare. Când începe să utilizați spațiul de nume shell în mod constant, să colecteze propria bibliotecă de funcții auxiliare mici, cum ar fi acestea).

Pentru prima dată, tot ceea ce facem - (? De ce dreapta, deoarece în versiunea următoare, vom afișa un meniu contextual) suna doar acțiunea (verb) „Play“ de pe fișier atunci când utilizatorul face clic pe butonul din dreapta.


După cum se indică în lista de mai sus, vom crea mai întâi IContextMenu, apoi inițializați-l prin apelarea IContextMenu.QueryContextMenu. Rețineți că, chiar dacă noi nu vom afișa meniul contextual, avem încă nevoie pentru a crea un meniu pop-up, pentru că acest lucru necesită IContextMenu.QueryContextMenu. Cu toate acestea, în general, nu vom afișa meniul rezultat; în loc de a cere utilizatorului să facă o alegere din meniu, facem acest lucru pentru utilizator prin selectarea acțiunii „Play“, de umplere post TCMInvokeCommandInfo și determinând-o.

Dar cum știm că acțiunea (verb) va fi "Redare"? În cazul nostru, știm acest lucru pentru că ne-am cusut ferm în calea de cod pentru fișierul „clock.avi“ și știm că fișierele AVI au un „joc“ de acțiune. Dar, desigur, nu va funcționa în cazul general (aprox. Lane. Dacă executați exemplu, asigurați-vă că aveți fișierul, sau tipul oricărui alt nume, și să vedem ce acțiuni au pentru acel tip de fișier. În plus, Chiar și pentru fișierele AVI, acțiunile pot fi realocate dacă un jucător a schimbat asociațiile). Înainte de a apela acțiunea implicită (default verb), să ne facă mai întâi Schag mai ușor și cere utilizatorului să selecteze o acțiune pentru a apela. De fapt, acest exercițiu va distrage atenția de la calea noastră, dar în final vom reveni la alegerea acțiunii implicite.

În cazul în care codul de mai sus - asta e tot ce ai nevoie (suna un efect fix pentru fișier), atunci nu trebuie să treacă prin pașii rămași pentru meniul de comenzi rapide. Codul de mai sus este echivalent cu apelarea funcției ShellExecuteEx. trecându-l pavilion SEE_MASK_INVOKEIDLIST pentru a indica faptul că doriți să apelați (invocați) a trecut prin IContextMenu.







Trimiteți-le prietenilor: