![]() |
■ATOK技術情報 <ATOK12/ATOK11/ATOK10 for Windows AMETアプリケーション開発マニュアル>
7.Visual C++ 4.0によるAMETサーバ作成例 Visual C++ 4.0 (VC4)とAppWizardを使ってAMETサーバを作る方法について説明する。 OLEオートメーションサーバの作成方法についてはBooks Online−Visual C++ Books−Tutorials−OLE Automation Server Tutorial のAutoClikが参考になる。 ここでは実際にVC4でAMETサーバを作成し、その手順をまとめた。作成するAMETサーバ(AmetVC)はAMETの基本機能を備えたサーバである。 AmetVCはATOKから起動されると読み、表記、文節情報を表示する。エディットボックスに文字列を入力してSendボタンをクリックすると、その文字列を確定文字列としてATOKに送信し、即座に終了する。 AmetVCはVC4のAppWizardで作成する。その際、画面の設計が簡単になるので、ビュークラスにはCFormViewを使うことにした。
手順2.新規プロジェクトワークスペースダイアログボックスが表示されるので、タイプ で MFC AppWizard (EXE) を選択し、プロジェクトワークスペース名 に AmetVC と入力して[作成]ボタンをクリックする。 手順3.ステップ1の 作成するアプリケーションのタイプ で SDI を指定する。 手順4.ステップ3/6の OLEサポートの選択 で、OLEオートメーション を指定する。 手順5.ステップ4/6では、ドッキングツールバー、初期ステータスバー、印刷および印刷プレビュー のチェックをはずす。特に最初の2つがチェックされていると、起動時の表示がおかしくなってしまう。 手順6.ステップ4/6で[高度な設定]ボタンをクリックして、高度なオプションダイアログボックスを開き、ファイルタイプIDボックスに入力されたProg IDを確認する。変更してもよいが、ここではデフォルトのAmetVC.Documentをそのまま使う。 手順7.ステップ6/6のAppWizardで作成される新規アプリケーションクラス リストボックスで CAmetVCView を選択する。基本クラス が CView になっているので、CFormView に変更する。 手順8.[終了]をクリックすると、新規プロジェクト情報ダイアログボックスが表示されるので、[OK]をクリックしてソースを生成する。 7−1−1.プロジェクトオプションの変更 AmetVCのプログラム中でRTTIを使用する。RTTIはデフォルトでは無効になっているので、次の手順で有効にする。
手順2.C/C++タブ を選択し、カテゴリコンボボックスで C++言語 を選択する。 手順3.ランタイムタイプ情報(RTTI)を行うチェックボックスをクリックし、RTTIを有効にする。 手順4.[OK]をクリックし、ダイアログボックスを閉じる。 プログラムのメイン画面はIDD_AMETVC_FORMで与えられるダイアログなので、これを編集する。 プロジェクトワークスペースウィンドウの Resource Viewタブ を選択し、AmetVCリソース−Dialog−IDD_AMETVC_FORM をダブルクリックしてダイアログエディタを起動する。 ダイアログを図2.のように変更する。
それぞれのコントロールのプロパティは次のように設定する。
編集が終われば、ダイアログエディタを終了する。 AmetVCは、AMETサーバが持つことのできるすべてのプロパティとメソッドを実装する。 【表示−ClassWizard】を実行し、OLEオートメーションタブ を選択する。クラス名 でCAmetVCDoc クラスを選択すると、[メソッドの追加]、[プロパティの追加]ボタンが有効になる。 7−3−1.プロパティの追加 AmetYomiプロパティを追加するときは次のようにする。プロパティの インプリメント には メンバ変数 と 取得/設定メソッド の2種類を指定できるが、AmetVCではすべてのプロパティを メンバ変数 として実装する。
手順2.外部名 に AmetYomi と入力する。 手順3.タイプ に CString を指定する。 手順4.他はデフォルトのままにする。 手順5.[OK]ボタンをクリックする。 同様に残りのプロパティも追加する。プロパティの属性は次のようになる。
7−3−2.メソッドの追加 AmetStartプロパティを追加するときは次のようにする。
手順2.外部名 に AmetStart と入力する。 手順3.内部名に AmetStart と入力されるので、そのままにする。 手順4.戻り値の型に void を指定する。
手順5.パラメータリスト で引数を指定する。
手順6.[OK]ボタンをクリックする。 同様に残りのメソッドも追加する。メソッドの属性は次のようになる。
メソッドの追加が完了したところでClassWizardの[コード編集]をクリックし、ソースの編集画面を表示する。 7−4−1.メンバ変数の追加 最初にClass Wizardで自動的に追加されないメンバ変数を追加する。 m_hAtokWindowを追加するときの手順を次に示す。その前にプロジェクトウィンドウのClass Viewタブをクリックして表示を切り換える。
手順2.マウスの右ボタンを押して表示されるメニューから【変数の追加】を選択するとメンバ変数の追加ダイアログが表示される。 手順3.変数の型 に HWND と入力する。 手順4.変数宣言 に m_hAtokWindow と入力する。 手順5.アクセス は Private を指定する。 手順6.[OK]をクリックする。 同様に次に示すメンバ変数を追加する。
7−4−2.メンバ関数の追加 Class Wizardで自動的に追加されないメンバ関数を追加する。 通常のメンバ関数 AmetNotify() を追加するときの手順を次に示す。
手順2.マウスの右ボタンを押して表示されるメニューから【関数の追加】を選択するとメンバ関数の追加ダイアログが表示される。 手順3.関数型 に void と入力する。 手順4.関数宣言に AmetNotify(void) と入力する。 手順5.アクセス は Public を指定する。 手順6.[OK]をクリックする。
手順8.マウスの右ボタンを押して表示されるメニューから【定義の表示】を選択すると、CAmetVCDocのヘッダーファイルが表示される。
手順9.CAmetVCDocのクラス定義の最初の部分に 『//アトリビュート』という行があるので、その行以降を次のように変更する。
追加が終われば、ヘッダーファイルを保存する。 ここで追加したメンバ関数について以下にまとめる。
7−4−3.メンバ関数の編集 追加したメンバ関数を編集する。以下の説明では先頭に『 > 』をつけた行を追加する。以下で説明していないメンバ関数はClassWizardが生成したままで変更しない。 ※関数の定義場所への移動方法について 関数を編集するとき、関数の定義されている場所に移動するには、ソースファイル上で捜す以外に、次のような方法もある。 プロジェクトウィンドウで AmetVCクラス−CAmetVCDoc−AmetNotify() をダブルクリックすると、ソースファイルのAmetNotify()が定義されているところに移動することができる。 7−4−4.コンストラクタ CAmetVCDoc()は、追加したプロパティに関連したメンバ変数とメンバ変数の初期化をするように変更する。
7−4−5.AmetStart() AmetStart()では次の処理を追加する。
・引数として渡されたATOKウィンドウのハンドルを保存する。
※ウィンドウの表示について
単独のプログラムの場合は、ビュークラスのOnInitialUpdate()でサイズ調整をするが、OLEオートメーションではその設定が反映されないため、ウィンドウの表示処理と同時にフレームウィンドウのサイズ調整もすることにした。 7−4−6.AmetSetBYomi()、AmetSetBHyoki() これらの関数は、次のように実装する。
7−4−7.AmetNotify() ATOKにWM_AMET_NOTIFYメッセージを送信するための関数。AmetQuitをTRUEにしているので、このメッセージを送ったあとATOKはAmetVCを終了させる。
ビュークラスはイベントに対応する処理などを追加する。 7−5−1.オーバーライドメンバ関数の追加 上位のクラスで定義されているメンバ関数をオーバーライドする。一例として、OnDraw()を定義する手順を次に示す。
手順2.クラス名 で CAmetVCView を選択する。 手順3.オブジェクトIDリストボックスで CAmetVCView を選択する。 手順4.メッセージリストボックスで OnDrawを選択する。 手順5.[関数の追加]ボタンをクリックすると、OnDraw()の雛形が生成される。 同様に次に示すオーバーライドメンバ関数を追加する。
7−5−2.イベントハンドラの追加 ボタンが押されたときのイベントハンドラ関数を追加するには、次の手順で行う。
手順2.クラス名 で CAmetVCView を選択する。 手順3.オブジェクトIDリストボックスで IDC_SENDRESULT を選択する。 手順4.メッセージリストボックスで BN_CLICKED を選択する。 手順5.[関数の追加]ボタンをクリックすると、イベントハンドラ関数の名前を尋ねてくるので、デフォルトの名前(OnSendResult)を変更せずにOKをクリックする。 追加したメンバ関数を編集する。以下の説明では先頭に『 > 』をつけた行を追加する。 7−6−1.OnDraw OnDraw()は、ビューが表示されるときに呼び出される。AMETの呼び出し時に設定された情報をドキュメントから取得してコントロールに表示する。
7−6−2.OnInitalUpdate CFormViewクラスのウィンドウを表示するとき、自動的にウィンドウのサイズをダイアログのサイズに合せることができる。そのためにOnInitialUpdate()ハンドラを追加する。 この関数は、AmetVCを単独で起動したときに有効であり、ATOKからOLEオートメーションで呼ばれたときは、ここの設定は反映されない。
7−6−3.OnSendResult Sendボタンが押されたとき、エディットボックスに入力された文字列をATOKに送る処理を追加する。
動作確認とレジストリに登録するため、ビルドして実行する。図2.のような画面が表示されればとりあえずは正常に動作している。 7−7−1.ProgIDについて VC4で作成したOLEサーバのProgIDは、AppWizardのステップ4/6で[高度な設定]ボタンを押して開いた ファイルタイプID ボックスに入力された文字列が使われる。AmetVCの場合のProgIDはAmetVC.Documentである。 7−8.ATOKとの連携テスト ATOKから呼び出せるようにするためにATOKのINIファイル(*6)に次のように登録し、再起動させる。
メモ帳などでATOKを起動し、未確定文字列のある状態でShift + F10キーを押してメニューを表示し、AMETメニューを起動する。そこから2番のAMETを選択するとAmetVCが起動し、読みと表記が表示される。エディットボックスに任意の文字列を入力してSendボタンをクリックすると、その文字列が確定文字列としてアプリケーションに送信され、AmetVCは終了する。
ATOK11の場合…ATOK11W.INI ATOK10の場合…ATOK10W.INI
以上
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
update 1998.12.2 |