私がWindows APIプログラミングを始めた頃から、MSDNライブラリのCreateWindow関数にはこんなことが書いてありました。従って、NT系ならここはNULLで良いのだと、最近まで信じていました。
- hInstance
- Windows 95/98:ウィンドウに関連付けられたモジュールのインスタンスハンドルを指定します。
Windows NT/2000:このパラメータは無視されます。
ところが、最近こんなのを見つけたんです: What is the HINSTANCE passed to CreateWindow and RegisterClass used for? – The Old New Thing。
ウィンドウクラスはHINSTANCEとクラス名で識別されるのだということが書いてあります。あれあれ?この説明のとおりなら、HINSTANCE必要では?と思ったところ、コメント欄に決定打がありました。
April 18, 2005 at 12:52 pmCornedBee: That’s a doc bug; I’ve submitted a correction. All versions of Windows have always used the HINSTANCE to identify the class.
そして、最新情報に更新され続ける、英語のほうのMSDNライブラリを開けばこうです。
- hInstance [in, optional]
Type: HINSTANCE
A handle to the instance of the module to be associated with the window.
いつの間にか書いてあることが変わっているではありませんか!
そんなわけで、CreateWindow関数(もちろんCreateWindowEx関数も)のHINSTANCEの実引数は昔も今もちゃんインスタンスハンドルを渡さないといけないということでした。
スポンサード リンク |
ABのRADツールを利用してコーディングする限り、今まではCreateWindow関数のHINSTANCEパラメータについて意識することがほとんどありませんでした。今後はこの点を意識しながらコーディングしようと思います。
ABのRADツールであれば問題ありません。CreateWindow関数でもきちんとHINSTANCEを渡すようになっているためです。