#include <sdkddkver.h> #define WIN32_LEAN_AND_MEAN #include <Windows.h> #include <tchar.h> #include <sstream> typedef std::basic_ostringstream<TCHAR> tostringstream; #include <d3d9.h> #include <memory> template <typename T> struct release_deleter { typedef T * pointer; void operator()(T * p) const { p->Release(); } }; typedef std::unique_ptr<IDirect3D9, release_deleter<IDirect3D9> > d3d_ptr; int APIENTRY _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { // IDirect3D9オブジェクトの生成 d3d_ptr pD3D(Direct3DCreate9(D3D_SDK_VERSION)); // エラーチェック if(pD3D == NULL){ MessageBox( NULL, TEXT("IDirect3D9のオブジェクトを生成できませんでした."), TEXT("失敗"), MB_OK ); return -1; } UINT n = pD3D->GetAdapterCount(); for(UINT i = 0; i < n; ++i){ UINT m = pD3D->GetAdapterModeCount(i, D3DFMT_X8R8G8B8); for(UINT j = 0; j < m; ++j){ D3DDISPLAYMODE DisplayMode; pD3D->EnumAdapterModes(i, D3DFMT_X8R8G8B8, j, &DisplayMode); // EnumAdapterModes()の結果を文字列に tostringstream msg; msg << "Adapter " << i << " : Mode " << j << '\n'; msg << "Format : " << DisplayMode.Format << '\n'; msg << "Width : " << DisplayMode.Width << '\n'; msg << "Height : " << DisplayMode.Height << '\n'; msg << "RefreshRate : " << DisplayMode.RefreshRate << '\n'; /* 結果の表示は大量に出ることもあるのでコメントアウト MessageBox( NULL, msg.str().c_str(), TEXT("結果"), MB_OK ); */ } } return 0; }
こっそり,IDirect3D9オブジェクトの解放をuniqu_ptrにやらせるように変更してみたり.
0 件のコメント:
コメントを投稿