Archive for 7月 30th, 2012

  1. Hello, DirectX(C++/CLI) World!

    Posted on 7月 30th, 2012 by cx20

    Win32 DirectX(C++/CLI)

    DirectX はマイクロソフトが Wnidows 用に開発したマルチメディア処理用 API である。
    .NET Framework 用の DirectX ライブラリとしては、DirectX SDK より入手可能な Managed DirectX がある。
    以下は C++/CLI における Managed DirectX アプリケーション の例となっている。

    ソースコード

    #using <System.dll>
    #using <System.Drawing.dll>
    #using <System.Windows.Forms.dll>
    #using <Microsoft.DirectX.dll>
    #using <Microsoft.DirectX.Direct3D.dll>
     
     
    using namespace System;
    using namespace System::Drawing;
    using namespace System::Windows::Forms;
    using namespace Microsoft::DirectX;
    using namespace Microsoft::DirectX::Direct3D;
     
    public ref class HelloForm : public Form
    {
    public:
        HelloForm()
        {
            this->Size = System::Drawing::Size( 640, 480 );
            this->Text = "Hello, World!";
        }
        bool InitD3D()
        {
            presentParam_ = gcnew PresentParameters();
            presentParam_->Windowed = true;
            presentParam_->SwapEffect = SwapEffect::Discard;
            device_ = gcnew Device(0, DeviceType::Hardware, this, CreateFlags::HardwareVertexProcessing, presentParam_);
     
            InitFont();
     
            return true;
        }
        void InitFont()
        {
            FontDescription fd;
     
            fd.Height = 16;
            fd.FaceName = "MS ゴシック";
     
            font_ = gcnew Microsoft::DirectX::Direct3D::Font(device_, fd);
        }
        void Render()
        {
            if (device_ == nullptr)
            {
                return;
            }
     
            device_->Clear(ClearFlags::Target, Color::Blue, 1.0f, 0);
            device_->BeginScene();
     
            font_->DrawText(nullptr, "Hello, DirectX(C++/CLI) World!", 10, 10, Color::White);
     
            device_->EndScene();
            device_->Present();
        }
    private:
        Device^ device_;
        PresentParameters^ presentParam_;
        Microsoft::DirectX::Direct3D::Font^ font_;
    };
     
    int main( array<System::String^>^ args )
    {
        HelloForm^ form = gcnew HelloForm();
     
        form->InitD3D();
        form->Show();
     
        while (form->Created)
        {
            form->Render();
            Application::DoEvents();
        }
     
        return 0;
    }

    コンパイル方法

    C:¥> cl Hello.cpp /clr ^
         /AI "C:WindowsMicrosoft.NETDirectX for Managed Code1.0.2911.0" ^
         /AI "C:WindowsMicrosoft.NETDirectX for Managed Code1.0.2902.0" ^
         /FU "Microsoft.DirectX.dll" ^
         /FU "Microsoft.DirectX.Direct3D.dll" ^
         /FU "Microsoft.DirectX.Direct3DX.dll" ^
         /link /SUBSYSTEM:WINDOWS /ENTRY:main

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, DirectX(C++/CLI) World!            |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+