Práticas recomendadas para manipuladores de menu de atalho e vários verbos
Este tópico é organizado da seguinte maneira:
Práticas Recomendadas
Os verbos estáticos são os verbos mais simples de implementar e fornecem funcionalidade avançada. Recomendamos fortemente que você implemente um verbo usando um dos métodos de verbo estático.
Práticas recomendadas para implementações de verbos
A lista a seguir representa as práticas recomendadas para implementações de verbos:
- Sempre escolha o método de verbo mais simples que atenda às suas necessidades.
- Use um método de verbo estático, se possível.
- Não execute operações com uso intensivo de recursos ou E/S no thread da interface do usuário. IShellExtInit::Initialize e IContextMenu::QueryContextMenu precisam ser muito conservadores no trabalho que executam. IContextMenu::InvokeCommand deve ser executado em outro processo ou você deve criar um novo thread para evitar o bloqueio do chamador.
- Prefixe verbos com o nome do ISV (fornecedor independente de software) da seguinte maneira,
ISVName.verb
. O uso de nomes não qualificados pode resultar em colisões com vários ISVs que escolheram o mesmo nome de verbo. - Sempre use um ProgID específico do aplicativo. Como alguns tipos de item não usam esse mapeamento, há uma necessidade de nomes exclusivos do fornecedor.
- Posicione a interface do usuário em relação ao método de invocação, mas não execute em um thread de invocador.
- Não aceite o valor retornado S_OK para verbos canônicos passados para o método IContextMenu::InvokeCommand . Isso causa uma falha na implementação do verbo real a ser invocada e retorna um código de falha para verbos canônicos. Se você não der suporte a verbos canônicos, retorne a falha quando um valor HIWORD(lpVerb) diferente de zero for encontrado.
- Evite o uso de rundll32.exe como hospedeiro do seu verbo.
- Ao implementar IContextMenu::QueryContextMenu , certifique-se de retornar o número de verbos que foram adicionados ao menu por meio do valor HRESULT usando a macro ResultFromShort.
- Se você se registrar em uma das seguintes entradas de chave do Registro, tenha cuidado e certifique-se de registrar seu manipulador no tipo mais específico para reduzir as consequências possivelmente não intencionais:
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\AllFileSystemObjects
- HKEY_CLASSES_ROOT\Pasta
- HKEY_CLASSES_ROOT\Diretório
- Defina a tecla MayChangeDefaultMenu somente se você antecipar que talvez seja necessário alterar o verbo padrão no menu de atalho. Se o manipulador não alterar o verbo padrão, você não deverá definir essa chave, pois isso faz com que o sistema carregue sua DLL desnecessariamente.
- Minimize o trabalho que você executa em IShellExtInit::Initialize. Para manipuladores de menu de atalho, capture o objeto de dados passado para IShellExtInit::Initialize e processe-o em IContextMenu::QueryContextMenu ou IContextMenu::InvokeCommand.
Práticas recomendadas para verbos de seleção múltipla
Como o número de itens em um cenário de verbo de seleção múltipla pode ser grande, é importante que você considere as implicações de desempenho de suas implementações de verbos. Por exemplo, quando um usuário pesquisa por "*" em um escopo que inclui um grande número de itens e, em seguida, clica em Selecionar Tudo e clica com o botão direito do mouse, o verbo é apresentado com uma seleção que pode conter milhares de itens. Como resultado, os verbos devem considerar apenas o primeiro item na seleção e a contagem geral de itens. O primeiro item é definido como o item na parte superior da exibição ou o item em que o usuário clicou com o botão direito do mouse pela primeira vez.
No Windows 7 e posterior, o número de itens passados para um verbo é limitado a 16 quando um menu de atalho é consultado. O verbo é então recriado e reinicializado com a seleção completa quando esse verbo é invocado.
É apropriado, em alguns casos, considerar um pequeno número de itens fixos. Por exemplo, é apropriado que um verbo "diff" considere apenas os dois primeiros itens. Geralmente, você não precisa testar todos os itens na seleção para ver se é um determinado tipo ou consultar cada item na seleção para suas propriedades. Em vez disso, olhe para o primeiro item e decida se é apropriado adicionar seu verbo.
Seleções heterogêneas
Os verbos otimistas são adicionados automaticamente no caso de seleção múltipla, supondo que itens não inspecionados possam ser tratados pelo verbo. Por outro lado, os verbos pessimistas não são adicionados quando a seleção contém itens não inspecionados e são adicionados apenas nos casos em que o número de itens é pequeno.
Os verbos de estilo do jogador devem ser otimistas e ignorar silenciosamente os itens que não são tratados. Se uma falha ao agir sobre os itens pode causar perda de dados ou confusão, o verbo deve avisar os usuários sobre itens que não podem ser processados. Por exemplo, um verbo "backup" deve indicar que não foi possível fazer backup de alguns itens.
Tópicos relacionados
-
Escolher um Verbo Estático ou Dinâmico para o Menu de Atalho
-
Menus de Atalho (Contexto) e Manipuladores de Menu de Atalho