#include "StdAfx.h"
#include "disp.h"
#include "d_data.h"


disp::disp(void)
{
static  DEVMODE dispmode; // デバイス構造体
disp_data = gcnew array<d_data^> (1000); //参照クラスの配列の収納場所を作る
     EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dispmode ); //　ディスプレイ解像度のレジストリ保存値を求める

	 old_x_data = dispmode.dmPelsWidth;
	 old_y_data = dispmode.dmPelsHeight;
	 old_perpel = dispmode.dmBitsPerPel;
	 old_hz = dispmode.dmDisplayFrequency;
	 
}


void disp::disp_use(void)
{
			
    //使用できるディスプレイモードの確認 配列に収納
	static DEVMODE dispmode;          // ディスプレイモード
     int disp_no;

	
		disp_no = 0;
		while( TRUE )
		{
			//全モードの列挙
			if( !EnumDisplaySettings( NULL, disp_no, &dispmode ) ) break;
			// リッチテキストに表示する
			disp_data[disp_no]=gcnew d_data;  //重要 クラスの配列の中身の確保
			disp_data[disp_no]->no = disp_no;
			disp_data[disp_no]->x_data =dispmode.dmPelsWidth; // 解像度横サイズ（width x）
			disp_data[disp_no]->y_data =dispmode.dmPelsHeight; // 解像度縦サイズ（hight y）
			disp_data[disp_no]->perpel =dispmode.dmBitsPerPel; // １ピクセル当たりのビット数
			disp_data[disp_no]->hz =dispmode.dmDisplayFrequency; // リフレッシュ周波数
			disp_end_no=disp_no;
			disp_no++;
		}

}
int disp::disp_chang(int width_x,int height_y,int perpel, int frequency_hz){
	static  DEVMODE dispmode; // デバイス構造体
	HDC hdc; // 現在の色解像度を取得するためのデバイスコンテキスト
	hdc = GetDC(NULL); // デバイス構造体を初期化する
	ZeroMemory(&dispmode,sizeof(dispmode));
	dispmode.dmSize = sizeof(dispmode);
	dispmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
	dispmode.dmBitsPerPel = GetDeviceCaps(hdc,BITSPIXEL);
	dispmode.dmPelsWidth = width_x; // 解像度横サイズ（width x）
	dispmode.dmPelsHeight =height_y; // 解像度縦サイズ（hight y）
	dispmode.dmBitsPerPel=perpel;  // １ピクセル当たりのビット数
	dispmode.dmDisplayFrequency =frequency_hz; // リフレッシュ周波数
	ReleaseDC(NULL,hdc);
// ディスプレイモードのチック合格なら解像度変更を行う。
if( ChangeDisplaySettings(&dispmode,CDS_TEST) == DISP_CHANGE_SUCCESSFUL ) {
	ChangeDisplaySettings(&dispmode,CDS_FULLSCREEN);
   return 0;
}
return 1;
}
void disp::disp_old(void){
		static  DEVMODE dispmode; // デバイス構造体
	HDC hdc; // 現在の色解像度を取得するためのデバイスコンテキスト
	hdc = GetDC(NULL); // デバイス構造体を初期化する
	ZeroMemory(&dispmode,sizeof(dispmode));
	dispmode.dmSize = sizeof(dispmode);
	dispmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
	dispmode.dmBitsPerPel = GetDeviceCaps(hdc,BITSPIXEL);
	dispmode.dmPelsWidth = old_x_data; // 解像度横サイズ（width x）
	dispmode.dmPelsHeight =old_y_data; // 解像度縦サイズ（hight y）
	dispmode.dmBitsPerPel=old_perpel;  // １ピクセル当たりのビット数
	dispmode.dmDisplayFrequency =old_hz; // リフレッシュ周波数
	ReleaseDC(NULL,hdc);
// ディスプレイモードのチック合格なら解像度変更を行う。
if( ChangeDisplaySettings(&dispmode,CDS_TEST) == DISP_CHANGE_SUCCESSFUL ) {
	ChangeDisplaySettings(&dispmode,CDS_FULLSCREEN);}


}

/*
	 //----------------------------------------
     //　ディスプレイ解像度の現在の設定値を求める
     //----------------------------------------
    EnumDisplaySettings( NULL, ENUM_CURRENT_SETTINGS, &dev_mode );

    // ディスプレイドライバによっては取得できない場合がある 
    if( dev_mode.dmPelsWidth  == 0 ||
        dev_mode.dmPelsHeight == 0 ||
        dev_mode.dmBitsPerPel == 0 )
    {
        get_current_setting( &dev_mode );
    }
    print( -1, &dev_mode );
    printf( "\tCurrent setting" );

    //----------------------------------------
	//　ディスプレイ解像度のレジストリ保存値を求める
    //----------------------------------------
    EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dev_mode );

    print( -2, &dev_mode );
    printf( "\tRegistory setting" );

*/
