掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
タスクトレイのバルーンチップが表示されない (ID:67364)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> NOTIFYICONDATA_V2_SIZE = 3435973836 えー!? そんなことはないはず。 NOTIFYICONDATA_V2_SIZE は、マクロ UNICODE が定義されているとき 936、定義されていないとき 488 です。 この値は何かというと、マクロ _WIN32_WINNT が 0x0500 以上 0x0501 未満であるときの sizeof( NOTIFYICONDATA ) です。 で、508 ってのは、マクロ _WIN32_WINNT が 0x0600 以上で UNICODE が定義されていないときの sizeof( NOTIFYICONDATA ) です。 …ごめんなさい。 XP の場合は NOTIFYICONDATA_V3_SIZE(0x0501 <= _WIN32_WINNT < 0x0600)が正しい値です。 ご存知かもしれませんが一応書きます。 _WIN32_WINNT は OS のバージョンをあらわします。 0x0500 が Windows 2000 0x0501 が Windows XP 0x0502 が Windows Server 2003 0x0600 が Windows Vista です。 Shell_NotifyIcon は、OS のバージョンが上がるに従って機能が増えていき、それに伴って NOTIFYICONDATA のサイズも大きくなります。 Shell_NotifyIcon は、NOTIFYICONDATA::cbSize の値を見て、どの OS で実装された機能が要求されているのかを判断します。 今回、sizeof( NOTIFYICONDATA ) が 508 だったということは、_WIN32_WINNT が 0x0600 以上だったことになります。 これは、「Windows Vista から実装された機能を使う」と宣言したことになります。 しかし、実際に動かしている OS は XP SP2 ですので、その機能には対応していません。 Windows XP の Shell_NotifyIcon は、NOTIFYICONDATA::cbSize が NOTIFYICONDATA_V3_SIZE 以下でないと正常に動かないというわけです。 で、 > ni.cbSize = NOTIFYICONDATA_V2_SIZE; これは間違いではありませんが、あまり望ましい対応方法ではありません。 各種ヘッダをインクルードする前に、 #define _WIN32_WINNT 0x0501 と書いておくのが、XP での正しいやり方です。 こう書くと、Windows XP 以降でのみ使用可能なアプリになります。 バルーンチップは Windows 2000 でも使えますので、Windows 2000以降で動くアプリを作りたければ、 #define _WIN32_WINNT 0x0500 です。 これは、Windows 2000 までで実装されている機能しか使わないことを意味します。 で、_WIN32_WINNT を適切に定義した上で、 ni.cbSize = sizeof( NOTIFYICONDATA ); とすべきです。 なお、 > #define _WIN32_IE 0x0500 これは、「IE 5.0 の新機能を使う」という意味です。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.