/*★ Direct 3D で Form を表示 前田 稔 ★*/ #using #using #using #using #using #using 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; } public: // OnPaint() から呼ばれる描画処理 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 } }; //☆ Main() メソッド 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; }