/*★ Direct Draw で Image を表示 前田 稔 ★*/ #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::DirectDraw; ref class DXDraw : public System::Windows::Forms::Form { Microsoft::DirectX::DirectDraw::Device ^draw; // DrawDevice object. Microsoft::DirectX::DirectDraw::Surface ^primary; // primary destination surface. Microsoft::DirectX::DirectDraw::Surface ^offscreen; // offscreen surface(bitmap loaded). Rectangle dest; public: // Constructor DXDraw() { draw = nullptr; primary = nullptr; offscreen = nullptr; // caption の設定 this->Text = "Dirext Draw"; this->ClientSize = System::Drawing::Size(480, 480); CreateSurfaces(); } void CreateSurfaces() { // DrawDevice を生成 draw = gcnew Device(); draw->SetCooperativeLevel(this, CooperativeLevelFlags::Normal); // primary Surface を生成 SurfaceDescription ^description = gcnew SurfaceDescription(); description->SurfaceCaps->PrimarySurface = true; primary = gcnew Surface(description, draw); // offscreen(Image) Surface を生成 description->Clear(); offscreen = gcnew Surface("C:\\Data\\Test\\emiko_s.bmp", description, draw); } void Draw() { if (primary==nullptr) return; dest = Rectangle(PointToScreen(Point(0,0)), ClientSize); primary->Draw(dest, offscreen, DrawFlags::Wait); } }; //☆ Main() メソッド int main() { DXDraw ^frm; frm = gcnew DXDraw(); if (frm) { frm->CreateSurfaces(); // Create Draw Surfaces frm->Show(); // メッセージループ while(frm->Created) { frm->Draw(); Application::DoEvents(); } } return 0; }