Direct Draw で Form を表示する

CLI の環境で Direct Draw を使って Form を生成して表示します。
Command Line から簡単に実行できる DirectX の Program を作成します。 (●^o^●)

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. C++/CLI の Direct Draw で Form を生成します。
    DirectX8 から3Dに吸収された Draw 機能ですが、C++/CLI ではまだまだ使うことが出来るようです。 (^_^;
    3Dに比べてプログラミングも容易で描画速度も速いので、3D機能を使わないのであればお勧めです。
    VC++ のプロジェクトで作成すると非常に多くのファイルが自動的に作成されるのですが、今回作成するファイルは drform.cpp の一本だけです。
    DX.BAT ファイルと同じフォルダー(C:\Data\Cpp\DirectX\) に格納して下さい。
    コンパイルと実行の方法は Command Line から DirectX を動かす を参照して下さい。
    ファイル名 説明
    DRForm.cpp Direct Draw
    DX.BAT 「Command Line から DirectX を動かす」から取得
  2. #using で実行に必要な DLL(Dynamic Link Library) をリンクします。
    using namespace は名前空間の設定で、修飾しなくても Class を参照できるようにしています。
        #using <System.dll>
        #using <System.Windows.Forms.dll>
        #using <System.Drawing.dll>
        #using <Microsoft.DirectX.dll>
        #using <Microsoft.DirectX.DirectDraw.dll>
    
        using namespace System;
        using namespace System::Windows::Forms;
        using namespace System::Drawing;
        using namespace Microsoft::DirectX;
        using namespace Microsoft::DirectX::DirectDraw;
        
  3. DXDraw は Direct Draw のフォーム(Window) を生成するクラスです。
    ^draw は Direct Draw のデバイスで ^ はポインタを意味します。
    draw = nullptr; で初期値として null を設定します。
    this->Text = "Dirext Draw"; は caption の設定です。
    Resize と SizeChanged と Paint にイベントハンドラを設定します。
    draw = gcnew Device(); で Direct Draw のデバイスを取得します。
    C++言語では new を使っていましたが、C++/CLI では gcnew を使います。
    SetCooperativeLevel で Windowed Mode に設定して準備の完了です。
        ref class DXDraw : public System::Windows::Forms::Form
        {
            Microsoft::DirectX::DirectDraw::Device  ^draw;
    
          public:
            // Constructor
            DXDraw()
            {
                draw = nullptr;
                // caption の設定
                this->Text = "Dirext Draw";
                this->Resize += gcnew System::EventHandler(this, &DXDraw::DXDraw_SizeChanged);
                this->SizeChanged += gcnew System::EventHandler(this, &DXDraw::DXDraw_SizeChanged);
                this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &DXDraw::DXDraw_Paint);
    
                draw = gcnew Device();
                draw->SetCooperativeLevel(this, CooperativeLevelFlags::Normal);
            }
        
  4. Resize と SizeChanged と Paint のイベントハンドラからは、Draw() メソッドを呼び出します。
    Draw() メソッドでは、本来ウインドウを描画するのですが、今回は何も行っていません。 ヽ(^^ )
        void DXDraw_SizeChanged(Object ^sender, EventArgs ^e)
        {
            Draw();
        }
    
        void DXDraw_Paint(Object ^sender, PaintEventArgs ^e)
        {
            Draw();
        }
    
        void Draw()
        {
        }
        
  5. main() メソッドでは gcnew DXDraw() で Form を生成します。
    frm をパラメータにして Application::Run() を呼びます。 ヽ(^^ )
        int main()
        {
            DXDraw ^frm;
            frm = gcnew DXDraw();
            if (frm)
            {   Application::Run(frm);
            }
            return 0;
        }
        
  6. Command Prompt から実行すると、少し置いて空のウインドウが表示されます。

超初心者のプログラム入門(C/C++)