User manual - DT-5100 エミュレータ開発解説書ver.3.00(2004年3月8日)
3.4 スキン上の左右トリガ ボタンの処理
システムフック処理は左右トリガ ボタンの押下(Key_F11、 Key_F12)を検出すると、次の名前のイベント(名
前付き自動リセットイベント)をシグナル状態にします。
左トリガ ボタンのイベント名 : “PxEmEvt1”
右トリガ ボタンのイベント名 : “PxEmEvt2”
従って、左右トリガ ボタンの押下で値を返すような関数では、上記名前で作成したイベント配列を指定し、
WaitForMultipleObject() で待つことで実現できます。
以下はエミュレーター版 TDWaitForDecode()の例です。
#include "pxemevt.h"
Result_t TDWaitForDecode(
DWORD dwTime,
PTCHAR ptcMessage,
PTCHAR ptcCodeID,
PTCHAR ptcAimId,
PTCHAR ptcSymModifier,
PWORD pnLength,
BOOL (*fpCallBack)(void)
)
{
DWORD dwEvent;
Result_t rt = RESULT_ERR_NOIMAGE;
// 名前付きイベント作成
PxEmEvt_Init(); // ・・・・・・・・・・・・・・・・・・・・
dwEvent = WaitForMultipleObjects ( PXEVENT_NUM, hPxEmEvt, FALSE, dwTime); ・・
switch( dwEvent)
{
case WAIT_OBJECT_0: // 左トリガーキー ・・・・・・・・・・・・
wcscpy( ptcMessage, TEXT( "Scanned by LEFT triger"));
*pnLength = wcslen( TEXT( "Scanned by LEFT triger"));
rt = RESULT_SUCCESS;
break;
case WAIT_OBJECT_0+1: // 右トリガーキー ・・・・・・・・・・・・・’
wcscpy( ptcMessage, TEXT( "Scanned by RIGHT triger"));
*pnLength = wcslen( TEXT( "Scanned by RIGHT triger"));
rt = RESULT_SUCCESS;
break;
case WAIT_ABANDONED_0: // ABANDONED
case WAIT_TIMEOUT: // WAIT_TIMEOUT
case WAIT_FAILED: // WAIT_FAILED
default:
rt = RESULT_ERR_NOIMAGE;
break;
}
// 名前付きイベント削除
PxEmEvt_End(); // ・・・・・・・・・・・・・・・・・・・・
return rt;
}
7