VCネタ

今日もランチャー作成。
ワシがこれまで使っていたランチャーはボタンに登録したファイルのアイコンを表示するようにしていた。
なので今回もそれをやることにする。
まず、ファイルからアイコン情報を抜き出す。
これは
SHGetFileInfo
を使う。
SHFILEINFO構造体のポインタをを引数に渡すので、
ここのshfi.hIconにアイコンのハンドルが返ってくるので、
これをメモリコンテキストに描画、StretchBltとかBitBltとかでデバイスコンテキストに描画。


   SHFILEINFO shfi;

   //通常のアイコンの取得
   if( ::SHGetFileInfo( ファイル名, FILE_ATTRIBUTE_ARCHIVE, &shfi,
      sizeof(SHFILEINFO),SHGFI_ICON ) != 0 ){
      HICON hIcon = shfi.hIcon;
      memDC.DrawIcon( 0, 0, hIcon);
   }


この処理をCButtonクラスを継承したクラスを作成し、
DrawItemメソッドで処理するようにする。
このメソッド、CButtonを継承したクラスをCreateする時にBS_OWNERDRAW属性を付けないと
実行されないので要注意。
CButtonを継承したクラスにOnClickedメソッドをつくり、
その中でShellExecuteで実行するようにすれば、ランチャーっぽいのも作成完了。
あとはオプションだのなんだのを作る・・・まだまだ先は長い。