私が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必要では?と思ったところ、コメント欄に決定打がありました。

Raymond Chen – MSFT says:
April 18, 2005 at 12:52 pm

CornedBee: 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の実引数は昔も今もちゃんインスタンスハンドルを渡さないといけないということでした。

スポンサード リンク

この記事のカテゴリ

  • ⇒ CreateWindow関数にはHINSTANCEが必要