ついに判明、XP と 2000 のコモンコントロールの動作の違い
JavaScript Memory Leak Detector (v2)がWindows 2000で動かないという話を聞いて、色々試してみた結果、XP と 2000で 決定的に違う関数の動作を発見しました
実行したのは次のコード
InitCommonControls(); f=GetClassInfoExA(hInstance,"SysHeader32",&cl); : n=GetClassInfoExA(hInstance,"SysLink",&cl); |
XPでは、すべてのコントロールが使えるのが分かります.
一方、Windows 2000では、Comctl32.dll 4.7以降のクラスが使えない?!
INITCOMMONCONTROLSEX iccx; iccx.dwSize = sizeof(iccx); iccx.dwICC = ICC_STANDARD_CLASSES; InitCommonControlsEx(&iccx); |
ちなみに、これは全てのコントロール使えるようにする命令なのですが、InitCommonControls() と同じ動作になります
Windows 2000で同じ動作にするためには
INITCOMMONCONTROLSEX iccx; iccx.dwSize = sizeof(iccx); iccx.dwICC =ICC_NATIVEFNTCTL_CLASS|ICC_PAGESCROLLER_CLASS |ICC_INTERNET_CLASSES|ICC_USEREX_CLASSES|ICC_DATE_CLASSES |ICC_COOL_CLASSES|ICC_STANDARD_CLASSES; InitCommonControlsEx(&iccx); |
こうしなきゃいけないようだ
ちなみに、ICC_LINK_CLASSがあると低レベルのコントロール以外は全て無効になり、ICC_STANDARD_CLASSESはXP以降のはずだけど、指定しても無視されるようだ
ちなみに、Windows 2000にXPのcomctl32.dll 5.82 を入れると正常に動くのだった(SP4 SRP2v18には入ってるよ)
5.81の仕様なんだろうかね
SRP2 V18 あるんですか?
V17までしか見あたらないんですけど?
あ、すみません自分だけ開発版のv18使ってたの忘れてました|・ω・)
http://msdn.microsoft.com/en-us/library/windows/desktop/bb775507(v=vs.85).aspx
Windows 2000のほうが仕様通りの挙動と言うべきのように思います。