///////////////////////////////////////
// SDIウィンドウクラスCSDI定義ファイル
///////////////////////////////////////

class CSDI : public CWND
{
protected:
	HANDLE	m_hMutex;
	char	m_UniqName[MAX_PATH];

public:		//メンバー変数
	MSG			m_Msg;			//ウィンドウメッセージ
	HACCEL		m_Accel;		//Acceleratorの有無
	HWND		m_hDlg;			//IsDialogMessage()使用時に使う

public:		//メンバー関数
	CSDI(char*);
	~CSDI();
	bool InclAccel(LPCTSTR);
	UINT Loop();
	bool IsOnlyOne();			//２重起動防止関数
};

//CSDIのコンストラクター
CSDI::CSDI(char* UName) {

	wsprintf(m_UniqName, "%d", UName);
}

//CSDIのデストラクター
CSDI::~CSDI() {

	if(m_hMutex)
		CloseHandle(m_hMutex);
}

//アクセラレーター
bool CSDI::InclAccel(LPCTSTR Name) {

	if(!(m_Accel = LoadAccelerators(m_hInstance, Name))) {
		MessageBox(NULL, "アクセラレーターの読込に失敗しました",
					"エラー", MB_OK);
		return FALSE;
	}
	else
		return TRUE;
}

//メッセージループ
UINT CSDI::Loop() {

	while(GetMessage(&m_Msg, NULL, 0, 0) > 0) {	//エラーは-1が返る
		//モードレスダイアログがある場合
		if(!IsDialogMessage(m_hDlg, &m_Msg) &&
		//アクセラレーター処理
			!TranslateAccelerator(m_hWnd, m_Accel, &m_Msg)) {
			TranslateMessage(&m_Msg);
			DispatchMessage(&m_Msg);
		}
	}
	return m_Msg.wParam;
}

bool CSDI::IsOnlyOne() {

	m_hMutex = CreateMutex(NULL, TRUE, m_UniqName);
	if (!m_hMutex) 	return FALSE;
	// もしGetLastError()が、ERROR_ALREADY_EXISTSなら、
	// すでにアプリケーションが起動している
	if (GetLastError() == ERROR_ALREADY_EXISTS) {
    //二重起動時の処理
    	return FALSE;
	}
	return TRUE;
}
