ckw の小さいアイコンをちゃんとタイトルバーやタスクバーに表示させる
以下の環境で動作確認しました。
- Windows XP Home Edition SP3
ckw はコマンド プロンプトを使い易くするソフトで、DOS 窓の画面表示やキー操作などの UI 部分を肩代わりしてくれます。
NYACUS とあわせて便利に使わせてもらってたんですが、ある日アイコンを Resource Hacker で置き換えてみたら、タイトルバーやタスクバーのアイコンが潰れてるのに気付いたので、ちゃんと小さいアイコンが表示されるようにしてみました。
と言っても、ウィンドウクラスを登録するときに渡す WNDCLASSEX 構造体の hIconSm メンバを NULL にしただけですが。
hIconSm メンバが NULL だと、システムは hIcon メンバのアイコンリソースから、小さいアイコンに適切なサイズのアイコンを見繕ってくれます。
左側が修正前、右側が修正後のタイトルバーのアイコン部分のスクリーンショット。下段はアイコンを Terminal Icon | Mac Iconset | Artua.com のものと置き換えた状態。
差分
--- main.cpp Fri Nov 23 20:30:46 2007 +++ main.cpp Thu Apr 01 17:30:02 2010 @@ -754,7 +754,7 @@ wc.hbrBackground = CreateSolidBrush(gColorTable[0]); wc.lpszMenuName = NULL; wc.lpszClassName = className; - wc.hIconSm = wc.hIcon; + wc.hIconSm = NULL; if(! RegisterClassEx(&wc)) return(FALSE);
ckw改造版の修正版とuberboxの修正版と簡易電卓っぽいの。 - hideden.hatenablog.com で配布されてるソース ckw-0.8.10-mod2-src.zip の差分です。
オリジナルの作者様と改造された方々に感謝。
ckw-0.8.10-mod2-src.zip は VC でビルドできるようになっていたので、Microsoft Visual Studio .NET 2003 の NMAKE でもビルドできました。
しかし、アイコンファイルを変更してビルドしようとしたところ
rsrc.rc(5) : error RC2176 : old DIB in rsrc/icon.ico; pass it through SDKPAINT
と怒られて失敗しました。
どうやら古い RC では 256x256 のアイコンが NG のようなので、アイコンファイルを変更せずにコンパイルした rsrc.res のアイコンを、Resource Hacker で置き換えてからビルドしました。
また、Resource Hacker でも 256x256 のアイコンは想定外らしく、
- アクセスが拒否されました。
- システム リソースが足りません.
- ハンドルが無効です。
などのエラーメッセージが出ましたが、アイコンの置き換え自体は成功しました。
以下のようにコマンドラインで実行すると怒られずに済みます。
ResHacker.exe -addoverwrite rsrc.res, rsrc.res, Terminal.ico, ICONGROUP, 101,