スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 使いそうなコードを集めた | トップページ | 強調表示も入れてみる? »

主要処理の実装は完了

今は、Mirror-DTC/AmuseGraphics用の追加提供ソフトとして、Mouseクリック エフェクターを作っているのだが、今日は、作者製の既存ソフトから持ってきた処理コードを組み合わせて、主要処理が動作する様にした。今日の時点でマウスを監視したエフェクトは出来る。

Mouseクリック エフェクターの主要処理というのは、マウスのクリック状況の監視と、クリックされたら、マウスポインター周辺に描画を行う、という処理になる筈だ。

で、OSのAPI的には、マウスボタンのOn/Off状態をチェックする関数もあった筈なのだが、そういうAPIを使う事を前提にすると、常時、マウスボタンの状態をチェックし続けないといけなくなる。

なので、普通は、もっと効率的な方法は無いモノか、と、考える筈なのだが、Windowsプログラミングを少しカジッただけの初心者的には、マウスのクリックイベントはLButtonDownだとかUPだとかのWindowsのメッセージで送られてくるから、そのメッセージ処理関数を作成すれば、マウスのクリック状態はイベントとして把握可能だ、と、思うかもしれない。

しかし、実際の所、上記の様なメッセージはウインドウに対して送られてくるモノなので、自分が表示しているウインドウだとかダイアログ以外のウインドウやダイアログに対してクリックが発生しても、メッセージは飛んでこない。

と、いう事なので、PC全体のマウスクリックを監視しなければならないMouseクリック エフェクターでは、そんなメッセージを監視用に使う事は出来ない。

なので、Windowsプログラミングを少しカジッただけの初心者的には、結局、PC全体のマウスのクリック状態を監視したければ、前述のAPIを使って高速なポーリングを行うしかない、と、結論付けるかもしれないのだが、Windowsには、Hookという文化もある訳だ。

つまり、Mirror-DTC クライアントでは、長らく、このHookという文化を利用して、OSのシステム上で発生したキーボードイベントを横取りして、その内容を通常の使われ方ではなく、サーバーへのキー送信用に利用する、という処理を行ってきた訳だ。

Windowsでは、同様に、マウス入力についても、上記の様なHookが可能で、Mirror-DTC Ver1.4.0のDTCServiceでは、サーバーのローカル環境でのキーボード/マウス入力を無効化できるオプションを追加したのだが、このオプション機能を実現するにあたっては、前述のキーボード入力に加え、マウス入力に対するHookも利用した。

つまり、OSのシステム上で発生したマウスイベントも横取りして、本来、そのイベントが発生したメッセージを貰う筈のウインドウにそのメッセージが届かない様にする事で、マウス操作を出来なくした訳だ。

と、いう事で、作者的には、既に、マウスイベントを横取り出来る処理コードも持っていた訳なので、Mouse クリックエフェクターでのマウス監視には、このコードを使っている。

なので、マウスの状態を監視する為に、前述の様な、普通は、1コア分のCPU性能を消費してしまう事を覚悟しなければならない様なポーリング処理は必要ない。

Mouseクリック エフェクターで、次に問題になるのは、普通のウインドウでは、マウスポインター周辺に波紋等のアニメーション表示を行う事は出来ない、という事になる。

つまり、Windowsでのウインドウというのは、必ず四角形でなければならないし、普通はタイトルバーだとかメニューバーなんかも存在している訳だ。

なので、こんなウインドウにグラフィックスを表示してみても、Mouseクリック エフェクターに期待される様な描画は行えない訳なのだが、作者的には、AG-デスクトップレコーダーなんかでも、画面上に、録画領域指定用の枠を描いたりしている。

つまり、既に、普通じゃないウインドウを作るための処理コードも持っていた訳なので、Mouseクリック エフェクターでは、こういったウインドウの作成用のコードも他プログラムから流用してきている訳だ。

と、いう事で、Mouseクリック エフェクターを作ろうとすると、普通のWindowsソフトを開発するのに必要になるコード以外に、マウスクリックを監視する処理コードと特殊なウインドウ描画が行えるコードが必要になるのだが、作者的には、既に、それらの持ち合わせがあったので、Mouseクリック エフェクターの開発も容易だった訳だ。

なので、作る事にした訳なのだが、前述の様に作者的には、Mouseクリック エフェクターの基本処理を作るにあたっては、何ら苦労していないので、もう少し、面白いモノにしようか、と、思ったりもしている訳だ。

具体的には、クリックされた場合のアニメーション描画には、ユーザーが作成するアニメーションgifファイルも指定可能にし、クリック時にはアニメーション描画以外に音声も再生出来る様にしつつ、その音声にもユーザーが作成するWavファイルを指定可能にしようか、としている。

もっとも、今日の時点で、既に、デフォルトアニメーションと音声再生以外に、アニメーションgifファイルを使ったアニメーション表示と、Wavファイルを使った音声再生、も、可能になっているので、後は、これらの指定方法をどうするか、という段階になっている。

と、いう事なので、まあ、明日中くらいには、Mouseクリック エフェクターについても、大体の形は出来上がっているかもしれない。

« 使いそうなコードを集めた | トップページ | 強調表示も入れてみる? »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/67158844

この記事へのトラックバック一覧です: 主要処理の実装は完了:

« 使いそうなコードを集めた | トップページ | 強調表示も入れてみる? »

2018年11月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google