anonymous苦労者

2010-04-01

ckw の小さいアイコンをちゃんとタイトルバーやタスクバーに表示させる

以下の環境で動作確認しました。

ckw はコマンド プロンプトを使い易くするソフトで、DOS 窓の画面表示やキー操作などの UI 部分を肩代わりしてくれます。

NYACUS とあわせて便利に使わせてもらってたんですが、ある日アイコンResource Hacker で置き換えてみたら、タイトルバーやタスクバーのアイコンが潰れてるのに気付いたので、ちゃんと小さいアイコンが表示されるようにしてみました。

と言っても、ウィンドウクラスを登録するときに渡す WNDCLASSEX 構造体の hIconSm メンバを NULL にしただけですが。

hIconSm メンバが NULL だと、システムは hIcon メンバのアイコンリソースから、小さいアイコンに適切なサイズのアイコンを見繕ってくれます。

f:id:pipehead:20100401173002p:image

左側が修正前、右側が修正後のタイトルバーのアイコン部分のスクリーンショット。下段はアイコン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の修正版と簡易電卓っぽいの。 - Perlとかmemoとか日記とか。 で配布されてるソース ckw-0.8.10-mod2-src.zip の差分です。

オリジナルの作者様と改造された方々に感謝。

ckw-0.8.10-mod2-src.zipVCビルドできるようになっていたので、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,

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元