Visual C++ (MFC)

VCのイベントメッセージルーチンは次の書式になります。

LRESULT CAioDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)

message
メッセージ番号が渡されます。

 

wParam
下位2バイトにIDが渡されます。上位2バイトは現在使用しません。

 

lParam
イベントごとに固有のパラメータが渡されます。

 

メッセージ処理例1
イベントを使用するデバイスが1つしか存在しない場合、IDによるデバイスの判断は特に必要ありません。
以下のコードはイベントが発生したときにメッセージボックスを表示する例です。

switch( message ){
case AIOM_AIE_START:
    AfxMessageBox("サンプリング開始", MB_OK, 0);
    break;
case AIOM_AIE_RPTEND:
    AfxMessageBox("リピート終了", MB_OK, 0);
    break;
case AIOM_AIE_END:
    AfxMessageBox("サンプリング終了", MB_OK, 0);
    break;
case AIOM_AIE_DATA_NUM:
    AfxMessageBox("データ格納", MB_OK, 0);
    break;
case AIOM_AIE_OFERR:
    AfxMessageBox("オーバーフローエラー", MB_OK, 0);
    break;
case AIOM_AIE_SCERR:
    AfxMessageBox("サンプリングクロック周期エラー", MB_OK, 0);
    break;
case AIOM_AIE_ADERR:
    AfxMessageBox("AD変換エラー", MB_OK, 0);
    break;
}

 

メッセージ処理例2
複数のデバイスでイベントを使用する場合、どのデバイスから発生したイベントかを判断する必要があります。
以下のコードは、2つのデバイス(ID1とID2)でイベントを使用する例です。

if ( wParam = ID1 ){
    switch( message ){
    case AIOM_AIE_START:
        AfxMessageBox("ID1:サンプリング開始", MB_OK, 0);
        break;
    case AIOM_AIE_RPTEND:
        AfxMessageBox("ID1:リピート終了", MB_OK, 0);
        break;
    case AIOM_AIE_END:
        AfxMessageBox("ID1:サンプリング終了", MB_OK, 0);
        break;
    case AIOM_AIE_DATA_NUM:
        AfxMessageBox("ID1:データ格納", MB_OK, 0);
        break;
    case AIOM_AIE_OFERR:
        AfxMessageBox("ID1:オーバーフローエラー", MB_OK, 0);
        break;
    case AIOM_AIE_SCERR:
        AfxMessageBox("ID1:サンプリングクロック周期エラー", MB_OK, 0);
        break;
    case AIOM_AIE_ADERR:
        AfxMessageBox("ID1:AD変換エラー", MB_OK, 0);
        break;
    }
}
else{
    switch( message ){
    case AIOM_AIE_START:
        AfxMessageBox("ID2:サンプリング開始", MB_OK, 0);
        break;
    case AIOM_AIE_RPTEND:
        AfxMessageBox("ID2:リピート終了", MB_OK, 0);
        break;
    case AIOM_AIE_END:
        AfxMessageBox("ID2:サンプリング終了", MB_OK, 0);
        break;
    case AIOM_AIE_DATA_NUM:
        AfxMessageBox("ID2:データ格納", MB_OK, 0);
        break;
    case AIOM_AIE_OFERR:
        AfxMessageBox("ID2:オーバーフローエラー", MB_OK, 0);
        break;
    case AIOM_AIE_SCERR:
        AfxMessageBox("ID2:サンプリングクロック周期エラー", MB_OK, 0);
        break;
    case AIOM_AIE_ADERR:
        AfxMessageBox("ID2:AD変換エラー", MB_OK, 0);
        break;
    }
}

return CDialog::DefWindowProc(message, wParam, lParam);

}