C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[55558] Re:메인폼 종료하기 질문
장성호 [nasilso] 1178 읽음    2008-12-26 14:39
VCL(Delphi 또는 C++BUilder) 에서는 

시스템 큐에서 Message를 가져와서(GetMessage or PeekMessage)
해당 윈도우프로시져로 Despatch 해주는 루프가 Application 객체에서 담당하고 있습니다.

그런데 Application에서는 MainForm이 Close되면 프로그램을 종료하도록 되어있습니다.

그럼 메인폼은 어떻게 결정될가요?
Application->CreateForm(...); 이런식으로 맨먼저 생성되는 Form이 메인폼이 됩니다.

C++Builder 같은 경우 Projectxx.cpp 파일에 보면 WinMain이 있는데
여기서  Application->CreateForm(..) 으로 맨먼저 생성하는 폼이 메인폼이 됩니다.


결론적으로
VCL에서는 Application->MainForm이 Close되면 어플리케이션 자체가 종료되기때문에
메인폼은 프로그램 끝날때까지 Close하지 말아야 합니다.

음.. 님의 경우에는
Form2를 먼저 띄우는데  Form2가 먼저뜨면 Form2가 메인폼이 되기때문에...
문제가 발생한듯 합니다.

Projectxx.cpp 의 WinMain에서 
Form2를 Create하여 ShowModal을 먼저 하는것이 좋을것 같습니다.
문론 Form2를 Create할때 Application->CreateForm 생성하지 마시고
그냥 new를 사용해서 생성해야 하구요...
대충 다음과 같이...
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
         Application->Initialize();
         TForm2 *frm2=new TForm2(Application);
         frm2->ShowModal();
        // Application->CreateForm(__classid(TMainForm), &MainForm);
         Application->Run();
    }
    catch (Exception &exception)
    {
         Application->ShowException(&exception);
    }
    catch (...)
    {
         try
         {
             throw Exception("");
         }
         catch (Exception &exception)
         {
             Application->ShowException(&exception);
         }
    }
    return 0;
}
//---------------------------------------------------------------------------



그럼...

Terry 님이 쓰신 글 :
: 메인폼에서 셋팅을 하고  확인버튼을 누르면
: 하위 폼이 생성되도록 프로그램을 만들고 있습니다.
: 확인 버튼을 누르면 메인폼을 종료시키고 하위폼만 작동되게 하고싶은데
: 메인폼을 Close시켜버리면 하위폼까지 죽어버리더군요
: 좋은 방법이 없을까요?
:
: void __fastcall TForm2::Button1Click(TObject *Sender)
: {
:     Application->CreateForm(__classid(TMainForm), &MainForm);
:     MainForm->ShowModal();
:     Close():
: }
: //---------------------------------------------------------------------------

+ -

관련 글 리스트
55557 메인폼 종료하기 질문 Terry 1019 2008/12/26
55558     Re:메인폼 종료하기 질문 장성호 1178 2008/12/26
55562         Re:Re:메인폼 종료하기 질문 나그네 1606 2008/12/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.