ПредишенСледващото

Как да се справим IContextMenu, част 1 - Изказване

IContextMenu използва, както следва:
  • Създаване.
  • IContextMenu.QueryContextMenu. Той инициализира контекстното меню. По време на този разговор, контекстното меню, за да се реши какви елементи трябва да се покаже, въз основа на вашите минали знамена.
  • Покажи меню или изберете от екипа по някакъв друг начин, използвайки IContextMenu.GetCommandString. IContextMenu2.HandleMenuMsg IContextMenu3.HandleMenuMsg и 2 за емулиране на потребителя.
  • IContextMenu.InvokeCommand. Този призив изпълнява командата.
Подробности за тези действия са обяснени в Създаване на манипулатори на контекстното меню от гледна точка на изпълнител (implementor) IContextMenu.
Черупката първи призовава IContextMenu.QueryContextMenu. Тя преминава дръжка HMENU, кой метод може да се използва, за да добавяте елементи към контекстното меню. Ако потребителят избира една от командите IContextMenu.GetCommandString призовани да извлечете низ помощ, в която ще се появи в лентата на състоянието на Microsoft Windows Explorer. Когато потребителят кликне върху една от опциите в менюто, черупката е IContextMenu.InvokeCommand. След това, процесорът може да се изпълни съответната команда. Прочетете го от другата страна и ще видите какво трябва да направя, за да направи най-употреба (домакин) IContextMenu:
Управление IContextMenu първи призовава IContextMenu.QueryContextMenu. Той преминава дръжка HMENU, кой метод може да се използва, за да добавяте елементи към контекстното меню. Ако потребителят избира една от командите се нарича IContextMenu.GetCommandString за линейни карти, които ще бъдат показани в реда на състоянието на разговори. Когато потребителят кликне върху една от опциите в менюто, управление IContextMenu причинява IContextMenu.InvokeCommand. След това, процесорът може да се изпълни съответната команда. Проучване на въздействието на тази нова интерпретация на документацията на контекстното меню ще бъде нашата цел за следващите няколко седмици.

Добре, нека да започнем. Започваме, както винаги, с празен VCL-приложение. Ще приемем, че вече сте запознати с пространство от имена черупка (черупка пространство от имена) и pidl, така че аз ще се фокусира върху проблема с контекстното меню.


Тази проста функция е на пътя и получава UI-обект черупка (черупка) за него. Ние конвертирате пътя в PIDL използване SHParseDisplayName. след това се придържат (свързване) на PIDL родител чрез SHBindToParent. и след това да поиска родител UI-обект с помощта IShellFolder.GetUIObjectOf. Аз съм се предположи, че имате достатъчно опит с пространство от имена, че този код не причинява проблеми.

(Спомагателна тип функция SHParseDisplayName SHBindToParent и не правете нищо, което не сте могли да направите за себе си. Те просто ви спести време, за да се кодират печат. Когато започнете да използвате пространството за имената черупка постоянно, можете да събира своя собствена библиотека от малки спомагателни функции, като например тези).

За първи път нашето време, всичко, което правим - (? Защо правилно, защото в следващата версия, ние ще покаже контекстно меню) просто се обадете на проекта (глагол) "Play" на файла, когато потребителят кликне с десния бутон.


Както е посочено в списъка по-горе, за първи път се създаде IContextMenu, а след това се инициализира като се обадите IContextMenu.QueryContextMenu. Имайте предвид, че въпреки че ние няма да се показва в контекстното меню, ние все още трябва да се създаде изскачащи прозорци меню, защото това изисква IContextMenu.QueryContextMenu. Въпреки това, ние по принцип няма да се появи в резултат на менюто; вместо иска от потребителя да направи избор от менюто, ние го правим за потребителя, като изберете действието "Play", заемане на длъжността TCMInvokeCommandInfo и го причинява.

Но как да знаем, че за действие (глагол), че ще "Play"? В нашия случай, ние знаем това, защото ние твърдо зашити в код пътя към "clock.avi" файла и ние знаем, че AVI файлове имат действие "Play". Но, разбира се, той няма да работи в най-общия случай (прибл. Лейн. Ако изпълните примера, уверете се, че имате файл, или вида на всяко друго име, и да видим какви действия имат за този тип файл. В допълнение, дори и действията могат да бъдат преназначени AVI файлове от когато някои играчи се променили асоциацията). Преди да се обадите действието по подразбиране (по подразбиране глагол), нека първо да schag по-лесно и да поиска от потребителя да избере действие, да се обадите. В действителност, това упражнение ще отвлече вниманието от пътя ни, но в крайна сметка ще се върнем към избора на действието по подразбиране.

Ако кодът по-горе - това е всичко, което е необходимо (наричаме определен ефект на файла), а след това не е нужно да мине през останалите стъпки за контекстното меню. Кодът по-горе е еквивалентно на повикване функция ShellExecuteEx. минаваща го SEE_MASK_INVOKEIDLIST флаг, за да покаже, че искате да се обадите (позове) премина през IContextMenu.

Подкрепете проекта - споделете линка, благодаря!