#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 件のコメント:
コメントを投稿