マルチディスプレイに対応した適当なスライドショーが見つからなかったため、手始めに単純なスライドショーを作成した。

2007/8/1 18:30 Version 0.1

概要

マルチディスプレイ時に各モニターを全画面表示にできるようにした。下図のようなディスプレイ構成の場合

ファイル・読み込みで表示フォルダを設定すると、ウィンドウ表示時には下図のように表示され

i

ウィンドウ・マルチモニタを選択すると下図のように全画面表示される。

プログラムの説明

 WinMainでメインウィンドウ(WndProc WM_CREATE)からモニター数{ GetSystemMetrics(SM_CMONITORS) }に応じた子ウィンドウ( MyChildProc )を表示する。
 メニューで ファイル・読み込みを選択すると、WndProc IDM_READ メッセージが発生し、GetDir関数よりコモンコントロール( SHBrowseForFolder)を呼び出してフォルダー名を取得する。get_dir_list関数で{ FindFirstFile 、 FindNextFile }でファイル名を取得する。なお サブフォルダに対応するために同じフォルダーを*.*でフォルダーを検索し、もう一度*.jpgでファイルを検索する。フォルダーを検索すると 自分自身を示す [.] と 親フォルダー示す[..]が検索され、それをもとにサブフォルダーとして検索すると無限ループに陥るので[..]は無視するようにしている。ファイル名はリストにて管理している。サブフォルダーが検索された場合は、get_dir_list関数を再帰呼び出しを行う。
 表示するファイル名が取得できたら、SetTimerで表示する時間になったらWM_TIMERメッセージが発生するようにする。
 WM_TIMERメッセージが発生したら、表示する子ウィンドウを決定し、ウィンドウの更新をする。更新によりMyChildProc WM_PAINTメッセージが発生し、GDI+でjpgファイルを表示する。

マルチモニタ(全画面表示)

 全画面表示は、メインウィンドウを仮想ディスクトップサイズに変更(MoveWindow)し、メインウィンドウのスタイルを WS_POPUP(ポップアップウィンドウ),WS_MAXIMIZE(最大)に変更(SetWindowLong)することによって行う。これによりタスクバーや他のソフトから画面を上書きされるのを防ぐ。各モニターへの表示は子ウィンドウをモニタの位置大きさに変更することにより行う。仮想ディスクトップとは下図のようにモニターが2つある場合、そのモニターを囲んでいる外側の四角の領域である。

ESCキーを押すと全画面表示を解除する。ウィンドウスタイルを元に戻し(WS_OVERLAPPEDWINDOW | WS_VISIBLE)、全画面表示前に保存されたウィンドウサイズに変更する。

ソースファイルと実行ファイルのダウンロード

2007/7/15 Version 0.002

サブフォルダーも検索できるようにした。ランダム表示に備えてファイル名全部をリストで保管するようにした。また、フォルダー名にjpgという拡張子がついている場合を無視するようにした。

ソースファイルと実行ファイルのダウンロード

2007/7/14 Version 0.001

フォルダー選択のコモンコントロールで指定されたフォルダーのjpgファイルを1~5秒感覚でスライドショータイプの表示を行う。表示サイズはウィンドウに収まる範囲で拡大して表示する。スライドショーの停止・一時停止等が行える。動作にはGDI+とVisual C++ 2005ランタイムが必要である。

プログラムはVisual C++ 2005 Expressで作成している。

ソースファイルと実行ファイルのダウンロード