|
VC++ 하다가 이리로 오니 TDialog를 잘 사용하지 않는 것 같습니다. 하긴 TForm TDialog는 거의 동등하군요...
그래도 메인폼 외에는 그냥 Dialog 사용하는 것을 정석으로 여기는 이 인간이 또 여기서도 사용하려고 하는 군요...
Builder는 폼이나 Dialog를 추가하니까?
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 에서
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TOKBottomDlg), &OKBottomDlg); <- 무조건 이렇게 추가하네요
//저는 요것을 지워 버리고 동적으로 아래와 같이 열었다 닫았다 합니다...
//메모리 할당했다. 실행하고 지워 버리고,....
//혹 메모리 할당 해제할 때 메모리 누수가 있다는 말이 있던데... 생각이 잘 안나내요(Builder에서) 지금은 없나 아시는 분 답을 주세요. ㅋㅋㅋㅋ
TOKBottomDlg*dlg;
dlg = new TOKBottomDlg(this);
int ret = dlg->ShowModal();
ShowMessage( IntToStr(ret) ); //저도 값이 계속 2가 나왔다. 확인한다고.. ㅋㅋㅋ
delete dlg;
void __fastcall TComportDlg::BtnOKClick(TObject *Sender)
{
ModalResult = 1; //mrOk ;
//Close();
}
//---------------------------------------------------------------------------
void __fastcall TComportDlg::BtnCancelClick(TObject *Sender)
{
ModalResult = 2; //mrCancel;
//Close();
}
빌더에서 빌더가 정해주는 OK버튼 외에 특정 버튼에는 ModalResult가 추가되어 있지 않습니다. 그러니 자동으로 닫히지 않습니다. 그래서 우리는 Close()를 사용합니다. 그러면 2를 반환합니다... Dialog를 닫을 때 리턴 값을 넘길 때 ModalResult을 사용하면 Close() 사용하지 마세요... 그러면 자기 스스로 Close 합니다....
그리고 값이 넘어갑니다. Close를 사용하면 계속 2를 반환합니다. Close에서 2를 넘겨버리는 것이지요....
이것 알아내는데 ㅎㅎㅎㅎ 20분 걸렸다,.....
이것은 Form에서 오른쪽 마우스해서 View Text를 해서 오리지널 OK버튼을 보니 ModalResult = 1 이것이
들어있는 것을 보고 힌트를 얻었습니다. 호호호호 흐흐흐 빌...더 만만세.... 아잉 짜쯩나......
부산에서 박영목 올렸습니다.
추가)
흑 글을 올리고 보니 박정모() 님 비슷한 것을 올린 것이 있군요.... 검색에서... 제목으로 해서 그랬나 봅니다....
답변은 중복되면 안되는데.... ㅋㅋㅋ 그래도 제것이 좀 상세하군요... ㅋㅋㅋㅋ
//---------------------------------------------------------------------------
|