• 締切済み

[WIN32] ListView / LPNMLVDISPINFO

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/listview_using.asp を参考に、リストビューを作ろうと思ってます。 が、WM_NOTIFY のなかの LPNMLVDISPINFO が「定義されていない識別子です」とエラーになります。 原因は何でしょうか? VC6

みんなの回答

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

>LPNMLVDISPINFO や NMLVDISPINFO という定義が見つからないです。 >LPNMLVDISPINFOA LPNMLVDISPINFOW などはありましたが。 失礼しました。確かにVC++6のヘッダにはAとかWがついたのしかいませんでしたね。 最新のSDKをダウンロードすれば、NMLVDISPINFOはあります。ただ、定義自体は #ifdef UNICODE #define NMLVDISPINFO NMLVDISPINFOW #else #define NMLVDISPINFO NMLVDISPINFOA #endif なので、自分で作成したヘッダファイルにそのまま追加すればいいかと。最新のSDKを入れた後でもソース無修正で対応させるなら#ifndefでさらにくくるのがおすすめです。 ちなみにLPNMLVDISPINFOは、最新のSDKにもありませんでした。ということで、サンプルの記述ミスですね。 もちろん、NMLVDISPINFOと同様にLPNMLVDISPINFOも自分で定義してあげれば使いやすいと思いますよ。

noname#12862
質問者

お礼

有難うございました

noname#12862
質問者

補足

NMLVDISPINFO がcommctrl.h にないというのは間違いでした。 #ifdef UNICODE #define NMLVDISPINFO NMLVDISPINFOW #else #define NMLVDISPINFO NMLVDISPINFOA #endif という部分は、VC6 にも確認できました。 結局、 #define LPNMLVDISPINFO NMLVDISPINFO* とすることで解決しました。

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

MFC使ってますか? stdafx.hの #define WIN32_LEAN_AND_MEAN をコメントアウトしてみてください。 それでもだめorMFC未使用なら commctr.hで定義が #if (_WIN32_IE >= 0x0300) となっているので、 すべてのソースの#includeの前またはstdafx.hの中の#includeの前に #define _WIN32_IE 0x0300 を追加してください。

noname#12862
質問者

補足

回答、ありがとうございます。 早速、以下のようにやってみましたが結果は変わりませんでした。 // Win32SDK - ListView #include <windows.h> #define _WIN32_IE 0x0300 #include <commctrl.h> ヘルプには commctrl.h で定義されているようなことがかかれてますが、 LPNMLVDISPINFO や NMLVDISPINFO という定義が見つからないです。 LPNMLVDISPINFOA LPNMLVDISPINFOW などはありましたが。 考えられる原因はほかにありますか?

関連するQ&A