前田稔(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;
}
|
![]()