カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

Windowsフォームアプリケーション(MFCバージョン)

このセクションでは、Visual Studiuo 2008を用いて、MFCで動作するアプリケーションを作成します。利用する言語は、伝統的なC++「Native C++」です。

新しいプロジェクトを作成する

メニューから、ファイル(F) -> 新規作成(N) -> プロジェクト(P) を選び、「新しいプロジェクト」ダイアログを開きます。C++を利用するので、プロジェクトの種類(P)から「Visual C++」を選択します。右側のペインには、開発可能なテンプレート一覧が表示されます。

新規プロジェクト作成に必要な項目は、プロジェクト名(N)・場所(L)・ソリューション名(M)の3箇所です。

プロジェクト名(N)は、アプリケーションの名前と考えて良いでしょう。ここで設定した名前がデフォルトのアプリケーション名になります。ソリューションとは、プロジェクトの入れ物です。一つのアプリケーションを複数のプロジェクトに分割して開発したり、複数のアプリケーションをまとめて管理するなど、いろいろな運用が可能です。「ソリューションのディレクトリを作成(D)」をチェックすると、ソリューション名(M)のディレクトリが作成され、その下に関連するすべてのファイルが作成されます。チェックをはずすと、場所(L)で指定されたディレクトリの下に関連するファイルが作成されます。

.NET Frameworkのバージョン設定は、MFCアプリケーションでは関係ありません。

テンプレートの選択

プロジェクトの種類(P)で、Visual C++の下のMFCをクリックします。右側のペインにMFC環境で選択可能なテンプレートが表示されます。ここでは、MFCアプリケーションを選びます。

プロジェクトを作成する

プロジェクト名(N)をここでは「PlaySoundMFC」とします。ソリューション名は「SoundApp」とし、ソリューションのディレクトリを作成(D)にチェックを入れます。場所(L)は、デフォルトで構いませんが、特に設定したい場所があれば設定してください。入力が終わったら、OKボタンをクリックします。

これで場所(L)で示されたディレクトリにSoundAppというサブディレクトリが作成され、その中にソリューションが作成されます。そして、SoundAppの下にPlaySoundMFCという名前のプロジェクトが作成されます。

MFCアプリケーションウィザード

MFCを利用するアプリケーションは、プロジェクトの詳細を設定するために、初期設定を行う必要があります。プロジェクトを作成した後、自動的にアプリケーションウィザードが起動します。

次へをクリックします。

今回は、ダイアログベースのアプリケーションを作成するので、ダイアログベース(D)をチェックします。その他は、そのままで構いません。

筆者は、Native C++を使うときは、ユニコードを使わない習慣が付いるので、「UNICODEライブラリを利用する」はチェックしませんが、今回作成するサンプルでは、チェックしておいてください。

設定が終わったので、完了をクリックします。これ以降、さらに詳細な項目がありますが、今回は変更する必要が無いので、この画面で完了をクリックします。

こでで以下の様な画面になっているか確認してください。なっていれば、準備完了です。

画面を作成する

最初に「TODO:ダイアログのコントロールをここに配置」というテキストコントロールを削除します。コントロールを選択してDeleteキーを押すか、マウスの右ボタンをクリックし、コンテキストメニューから削除(D)コマンドを実行します。

このプログラムでは、キャンセルボタンは利用しないため、ここで削除しても構いません。

次に、ダイアログの大きさを手ごろなサイズに設定します。サンプルの例では、181×81に設定しました。OKボタン・キャンセルボタンを左上のじゃまにならない位置に移動させた後、ダイアログ右下の小さな四角をドラッグしてのサイズを調整します。ダイアログのサイズは、フッターの右側に表示されます。サイズが決まったら、キャンセルボタン、次いでOKボタンを所定の位置に移動させます。

ダイアログが表示されていないときは、以下の手順でダイアログを表示させることができます。

メニューの表示(V)から、その他のウィンドウ(E)->リソースビュー(R)を選択します。

リソースビューが表示されたら、Dialogフォルダーの下にある「IDD_PLAYSOUNDMFC_DIALOG」をダブルクリックします。

コントロールを配置する

ツールボックスの「EditControl」を選択し、ダイアログ画面をクリックします。ツールボックスからダイアログ画面にコントロールをドラッグ&ドロップすることもできます。

もし、ツールボックスが表示されていないときは、メニューの表示(V)からツールボックス(X)を選択してください。

その後、コントロールを使いやすい位置とサイズに変更します。位置の変更は、マウスでコントロール全体をドラッグします。コントロールの端をつかんでドラッグすると、サイズを変更することができます。

次に「Button」を選択し、ダイアログ画面にドロップします。

ボタンのサイズを14×14に変更し、エディットボックスの右側に配置します。

プロパティ画面から、ボタンのキャプションを3点リーダー「…」に変更します。このボタンでファイルダイアログを開きます。

同様の方法でプレイボタンを配置し、キャプションを「Play」とします。

画面の設計は、これで終わりです。

メンバー変数を関連付ける

