2013年5月25日土曜日

フォームアプリケーションで再生



Windows フォームアプリケーションを作成する。
ボタンをひとつ貼り付けてクリックハンドラにコードを貼り付ける

#pragma once

#include <dshow.h>

namespace aviPleayetForm {

 using namespace System;
 using namespace System::ComponentModel;
 using namespace System::Collections;
 using namespace System::Windows::Forms;
 using namespace System::Data;
 using namespace System::Drawing;

 /// <summary>
 /// Form1 の概要
 /// </summary>
 public ref class Form1 : public System::Windows::Forms::Form
 {
 public:
  Form1(void)
  {
   InitializeComponent();
   //
   //TODO: ここにコンストラクター コードを追加します
   //
  }

 protected:
  /// <summary>
  /// 使用中のリソースをすべてクリーンアップします。
  /// </summary>
  ~Form1()
  {
   if (components)
   {
    delete components;
   }
  }
 private: System::Windows::Forms::Button^  button1;
 protected: 

 private:
  /// <summary>
  /// 必要なデザイナー変数です。
  /// </summary>
  System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
  /// <summary>
  /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
  /// コード エディターで変更しないでください。
  /// </summary>
  void InitializeComponent(void)
  {
   this->button1 = (gcnew System::Windows::Forms::Button());
   this->SuspendLayout();
   // 
   // button1
   // 
   this->button1->Location = System::Drawing::Point(13, 228);
   this->button1->Name = L"button1";
   this->button1->Size = System::Drawing::Size(75, 23);
   this->button1->TabIndex = 0;
   this->button1->Text = L"button1";
   this->button1->UseVisualStyleBackColor = true;
   this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
   // 
   // Form1
   // 
   this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
   this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
   this->ClientSize = System::Drawing::Size(284, 263);
   this->Controls->Add(this->button1);
   this->Name = L"Form1";
   this->Text = L"Form1";
   this->ResumeLayout(false);

  }
#pragma endregion
 private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
     IGraphBuilder *pGraph = NULL;
     IMediaControl *pControl = NULL;
     IMediaEvent   *pEvent = NULL;

     // COM ライブラリを初期化する。
     HRESULT hr = CoInitialize(NULL);
     if (FAILED(hr))
     {
      printf("ERROR - Could not initialize COM library");
      return;
     }

     // フィルタ グラフ マネージャを作成し、インターフェイスを問い合わせる。
     hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
      IID_IGraphBuilder, (void **)&pGraph);
     if (FAILED(hr))
     {
      printf("ERROR - Could not create the Filter Graph Manager.");
      return;
     }

     hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
     hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

     // グラフを作成する。 重要 : この文字列をシステム上のファイルに置き換える。
     hr = pGraph->RenderFile(L"E:\\sampleMovie\\avi_divx5_mp3.avi", NULL);
     if (SUCCEEDED(hr))
     {
      // グラフを実行する。
      hr = pControl->Run();
      if (SUCCEEDED(hr))
      {
       // 完了するまで待機する。
       long evCode;
       pEvent->WaitForCompletion(INFINITE, &evCode);

       // 注 : 実際のアプリケーションでは INFINITE を使用しないこと。
       // 無期限にブロックする場合がある。
      }
     }
     pControl->Release();
     pEvent->Release();
     pGraph->Release();
    }
 };
}


プロジェクトの変更

「プロジェクト(P)」→「***のプロパティ(P)」→「構成プロパティ」→「リンカ」→「入力」で 「追加の依存ファイル」を追加
「親またはプロジェクトの規定値から継承」 をチェック


「プロジェクト(P)」→「***のプロパティ(P)」→「構成プロパティ」→「全般」で 共通ランタイム サポートを変更
純粋MSIL共通言語ランタイム(/clr:pure) ⇒ 共通言語ランタイム(/clr)


0 件のコメント:

コメントを投稿