Last Updated 2005/09/16 |
Programming Tips Visual C++ OCX | 索 引 |
OCXの定数
2005/09/16
VC++ で作成した OCX を VisualBasic に貼り付けた時に,定数がドロップダウンさせるにはどうしたらよいか? (よく市販の OCX では MousePointer 0 - 既定値 1 - 矢印 2 - クロス と表示される) *.IDL ファイルに
とか記述する. プロパティを以下のようにする.
ソースに日本語が入っているが,ATL のプロジェクトではタイプライブラリを元にヘッダーを自動生成するのでエラーになってしまう. これをごまかすには,最初は英字で enum を定義してビルドした後,enum 定義されたヘッダーを保存しておく. *.IDL を望みの漢字に変更して *.IDL のみコンパイルしてタイプライブラリを作成する. 保存しておいたヘッダーファイルをタイプライブラリより新しい日付にしてビルドする. (大変な手間がかかり,これでは間違いも発生してしまう) ならば,正攻法で IPerPropertyBrowsing インターフェイスをインプリメントする. (ATL では IPerPropertyBrowsingImpl テンプレートクラスが該当する) MFC では以下のように記述する. プロパティがとりうる値を表す予め定義された文字列のセットを返す為の,OnGetPredefinedStrings メンバ関数をオーバーライドする. この関数は以下の引数を持つ.
この関数内では,上記プロパティの値を示す文字列と ID のペアを必要なだけ渡されてきた配列クラスへのポインタを使用して追加する.
次に OnGetPredefinedValue メンバ関数をオーバーライドする. この関数は以下の引数を持つ.
この関数は OnGetPredefinedStrings でセットした文字列に対応するクッキー値を渡してくるので,そのクッキー値が示す値を VARIANT 変数にセットする. (ここでは クッキー値 = プロパティ値 なのでそのままセットする)
最後に OnGetDisplayString をオーバーライドして,現在のプロパティ値を示す文字列を返すようにする. MFC のサンプルとしては ENUM32 が存在する. 参照 |
|