単刀直入にお伺い致します。何かの処理中でもキーイベントを起こす方法があれば教えてください。
何かの処理を行っている最中(私の場合はWAVEの再生)だとキーイベント(例:一時停止など)が起こせません。ボタンクリックイベントなら操作が起きるのですが、キーイベントだとダメでした。
再生をスレッドにしたんですが、再生がうまくいきません。
そこでボタンクリックのように操作を横取り(?)する方法がありましたら、教えてください。
ボタンクリックをどうにかするよりも、サウンドを非同期で再生するとか、なぜスレッドで再生するとうまく行かないかとか、そのへん考えるほうが先だと思われます。
編集 削除返答して頂きありがとうございます。
なぜスレッドでうまく行かないのかいろいろ調べていたところ、スレッドには、
「インタフェーススレッド」と「ワーカースレッド」の2種類があるところまで調べました。
今まではワーカースレッドでやっていてダメだったので、インタフェーススレッドでやってみようと思っています。
ただ、インタフェーススレッドに関するホームページが検索しても出てきません・・・。
どなたかインタフェーススレッドを分かりやすく説明しているホームページをご存知でしたら教えてください。お願いします。
前回開発環境を書いて居なかったというマナー(?)違反をしていたので、遅れ馳せながら報告させていただきます。
OS->WinXP、VC++6.0、ダイアログベース、MFC使用
再生するのはActiveXコントロールです。
前回参考にしたページはこちらです。
ttp://www.alpha-net.ne.jp/users2/uk413/vc/VCT_MT.html
>>再生するのはActiveXコントロールです。
コントロールで再生してるなら、そのコントロールに中断するメソッドが
無いとダメなんじゃない?
(どんな状況だか判らないので何とも言えないけど)
あと、スレッド使う時は、アパートメントも考える必要があるので。念の為。
>>コントロールで再生してるなら、そのコントロールに中断するメソッドが無いとダメなんじゃない?
説明不足だったようです。その中断メソッドを特定のキー入力で起こすのが目的なのです。
けど、そのコントロールが処理を独占していてその間、PreTranslateMessageイベントが起きなくて困っているのです。
アパートメントという言葉ははじめて聞きました。少し調べてみます。
>>説明不足だったようです。その中断メソッドを特定のキー入力で起こすのが目的なのです。
なるほど。
それなら、そのコントロールとは別のスレッドを作り、そこでキーを監視して、
キーが押されたら、そのスレッドからコントロールの中断メソッドを呼び出す。
って感じにすればいいと思います。
その時の注意点としては、そのコントールがMTAに属してるなら、
そのスレッドで使うインターフェイスは生でもいいけど、
STAならマーシャシングが必要って事で。
追記
もちろん、その作ったスレッドにも CoInitializeEx で
アパートメントを与えてやる必要がありますよ。