ResEditで遊んでたら。

ある問題を軽減するようなアプリケーションを作ろうと思い、
リソースエディタをいじってたら、ツリービューを使ったメニューを実装するところで、
どうしてもTVS_INFOTIPが定義されていないといわれてしまい、ちょっと悩んだ。




手元のmingw環境では、"TVS_INFOTIP"は"commctrl.h"で定義されているのだが、
必ずしもこれが定義されるわけではないことがわかった。

#if (_WIN32_IE >= 0x0400)
#define TVS_FULLROWSELECT 4096
#define TVS_INFOTIP 2048
#define TVS_NONEVENHEIGHT 16384
#define TVS_NOSCROLL 8192
#define TVS_SINGLEEXPAND 1024
#endif

_WIN32_IEという定義値が0x0400以上の値でないと、定義されない。
デフォルトではなんと未定義になっている。


そもそも_WIN32_IEに入るのは、InternetExplorer(IE)のバージョンで、
IEが依存しているDLLを決めるための値らしい。ふーん。
ツリービューは古いバージョンではサポートしてないということなのか。


といっても、IE4.0以上の環境でツリービューをサポートしているのだから、
プログラム毎にいちいち_WIN32_IEを定義してコンパイルするのはめんどくさいし、
今時、WindowsXP,Vista,7が使われまくっているのだし、IE5.5以上はもう当たり前みたいな感じだよね。5.0以上対応ということで決めうちしよう。
ということで、ヘッダファイル自体を書き換えてしまえ!

commctrl.h
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
/*
#if 0
#define _WIN32_IE	0x0300
#endif
*/
#define _WIN32_IE	0x0500
#endif


デバッグかなんかしらないけど、#if 0 〜 #endif間って考慮されないじゃん・・・
まぁ#ifndefで未定儀のときだけ0x0500にするだけだし、そこまで大きな問題にはならないと、思う。