IMathInputControl
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
インク入力を解釈して数式として出力するためのメソッドを公開します。
メソッド 17
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
コントロールを表示します。
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Math Input Control が表示されていない場合に表示します。コントロールが既に表示されている場合は、コントロールを z オーダーの最前面に移動します。 SetPosition が呼び出されていない場合、Show はコントロールを画面の左上隅 (画面座標で (0, 0)) に表示します。 コントロールの幅と高さは最小値になります。
例
HRESULT hr = CoInitialize(NULL);
hr = g_spMIC.CoCreateInstance(CLSID_MathInputControl);
hr = g_spMIC->EnableExtendedButtons(VARIANT_TRUE);
hr = g_spMIC->Show();
コントロールを非表示にします。
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
コントロールが表示されているかどうかを判断します。
| pvbShown | VARIANT_BOOL* | out | コントロールを表示する場合は VARIANT_TRUE、コントロールを非表示にする場合は VARIANT_FALSE です。 |
戻り値
このメソッドは HRESULT を返します。有効な値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 不特定のエラーが発生しました。 | |
| pvbShown パラメーターが NULL です。 |
コントロールの位置とサイズを取得します。
| Left | INT* | out | コントロールの左端の位置。 |
| Top | INT* | out | コントロールの上端の位置。 |
| Right | INT* | out | コントロールの右端の位置。 |
| Bottom | INT* | out | コントロールの下端の位置。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、コントロールが表示されていない場合でもコントロールのサイズと位置を返します。
コントロールの作成直後にこのメソッドを呼び出した場合は、コントロールの最小の幅と高さを返します。
コントロールの位置とサイズを変更します。
| Left | INT | in | コントロールの左端の位置。 |
| Top | INT | in | コントロールの上端の位置。 |
| Right | INT | in | コントロールの右端の位置。 |
| Bottom | INT | in | コントロールの下端の位置。 |
戻り値
このメソッドは HRESULT を返します。有効な値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| コントロールのサイズは変更されましたが、結果として得られた幅、高さ、またはその両方が入力パラメーターと一致しません。 | |
| 不特定のエラーが発生しました。 |
解説(Remarks)
このメソッドは、コントロールの表示状態にかかわらず呼び出すことができます。
パラメーターが有効でない場合でも、このメソッドは成功します。矩形がコントロールの最大許容サイズ (デスクトップウィンドウ) より大きい場合は、代わりに可能な最大サイズが使用されます。矩形がコントロールの最小サイズより小さい場合、またはインクと結果プレビューを保持できないほど小さい場合は、代わりに可能な最小サイズが使用されます。
このメソッドが S_FALSE を返した場合、GetPosition メソッドはコントロールの実際のサイズ情報を返します。
コントロールからすべてのインクを消去します。
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ボタンまたは背景をカスタム描画するかどうかを設定します。
| Element | INT | in | ボタンまたは背景の識別子。 |
| Paint | VARIANT_BOOL | in | 指定した UI 要素のカスタム描画を有効にする場合は VARIANT_TRUE、それ以外の場合は VARIANT_FALSE です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
カスタム描画が有効な場合、ボタンまたは背景は少なくとも部分的に (場合によっては完全に) コンテナーによって描画されます。
ウィンドウの作成時にコントロールのキャプションとして使用される文字列を変更します。
| CaptionText | LPWSTR | in | キャプションのテキスト。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
インクを処理し、認識を実行します。
| Ink | IInkDisp* | inoptional | インク (手書き) オブジェクト。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、コントロールが表示されている場合にのみ動作します。 インクがコントロールの現在のサイズを超え、かつ自動拡大が有効になっている場合、コントロールは入力に合わせて領域を確保しようとします。十分な領域を確保できない場合、インクは利用可能な最大サイズに収まるように比例して縮小されます。
このコントロールを所有するウィンドウを変更します。
| OwnerWindow | INT_PTR | in | 所有者ウィンドウへのハンドル。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Math Input Control は、常にそれを所有するウィンドウの前面に表示されます。
拡張されたコントロールボタンのセットを表示するかどうかを設定します。
| Extended | VARIANT_BOOL | in | 拡張ボタンセットを表示する場合は VARIANT_TRUE、基本ボタンセットを表示する場合は VARIANT_FALSE です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定では基本ボタンセットが表示されます。
基本ボタンセットには、Clear、Erase、Insert、Select and Correct、Write の各ボタンが含まれます。拡張ボタンセットには、基本セットに加えて Redo ボタンと Undo ボタンが含まれます。
次の画像は、拡張ボタンを有効にした Math Input Control を示しています。
次の画像は、拡張ボタンを無効にした Math Input Control を示しています。
例
hr = g_spMIC->EnableExtendedButtons(VARIANT_TRUE);
プレビュー領域の高さをピクセル単位で取得します。
| Height | INT* | out | プレビュー領域の高さ (ピクセル単位)。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
コントロールのサイズを手動で変更すると、結果プレビュー領域の高さに影響する場合があります。
プレビュー領域の高さをピクセル単位で変更します。
| Height | INT | in | プレビュー領域の高さ (ピクセル単位)。 |
戻り値
このメソッドは HRESULT を返します。有効な値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Height パラメーターで指定された高さがコントロールの範囲外です。 |
解説(Remarks)
プレビュー領域には、コントロールの現在の高さに応じてあらかじめ定義された最小サイズと最大サイズがあります。 このメソッドが S_FALSE を返した場合、GetPreviewHeight メソッドはコントロールの実際のサイズ情報を返します。
次の画像は、既定のプレビュー高さの Math Input Control を示しています。
次の画像は、カスタムのプレビュー高さを設定した Math Input Control を示しています。
例
CComPtr<IMathInputControl> g_spMIC; // Math Input Control
// プレビューの高さを設定します
// 注: 先にコントロールを初期化しておく必要があります
void CMath_Input_Control_testDlg::OnBnClickedSetPreviewAreaSize()
{
LONG height = 200;
HRESULT hr = S_OK;
hr = g_spMIC->SetPreviewHeight(height);
}
コントロールの現在の範囲を超えて入力が行われたときに、コントロールを自動的に拡大するかどうかを設定します。
| AutoGrow | VARIANT_BOOL | in | 自動拡大を有効にする場合は VARIANT_TRUE、それ以外の場合は VARIANT_FALSE です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
自動拡大は既定で有効になっています。
認識エンジンが受け付けるカスタム数学関数の一覧に、新しい関数名の定義を追加します。
| FunctionName | LPWSTR | in | 追加する関数の名前。 |
戻り値
このメソッドは HRESULT を返します。有効な値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 名前を追加できませんでした。 |
解説(Remarks)
この関数は、既定の辞書に存在しないカスタム数学関数を追加するために使用します。関数が関数辞書に追加されると、認識エンジンはその関数を読み取れるようになります。ただし、カスタム関数名は、筆記体では単語全体としてではなく 1 文字ずつしか認識されない場合があります。
認識エンジンが受け付けるカスタム数学関数の一覧から、関数名の定義を削除します。
| FunctionName | LPWSTR | in | 削除する関数の名前。 |
戻り値
このメソッドは HRESULT を返します。有効な値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 指定された数学関数は、認識エンジンが受け付けるカスタム数学関数の一覧に存在しないため削除できません。 |
Math Input Control を起動するためのホバーターゲットに使用するアイコンを取得します。
| HoverImage | IPictureDisp** | out | ホバーターゲットアイコンへのポインターのアドレス。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のあるコードには次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| アイコンを取得できませんでした。 |
解説(Remarks)
ホバーターゲットを実装する場合は、このアイコンを使用することを強く推奨します。 アイコンは .ico 形式で返され、システムの DPI (dots per inch) 設定に一致します。
アイコンは、幅と高さが固定された 32 ビット画像として提供されます。 96 DPI では、値は Width = 63、Height = 49 です。 その他の DPI では、これらの値はそれに応じて変更されます。 たとえば 144 DPI のシステムでは、Width = 63 * 144 / 96、Height = 49 *144 / 96 となります。 ホバーアイコンを取得したアプリケーションは、アイコンリソースを解放する責任があります。
例
CComPtr <IMathInputControl> g_spMIC; // Math Input Control
BOOL TestDlg::OnInitDialog(){
HRESULT hr = CoInitialize(NULL);
hr = g_spMIC.CoCreateInstance(CLSID_MathInputControl);
CComPtr<IPictureDisp> hoverImage;
CComPtr<IPicture> pictureHoverImage;
g_spMIC->GetHoverIcon(&hoverImage);
hoverImage.QueryInterface(&pictureHoverImage);
short type;
pictureHoverImage->get_Type(&type);
if (type == PICTYPE_ICON){
OLE_HANDLE oleHandle;
hr = pictureHoverImage->get_Handle(&oleHandle);
this->SetIcon((HICON)oleHandle, true);
}
return TRUE;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMathInputControl "{EBA615AA-FAC6-4738-BA5F-FF09E9FE473E}" #usecom global IMathInputControl IID_IMathInputControl "{C561816C-14D8-4090-830C-98D994B21C7B}" #comfunc global IMathInputControl_Show 7 #comfunc global IMathInputControl_Hide 8 #comfunc global IMathInputControl_IsVisible 9 var #comfunc global IMathInputControl_GetPosition 10 var,var,var,var #comfunc global IMathInputControl_SetPosition 11 int,int,int,int #comfunc global IMathInputControl_Clear 12 #comfunc global IMathInputControl_SetCustomPaint 13 int,int #comfunc global IMathInputControl_SetCaptionText 14 wstr #comfunc global IMathInputControl_LoadInk 15 sptr #comfunc global IMathInputControl_SetOwnerWindow 16 sptr #comfunc global IMathInputControl_EnableExtendedButtons 17 int #comfunc global IMathInputControl_GetPreviewHeight 18 var #comfunc global IMathInputControl_SetPreviewHeight 19 int #comfunc global IMathInputControl_EnableAutoGrow 20 int #comfunc global IMathInputControl_AddFunctionName 21 wstr #comfunc global IMathInputControl_RemoveFunctionName 22 wstr #comfunc global IMathInputControl_GetHoverIcon 23 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IMathInputControl "{EBA615AA-FAC6-4738-BA5F-FF09E9FE473E}" #usecom global IMathInputControl IID_IMathInputControl "{C561816C-14D8-4090-830C-98D994B21C7B}" #comfunc global IMathInputControl_Show 7 #comfunc global IMathInputControl_Hide 8 #comfunc global IMathInputControl_IsVisible 9 sptr #comfunc global IMathInputControl_GetPosition 10 sptr,sptr,sptr,sptr #comfunc global IMathInputControl_SetPosition 11 int,int,int,int #comfunc global IMathInputControl_Clear 12 #comfunc global IMathInputControl_SetCustomPaint 13 int,int #comfunc global IMathInputControl_SetCaptionText 14 wstr #comfunc global IMathInputControl_LoadInk 15 sptr #comfunc global IMathInputControl_SetOwnerWindow 16 sptr #comfunc global IMathInputControl_EnableExtendedButtons 17 int #comfunc global IMathInputControl_GetPreviewHeight 18 sptr #comfunc global IMathInputControl_SetPreviewHeight 19 int #comfunc global IMathInputControl_EnableAutoGrow 20 int #comfunc global IMathInputControl_AddFunctionName 21 wstr #comfunc global IMathInputControl_RemoveFunctionName 22 wstr #comfunc global IMathInputControl_GetHoverIcon 23 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。