ホーム » MFC » Shell Extension InfoTip の追加

2012年3月
 123
45678910
11121314151617
18192021222324
25262728293031

カテゴリー

アーカイブ

ブログ統計情報

  • 79,219 アクセス



Shell Extension InfoTip の追加

Shell Extension の作成 InfoTip

1.プロジェクトの作成
 MFC App Wizard(dll)
  「スタティックライブラリを使用した DLL」を選択
  「オートメーション」のサポート
2.クラスファクトリの作成
 Class Wizard で,クラスの新規作成
  基本クラスは CCmdTarget
  「タイプ ID で作成」
3.ヘッダ部に INTERFACE_PART の追加
 BEGIN_INTERFACE_PART(QueryInfoT,IQueryInfo)
  STDMETHOD (GetInfoFlags) (DWORD* pdwFlags) ;
  STDMETHOD (GetInfoTip ) (DWORD dwFlags,LPWSTR* ppwszTip) ;
 END_INTERFACE_PART (QueryInfoT)
 …
 BEGIN_INTERFACE_PART(PersistFile,IPersistFile)
 …
4.必要な変数を追加
 InfoTip の場合,FileName など
5.ソースに INTERFACE_MAP の追加
 BEGIN_INTERFACE_MAP(CI_ShellExt,CCmdTarget)
  INTERFACE_PART (CI_ShellExt,IID_IQueryInfo,QueryInfoT)
  INTERFACE_PART (CI_ShellExt,IID_IPersistFile,PersistFile)
 END_INTERFACE_MAP ()
6.CI_ShellExt::XQueryInfoT::~ の実装
 幾つかはある程度決まったコードになる.
CI_ShellExt::XQueryInfoT::GetInfoTipは,ppwszTipに表示する文字列を返す.


METHOD_PROLOGUE pThisでCCmdTargetの派生クラスにアクセス可能になる.


レジストリへの登録
[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}]
@=”I.ShellExt”

[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}\InProcServer32]
@=”C:\\Documents and Settings\\All Users\\Documents\\VC_TEST\\IShlExt\\Release\\I_Shl_E.dll”
“ThreadingModel”=”Apartment”

[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}\ProgID]
@=”I.ShellExt”

拡張子の登録例
[HKEY_CURRENT_USER\Software\Classes\.Test_ShellExt\ShellEx\{00021500-0000-0000-C000-000000000046}]
@=”{56D044C5-9F47-4CD3-B130-9E52BE7460F3}”


{56D044C5-9F47-4CD3-B130-9E52BE7460F3} の部分は,ソースの IMPLEMENT_OLECREATE の前の行のコメントより


今回使用したコードは,IShlExt.zip


参考にしたのは,
Debugging with the Shell

MSDN Magazine 2000/04 新しいinfotip,アイコンオーバーレイ,シェルエクステンション
Windows 2000 UI Innovations: Enhance Your User’s Experience with New Infotip and Icon Overlay Shell Extensions

MSDN Magazine 2000/07 ハイパーテキストテンプレートファイルのカスタマイズによるエクスプローラの表示の拡張

Windows 95 ユーザーインターフェイス プログラミング


ExtractImage を実装してエラーになった場合
I_ShlExt.obj:error LNK2001:外部シンボル “_IID_IExtractImage” は未解決です
#include <initguid.h> を I_ShlExt.cpp の StdAfx.h の次に追加.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。