• 締切済み

NOTIFYICONDATAについて

MFCでタスクトレーに常駐するプログラムを作成しております。 そこで、NOTIFYICONDATA構造体に関して教えていただきたいことがあります。 NOTIFYICONDATA構造体のuFlagsに指定する値で、 Shell32.dllのversion5.0以降のときに、NIF_INFO とNIF_STATEというのがあるみたいなのですが、これらを記述すると、定義されていませんというエラーが出てコンパイルできません。 version5.0はME/2000以降と書いてあったんですが、開発に使っているマシンはXPのPROです。 どういうことなのでしょうか?NOTIFYICONDATAのuFlagにNIF_INFOを使用するにはどうすればいいのでしょうか? よろしくお願いします。

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.7

>エラーメッセージは追加した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)
回答No.6

>エラーメッセージですが、 >「warning C4005: 'WINVER' : マクロが再定義されました。」 どこで出てます? 追加したWINVERに対して出てますか? どこか他の場所ですか? MFCということなので、stdafx.hを使っているのでしたら、そのなかでWINVERを定義してください。

hiko758
質問者

補足

何度もありがとうございます。 エラーメッセージは追加したWINVERのところででてます。

  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.5
参考URL:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/notifyicond
hiko758
質問者

補足

ありがとうございます。 いろいろ調べていて、#define _WIN32_IE 0x0500というのを見つけて一度試したことはありますが、同じでした・・・。

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.4

#define WINVER 0x0500 は #include <shellapi.h> より前に書いてますか? あとエラーメッセージは全文を書いたほうがいいと思います。

hiko758
質問者

補足

ありがとうございます。 ちゃんと#define WINVER 0x0500は#include <shellapi.h>より前に書きました。 でも駄目みたいです。 エラーメッセージですが、 「warning C4005: 'WINVER' : マクロが再定義されました。」 というのと、 「error C2065: 'NIF_INFO' : 定義されていない識別子です。」 が出ています。 なにか根本的になにか間違っているのでしょうか・・・(ToT) よろしくお願いします。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

手元に現物がないので説明だけ。 ヘッダファイルのNIF_INFOの定義を見てみましょう。 対応しているヘッダファイルを使用しているのなら、#ifとかでコンパイル条件がついているはずです。 WINVERを0x0500でソースの一番上でdefineしてあげれば NIF_INFO等を使用可能になりますよ。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vcgrfmodifyingwinver.asp
hiko758
質問者

補足

ありがとうございます。 ヘッダファイル見てみました。 確かに#ifでvar5以上のときとかちゃんと定義されてました。 で、WINVERを指定してやってみたんですが、エラーが出たままです。。。 もうなにがなんだかわからなくなってきました。 どうすれば・・・(ToT)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

#include <shellapi.h> では? 手元の環境ですとOKでした。 多分、No.1さん指摘のPlatformSDKがインストールされた環境です。

hiko758
質問者

補足

ありがとうございます。 インクルードして試してみましたが、駄目でした。 同じようなエラーが出てコンパイルできません。 どうしたものでしょうか?

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

もし使用しているのがVC++6.0なら、2000以降追加された機能はそのままでは使用できません。 最新のPlatformSDKをインストールする必要があります。

参考URL:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
hiko758
質問者

補足

ありがとうございます。 インストールしてみましたが、同じエラーが出てコンパイルできません。 他に何か考えられることはありませんでしょうか。 ちなみに開発環境はVC++6.0です。質問の際に抜けておりました。申し訳ありません。