Visual C#

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


WndProcを利用する場合

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
protected override void WndProc (ref Message m)

m.Msg
メッセージ番号が渡されます。

 

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

 

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

 

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

switch( m.Msg ){
case AIOM_AIE_START:
    MessageBox.Show (this, "サンプリング開始", "ウィンドウ名");
    break;
case AIOM_AIE_RPTEND:
    MessageBox.Show (this, "リピート終了", "ウィンドウ名");
    break;
case AIOM_AIE_END:
    MessageBox.Show (this, "サンプリング終了", "ウィンドウ名");
    break;
case AIOM_AIE_DATA_NUM:
    MessageBox.Show (this, "データ格納", "ウィンドウ名");
    break;
case AIOM_AIE_OFERR:
    MessageBox.Show (this, "オーバーフローエラー", "ウィンドウ名");
    break;
case AIOM_AIE_SCERR:
    MessageBox.Show (this, "サンプリングクロック周期エラー", "ウィンドウ名");
    break;
case AIOM_AIE_ADERR:
    MessageBox.Show (this, "AD変換エラー", "ウィンドウ名");
    break;
}

 

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

if ( m.WParam = ID1 ){
    switch( m.Msg ){
    case AIOM_AIE_START:
        MessageBox.Show (this, "ID1:サンプリング開始", "ウィンドウ1");
        break;
    case AIOM_AIE_RPTEND:
        MessageBox.Show (this, "ID1:リピート終了", "ウィンドウ1");
        break;
    case AIOM_AIE_END:
        MessageBox.Show (this, "ID1:サンプリング終了", "ウィンドウ1");
        break;
    case AIOM_AIE_DATA_NUM:
        MessageBox.Show (this, "ID1:データ格納", "ウィンドウ1");
        break;
    case AIOM_AIE_OFERR:
        MessageBox.Show (this, "ID1:オーバーフローエラー", "ウィンドウ1");
        break;
    case AIOM_AIE_SCERR:
        MessageBox.Show (this, "ID1:サンプリングクロック周期エラー", ”ウィンドウ1");
        break;
    case AIOM_AIE_ADERR:
        MessageBox.Show (this, "ID1:AD変換エラー", "ウィンドウ1");
        break;
    }
}
else{
    switch( m.Msg ){
    case AIOM_AIE_START:
        MessageBox.Show (this, "ID2:サンプリング開始", "ウィンドウ2");
        break;
    case AIOM_AIE_RPTEND:
        MessageBox.Show (this, "ID2:リピート終了", "ウィンドウ2");
        break;
    case AIOM_AIE_END:
        MessageBox.Show (this, "ID2:サンプリング終了", "ウィンドウ2");
        break;
    case AIOM_AIE_DATA_NUM:
        MessageBox.Show (this, "ID2:データ格納", ”ウィンドウ2");
        break;
    case AIOM_AIE_OFERR:
        MessageBox.Show (this, "ID2:オーバーフローエラー", "ウィンドウ2");
        break;
    case AIOM_AIE_SCERR:
        MessageBox.Show (this, "ID2:サンプリングクロック周期エラー", "ウィンドウ2");
        break;
    case AIOM_AIE_ADERR:
        MessageBox.Show (this, "ID2:AD変換エラー", "ウィンドウ2");
        break;
    }
}

base.WndProc(ref m);

}