ここでエディットボックスの文字列を読み書きするために、コントロールに変数を関連付けます。エディットボックスをクリックし、選択された状態にします。メニューのプロジェクト(P)から、変数の追加(B)を選択します。以下のダイアログが表示されます。カテゴリ(T)をValueに変更し、変数の種類(V)が、CStringになっていることを確認してください。そして、変数名(N)の欄に「m_strFilePath」と入力します。入力が終わったら、完了ボタンをクリックします。(完了ボタンは画面の下に隠れていますが、画面をスクロールすると表示されます。)

イベントを関連付ける

次にボタンをクリックしたとき、サービス関数がコールされる仕組みを作ります。

ファイルダイアログ

最初に、ファイル選択ダイアログ用ボタン(エディットボックス右に配置したもの)を選択します。

プロパティビューが「IDC_BUTTON1」を表示していることを確認します。次に、プロパティビューの上にある黄色の雷を模したボタンをクリックします。このボタンをクリックすると、コントロールに関連するイベントを設定することができます。ここでは、ボタンをクリックしたとき、イベントを発生させたいので「BN_CLICKED」を選択します。

次に、BN_CLICKEDの欄の右側にあるボタンをクリックします。追加する関数の候補が示されるので、「OnBnClickedButton1」をクリックします。

OnBnClickedButton1関数の雛形が追加され、ソースコードが表示されます。

OnBnClickedButton1関数を次のように実装します。

void CPlaySoundMFCDlg::OnBnClickedButton1()
{
    CFileDialog dlg(
        TRUE,       // FileOpen
        L".wav",
        L"",
        0,
        L"WAVファイル (*.wav)|*.wav|All Files (*.*)|*.*||",
        this);

    if (dlg.DoModal() == IDOK)
    {
        m_strFilePath = dlg.GetPathName();
        UpdateData(FALSE);
    }
}

文字列の頭にある「L」は、この文字列がユニコードであることを示します。プロジェクトを作成するとき、「UNICODEライブラリを利用する」をチェックしなければ、この「L」は必要ありません。

CFileDialog関数は、ファイルパスを指定するダイアログです。引数の意味は以下のとおりです。

  1. TRUE:ファイルオープン、FALSE:ファイルセーブ
  2. デフォルトのファイル拡張子
  3. デフォルトのファイルパス
  4. オプションフラグ
  5. ファイル拡張子のリスト
  6. 親ウィンドウのハンドル

DoModal()関数でダイアログを表示します。OKボタンでダイアログを終了すると、「IDOK」が戻ります。GetPathName()関数でファイルパスを取得し、エディットボックスの変数へ代入します。UpdateData(FALSE)関数で、変数の値をコントロールへ反映させます。

プレイボタン

同様のやり方で、プレイボタンの実装を行います。ダイアログのプレイボタンを選択します。プロパティビューが「IDC_BUTTON2」を表示していることを確認します。プロパティビューのイベントボタンをクリックし、「BN_CLICKED」を選択します。

OnBnClickedButton2関数の雛形が追加され、ソースコードが表示されます。

OnBnClickedButton2関数を次のように実装します。

void CPlaySoundMFCDlg::OnBnClickedButton2()
{
    PlaySound(m_strFilePath, NULL, 0);
}

PlaySoundのリンク

この状態でコンパイルすると、PlaySound()関数が見つからないというエラーが出ます。この関数は、"mmsystem.h"で定義されているので、"stdafx.h"の中でインクルードします。

そしてマルチメディア関連のライブラリを収めた"winmm.lib"を忘れずにリンクします。winmm.libをリンクし忘れると、リンクを行ったとき、PlaySound()関数が見つからないというエラーが出ます。リンクを含める方法を以下に示します。

メニューからプロジェクト(P)->PlaySoundMFCのプロパティ(P)を選択します。

まず、左のペインでリンカの入力ページを開きます。構成プロパティからリンカの入力へと進みます。構成(C)からすべての構成を選びます。そして、追加の依存ファイルの欄に「winmm.lib」と入力します。OKボタンをクリックします。

以上でプログラムは完成です。コンパイルして実行してみてください。

実行

ファイルダイアログを開き、演奏させたいWAVファイルを選びます。ファイルパスがエディットコントロールに表示されます。プレイボタンをクリックして再生します。

PlaySoundについて

短いサウンドでは気が付かないかも知れないので、できるだけ長いサウンドを演奏して見てください。演奏中は、すべてのボタンが操作不能になります。PlaySoundは、演奏が終わるまで制御を戻しません。そのため、すべてのメッセージ処理が停止し、アプリケーションがフリーズしたようになります。

PlaySoundは簡易に利用でき、便利な関数です。しかし上記のようにスレッドをブロックするため、ウィンドウのメッセージループの中で使うべきではありません。もし利用する場合は、ごく短い警告用のサウンドに留めるべきでしょう。

このセクションでは、初めてのサンプルということで、PlaySoundを用いました。本編の解説では、サウンドを自由に、様々な形態で再生する技術について解説します。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