Q:
HIObjectRegisterSubclass を呼び出して HIView のカスタムサブクラスを登録すると、paramErr (-50) が戻されました。なぜでしょうか?
A:
ほかのすべてのパラメタが正しいとすると、問題は、HIView オブジェクトクラスの登録がやや遅すぎたことが考えられます。通常、このクラスは、最初の HIView がインスタンス化された時点で登録されます。しかし何かの HIView(ウインドウやコントロール)をインスタンス化する前に HIViews のサブクラスを登録しようとすると、その時点では HIView クラスがまだ登録されていないため、HIObjectRegisterSubclass がこれを見つけることができずにエラーを返します。
この問題 (r. 3020648) は、次回のソフトウェアアップデートにて修正される予定です。この修正により、HIObjectRegisterSubclass では、登録済みの基本クラスを見つけられなかった場合も、遅れて登録されるクラスを登録できるようになります。
それまでは、アップルが定義するほかのいくつかのコントロールのインスタンスを作成することで、この問題を回避できます。たとえば、新しい HIToolbox 生成スキーマを使用した有効なウインドウを必要としないため、ウインドウパラメタに NULL を渡して作成できるプッシュボタンなどです。その後、そのコントロールを破棄できます。既知の HIView クラスをこのようにインスタンス化することにより、HIView クラス自体の登録と、その後の HIObjectRegisterSubclass の呼び出しが成功します。
[2002 年 11 月 12 日]
|