投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/4/2 18:54:10
> と全部列挙して①
既定ではすべてのジェスチャーが無効になっているので、
使いたいジェスチャーのみを SetGestureStatus メソッドで True にします。

現状の設定が True/False いずれか判断するのは、GetGestureStatus ですが、
すべてを拾う前提なら、そもそも GetGestureStatus の出番は無いでしょう。

すべてのジェスチャーをまとめて設定したい場合は、IAG_AllGestures フラグで指定できます。

たとえば、DownUp/UpDown/Down/Up の 4 ジェスチャーだけを有効にしたい場合には、
.SetGestureStatus IAG_AllGestures, False
.SetGestureStatus IAG_DownUp, True
.SetGestureStatus IAG_UpDown, True
.SetGestureStatus IAG_Down, True
.SetGestureStatus IAG_Up, True
のようにできます。


> If geid = IAG_Circle Then
> ②debug.printのところを
> パブリックの変数geidに代入に変更して、
この部分、geid によって何を判定しようとしているのでしょうか?


> 一回このボタンを押したら、その後は、
> msgboxでid表示にしても随時動くみたいなのですが、
CommandButton2_Click に設定処理を書いているという事は、
ジェスチャーの有効化と無効化を切り替えられるようにしたいということでしょうか?


> ③識別用に生成したGuid値は、教えて頂いた関数にしています。
> ④declareは、一番上に持って行きました。 
この辺は今は使わないかも。ストロークに任意の管理データを割り当てる必要が無い場合には、
そもそも ExtendedProperties を使う必要もありません。

それと…済みません。先ほどの Declare の戻り値が間違っていました。

CoCreateGuid 関数の戻り値は HRESULT なので、As LongPtr ではなく As Long が正しいです。
StringFromGUID2 関数の戻り値は int なので、これも As LongPtr ではなく As Long が正しいです。



> 一番最初のinkがジェスチャーでなくインクになって画面に残っちゃいます。
Stroke イベントや Gesture イベントが発生するかどうかは、
CollectionMode プロパティに左右されます。

ICM_GestureOnly なら Gesture イベントのみ
ICM_InkOnly なら Stroke イベントのみ
ICM_InkAndGesture なら両方です。


ICM_GestureOnly によるジェスチャーは、マルチストローク(たとえば IAG_Exclamation など)をサポートします。
そのためジェスチャーパターンによって、操作し終わってから実際に解析されるまでに、
1 秒程度の待ち時間が必要になることがあります。
その待ち時間が経過するまでの間はストロークが残りますが、ジェスチャー判定後に消えると思います。

ICM_InkAndGesture によるジェスチャーでは、単一ストロール(たとえば IAG_DownUp など)しかサポートされませんので、
ストロークが終わると即座に Gesture イベントが発生します。ジェスチャーとして認識されたけれども
ジェスチャーではなくインクとして残したい場合は、引数 Cancel を True にします。
引数 Cancel を False にした場合は、そのままジェスチャーとして扱われ、End Sub 到達後に消えます。



なお、ジェスチャーが入力された時にどういう動作を行うかは
御自身で実装いただくことになります。

ジェスチャーによっては、「挿入」「削除」「コピー」「ペースト」などといった、
アプリケーション用に推奨されたジェスチャーが存在しますので、参考にしてみてください。
https://docs.microsoft.com/en-us/windows/win32/tablet/application-gestures-and-semantic-behavior