ある問題を軽減するようなアプリケーションを作ろうと思い、
リソースエディタをいじってたら、ツリービューを使ったメニューを実装するところで、
どうしても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にするだけだし、そこまで大きな問題にはならないと、思う。