2013年9月15日日曜日

動画再生アプリを作ってみた。Part.2

というわけで、バグ改修を実施。

<参考>
■動画再生アプリを作ってみた。



前回の課題を確認。

  1.動画停止中、フルスクリーンが解除される。
  2.フルスクリーン中、「Enter」キーを受け付けない。(通常サイズなら受け付ける)


追加で気付いた点があるので、こちらも修正する。

  3.フルスクリーン中、操作パネルが表示される。
  4.再生中、停止できない。
  5.「Enter」と最大/最小化ショートカットキーが被っていて煩わしい。

先ずは、1.から着手。



1.動画停止中、フルスクリーンが解除される。

[axWindowsMediaPlayer]には、[fullScreen]プロパティがあり、これを「true」にすることで、動画再生中フルスクリーンになる。ただし、動画再生が停止すると、フルスクリーンが解除される。


(1)再生中、フルスクリーン表示となるが...。


(2)再生終了すると、フルスクリーンが解除される。

色々調べた結果、再生中のみ「fullScreen=true」にしてやる必要がある。
次のフローで実装する。

  (1) 「Enter」キー押下後、動画を再生
  (2) [axWindowsMediaPlayer]のコールバック「PlayStateChange( )」にて、動画再生中の場合、「fullScreen=true」にする。

下記ページ参照。

■AxWindowsMediaPlayer.fullScreen property

これで、とりあえず動画再生時に必ずフルスクリーン表示されるようになった。
しかし、動画が終了すると、フルスクリーンが解除されて、画面サイズが小さくなってしまう。

そこで、[Form::WindowState = Maximized]にすることで、画面サイズを常時最大にして誤魔化すことにした。(^^;;;)



2.フルスクリーン中、「Enter」キーを受け付けない。(通常サイズなら受け付ける)

理由は分からないが、「1.」の改修を実施した所、きちんとEnterキーを受け付けてくれるようになった!これは嬉しい誤算である。



3.フルスクリーン中、操作パネルが表示される。

■Yahoo!知恵袋

以下引用。
「ツール→オプション→パフォーマンス→詳細→全画面表示コントロールを表示するのチェックを外せばコントロールが最初から表示されない状態になります。」
確かに表示されなくなった!
ただ・・・。


4.再生中、停止できない。

デバッグ中、コントロールが表示されないのはけっこう面倒。
マウスで画面をクリックすると「一時停止」するが、やっぱりキーボードで止めたい。
「Ctrl+P」で一時停止できるが、なんとなく忘れそう。

ということで、「スペースキー」で停止/再開する機能を追加。

[axWindowsMediaPlayer::playState]を参照することで、停止/再開を切り替える様実装。
ステータス一覧は下記の通り。




■WMPPlayState enumeration


typedef enum WMPPlayState { 
  wmppsUndefined      = 0,
  wmppsStopped        = 1,
  wmppsPaused         = 2,
  wmppsPlaying        = 3,
  wmppsScanForward    = 4,
  wmppsScanReverse    = 5,
  wmppsBuffering      = 6,
  wmppsWaiting        = 7,
  wmppsMediaEnded     = 8,
  wmppsTransitioning  = 9,
  wmppsReady          = 10,
  wmppsReconnecting   = 11,
  wmppsLast           = 12
} WMPPlayState;




5.「Enter」と最大/最小化ショートカットキーが被っていて煩わしい。


「ALT+Enter」でフルスクリーン切り替えが可能だが、「Enter」で動画切り替えとしているため、切り替えの度に動画が変るので煩わしい。

そこで、「ALT+Enter」の場合は動画切り替えを抑止した。

■KeyUp Event of the AxWindowsMediaPlayer Object

以下引用。[nShiftState]を参照することで、ALTが押下されているかチェックできる。
nShiftStateSystem.Int16
A bitfield with the least significant bits corresponding to the SHIFT key (bit 0), the CTRL key (bit 1), and the ALT key (bit 2). These bits correspond to the values 1, 2, and 4, respectively. The shift argument indicates the state of these keys. Some, all, or none of the bits can be set, indicating that some, all, or none of the keys are pressed.

 ・SHIFT 0ビット(0x01)
 ・CTRL 1ビット(0x02)
 ・ALT  2ビット(0x04)



という訳で、一通り完成。
気が向いたらバージョンアップするかもしれない。

1 件のコメント:

  1. 需要があるかどうか分かりませんが、ここにアップしました。

    https://sites.google.com/site/devfac2009/cang-ku/TakepuMediaPlayer_20130916.zip?attredirects=0&d=1

    返信削除