since : 2001.11.1 Junk Shop
DataSlim2's Room
このページは、Data Slim 2 のアドイン作成時に思いついたこと等、個人的な覚え書きです。
KEY..._Aで処理した直後にDsEventMessageGet();
でメッセージを読み込むと、sCodeにKEY..._Cが残っているようです。
(何もしていないのにKEY..._Cで指示した動きをしてしまいました。)
起動直後にKEY_ENTER_Cで作動するようなコードを書くと、キーでアドインを起動したときにそのままKEY_ENTER_Cで作動する箇所が動いてしまいます。
動作に関係のないDsEventMessageGet();
を入れて1回余分にメッセージコマンドを読み込んでやれば回避できました。
message構造体の取得値を勘違いしてました。(訂正済み)
なんかbCodeとsCodeがごっちゃになってますね。
なんとか手抜きしようと考えていたのですが、任意の1バイトを抽出したときに、それが1バイト文字なのか2バイト文字の1バイト目なのか2バイト目なのかを判別する方法を思いつきません。たぶん不可能なのでしょう
やっぱり素直に頭から順に数えていくしか方法はないのですかねぇ。
メッセージ構造体を見ていると、POINT pt
と言う物が・・・
てことはDsEventMessageGet();
でもタップした位置の取得が可能と言うことですね。
/*Sample Program*/ while(1){ DsEventMessageGet(&msg); TRACE("mes.message=%x\n",msg.message); TRACE("mes.bCode=%x\n",msg.bCode); TRACE("mes.sCode=%x\n",msg.sCode); TRACE("mes.pt.PointX=%d\n",msg.pt.PointX); TRACE("mes.pt.PointY=%d\n",msg.pt.PointY); }
上記サンプルプログラムで調べたところ、Event IDを宣言していない場所をタップした時は、msg.messageにMSG_DS_TOUCH_DOWN(0x20)、mes.bCodeにMSG_DS_TOUCH_DOWN(0x20)[触れたとき]、mes.bCodeにMSG_DS_TOUCH_UP(0x21)[離れた時]を取得します。
(ちなみにsCodeは0のままです。)
Event IDを宣言している場所ではmsg.messageにMSG_DS_COMMAND(0x03)、mes.sCodeはMSG_DS_COMMAND_DOWN(0x43)及びMSG_DS_COMMAND_UP(0x45)、mes.bCodeにEvent IDを取得します。
状態 | message | sCode | bCode |
---|---|---|---|
Tapping ON (No Event ID) | MSG_DS_TOUCH_DOWN (0x20) |
0x00 | MSG_DS_TOUCH_DOWN (0x20) |
Tapping OFF (No Event ID) | MSG_DS_TOUCH_DOWN (0x20) |
0x00 | MSG_DS_TOUCH_UP (0x21) |
Tapping ON (On Event ID) | MSG_DS_COMMAND (0x03) |
MSG_DS_COMMAND_DOWN (0x43) |
(Event ID) |
Tapping OFF (On Event ID) | MSG_DS_COMMAND (0x03) |
MSG_DS_COMMAND_UP (0x45) |
(Event ID) |
No Event (1second over) | MSG_DS_TIMER1 (0x40) |
0x00 | 0x00 |
スタイラスを移動させてオペレーションすることを考えたいましたが、どうも操作しにくいので、2点をタップしその位置関係でオペレーションする方法を検討中。
1回目のタップ座標を(X1,Y1)2回目のタップ座標を(X2,Y2)としたとき、X1-X2及びY1-Y2の値によって動作を変える。
誤差は6pxぐらいで良いか?
タッチパネルオペレーションを追加予定
Copyright 2001-2002 Hideo Morotomi