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


| ファイル名 | 説明 | 
|---|---|
| DXForm.cpp | Direct 3D Form | 
| 
    #using <System.dll>
    #using <System.Windows.Forms.dll>
    #using <System.Drawing.dll>
    #using <Microsoft.DirectX.dll>
    #using <Microsoft.DirectX.Direct3D.dll>
    #using <Microsoft.DirectX.Direct3DX.dll>
    using namespace System;
    using namespace System::Windows::Forms;
    using namespace System::Drawing;
    using namespace Microsoft::DirectX;
    using namespace Microsoft::DirectX::Direct3D;
     | 
| 
    ref class CreateDevice : public System::Windows::Forms::Form
    {
        Microsoft::DirectX::Direct3D::Device  ^device;
      public:
        // Constructor
        CreateDevice()
        {
            device = nullptr;
            // Window のサイズを設定
            this->ClientSize = System::Drawing::Size(400,300);
            // caption の設定
            this->Text = "D3D CreateDevice";
        }
     | 
| 
    bool InitializeGraphics()
    {
        PresentParameters ^presentParams = gcnew PresentParameters();
        presentParams->Windowed=true;
        presentParams->SwapEffect = SwapEffect::Discard;
        device = gcnew Device(0, DeviceType::Hardware, this, CreateFlags::SoftwareVertexProcessing, presentParams);
        if (device!=nullptr)    return true;
        MessageBox::Show("Create Direct3D Device Error.");
        return false; 
    }
     | 
| 
    void Render()
    {
        if (device==nullptr)    return;
        //Clear the backbuffer to a blue color 
        device->Clear(ClearFlags::Target, System::Drawing::Color::Blue, 1.0f, 0);
        //Begin the scene
        device->BeginScene();
        // Rendering of scene objects can happen here
        //End the scene
        device->EndScene();
        device->Present();
    }
     | 
| 
    // Window の描画 OnPaint() を override
    virtual void OnPaint(PaintEventArgs ^e) override
    {
        this->Render();    // Render on painting
    }
     | 
| 
    // OnKeyPress() を override
    virtual void OnKeyPress(System::Windows::Forms::KeyPressEventArgs ^e) override
    {
        if ((int)e->KeyChar == (int)System::Windows::Forms::Keys::Escape)
            this->Close();  // Esc was pressed
    }
     | 
| 
    int main()
    {
        CreateDevice ^frm;
        frm = gcnew CreateDevice();
        if (frm)
        {
            if (!frm->InitializeGraphics())
            {
                MessageBox::Show("Could not initialize Direct3D.");
                return 0;
            }
            frm->Show();
            // メッセージループ
            while(frm->Created)
            {
                frm->Render();
                Application::DoEvents();
            }
        }
        return 0;
    }
     | 
