- 締切済み
NOTIFYICONDATAについて
MFCでタスクトレーに常駐するプログラムを作成しております。 そこで、NOTIFYICONDATA構造体に関して教えていただきたいことがあります。 NOTIFYICONDATA構造体のuFlagsに指定する値で、 Shell32.dllのversion5.0以降のときに、NIF_INFO とNIF_STATEというのがあるみたいなのですが、これらを記述すると、定義されていませんというエラーが出てコンパイルできません。 version5.0はME/2000以降と書いてあったんですが、開発に使っているマシンはXPのPROです。 どういうことなのでしょうか?NOTIFYICONDATAのuFlagにNIF_INFOを使用するにはどうすればいいのでしょうか? よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>エラーメッセージは追加したWINVERのところででてます。 #include "stdafx.h" と #define WINVER 0x0500 どっちが上ですか? また、ソースの一番上でWINVERを定義するのではなく、stdafx.hの一番上で定義しても同じですか? あと、VS.NET 2003のMFCで作成されたstdafx.hを確認したところでは明示的にWINVER 0x0400が指定してありました。 すでにstdafx.h中に指定されていたら、自分で定義を追加せずにその値を0x0500に修正してください。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>エラーメッセージですが、 >「warning C4005: 'WINVER' : マクロが再定義されました。」 どこで出てます? 追加したWINVERに対して出てますか? どこか他の場所ですか? MFCということなので、stdafx.hを使っているのでしたら、そのなかでWINVERを定義してください。
- hofuhofu
- ベストアンサー率70% (336/476)
#define _WIN32_IE 0x0500 などとしても駄目ですか? http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/notifyicondata.asp http://yokohama.cool.ne.jp/chokuto/urawaza/struct/NOTIFYICONDATA.html
補足
ありがとうございます。 いろいろ調べていて、#define _WIN32_IE 0x0500というのを見つけて一度試したことはありますが、同じでした・・・。
- kmb01
- ベストアンサー率45% (63/138)
#define WINVER 0x0500 は #include <shellapi.h> より前に書いてますか? あとエラーメッセージは全文を書いたほうがいいと思います。
補足
ありがとうございます。 ちゃんと#define WINVER 0x0500は#include <shellapi.h>より前に書きました。 でも駄目みたいです。 エラーメッセージですが、 「warning C4005: 'WINVER' : マクロが再定義されました。」 というのと、 「error C2065: 'NIF_INFO' : 定義されていない識別子です。」 が出ています。 なにか根本的になにか間違っているのでしょうか・・・(ToT) よろしくお願いします。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
手元に現物がないので説明だけ。 ヘッダファイルのNIF_INFOの定義を見てみましょう。 対応しているヘッダファイルを使用しているのなら、#ifとかでコンパイル条件がついているはずです。 WINVERを0x0500でソースの一番上でdefineしてあげれば NIF_INFO等を使用可能になりますよ。
補足
ありがとうございます。 ヘッダファイル見てみました。 確かに#ifでvar5以上のときとかちゃんと定義されてました。 で、WINVERを指定してやってみたんですが、エラーが出たままです。。。 もうなにがなんだかわからなくなってきました。 どうすれば・・・(ToT)
- neKo_deux
- ベストアンサー率44% (5541/12319)
#include <shellapi.h> では? 手元の環境ですとOKでした。 多分、No.1さん指摘のPlatformSDKがインストールされた環境です。
補足
ありがとうございます。 インクルードして試してみましたが、駄目でした。 同じようなエラーが出てコンパイルできません。 どうしたものでしょうか?
- kmb01
- ベストアンサー率45% (63/138)
もし使用しているのがVC++6.0なら、2000以降追加された機能はそのままでは使用できません。 最新のPlatformSDKをインストールする必要があります。
補足
ありがとうございます。 インストールしてみましたが、同じエラーが出てコンパイルできません。 他に何か考えられることはありませんでしょうか。 ちなみに開発環境はVC++6.0です。質問の際に抜けておりました。申し訳ありません。
補足
何度もありがとうございます。 エラーメッセージは追加したWINVERのところででてます。