// cDialog.cpp: implementation of the cDialog class.
//
//////////////////////////////////////////////////////////////////////

#include "cDialog.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

cDialog::cDialog(){
}

cDialog::~cDialog(){

}

//////////////////////////////////////////////////////////////////////
// Modal Dialog Message Loop
//////////////////////////////////////////////////////////////////////

void cDialog::End(int Result){
	ReturnValue = Result;
	MessageLooping = false;
}

int cDialog::MessageLoop(){
	// 다이얼 로그의 메시지 루프를 돌린다.
	MSG msg;
	// 다이얼로그 상자 안에 있는 메시지만을 받아들인다.
	while(GetMessage(&msg, NULL, 0, 0)){
		if(!IsDialogMessage(&msg)){
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		if(!MessageLooping) break;
	}
	return 1;
}


int cDialog::DoModal(cWindow *_pParent){
	cWindow *pOwner; // 다이얼로그를 가진 윈도우의 소유자

	// Disable Owner Root
	// 부모 윈도우의 루트 윈도우를 찾아 내 불가능하게 만든다.
	if(_pParent){
		pOwner = _pParent->GetTopLevelParent();
		pOwner->Enable(FALSE);
	}

	Create(_pParent);
	Show(SW_SHOW);
	Update();

	MessageLooping = true;
	ReturnValue = -1;

	MessageLoop();

	// Enable Owner Root
	if(pOwner) pOwner->Enable(TRUE);
	if(_pParent) _pParent->SetFocus();

	Destroy();

	return ReturnValue;
}

LRESULT cDialog::Proc(UINT uMsg, WPARAM wParam, LPARAM lParam){
	switch(uMsg){
	case WM_COMMAND:
		switch(LOWORD(wParam)){
		case IDOK:
		case IDCANCEL:
		case IDABORT:
			End(LOWORD(wParam));
			return 0;
		}
		break;
	}
	return DefProc(uMsg, wParam, lParam);
}
