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
[61717] Re:Re:[질문] OnDestory Event 이후 발생하는 OnResize Event
땅주인 [heaven2] 1069 읽음    2010-06-29 11:35
환경: RAD Studio 2009 ( C++ Builder 2009)

답변 주셔서 감사합니다.

왜 그런 지는 모르겠지만.. OnDestory() 가 진행된 후 OnResize()를 타는 것은 확실한데요..
특이점이라면 MDIMain이라는 것 밖에 없는데요..
각 이벤트의 함수는 아래와 같습니다.

//---------------------------------------------------------------------------
// Form Close Event
void __fastcall TFormMain::FormClose(TObject *Sender, TCloseAction &Action)
{
	// Clear Point List
    m_PointList.ClearAllPoint();

	// Serial port close
    ApdComPort->Open = false;

	// Resource released
	if (m_pFormTest)  { delete m_pFormTest; m_pFormTest = NULL; }

    // Queue Empty
    while ( G_pSoundQueue->Count() > 0 )
    	delete (CSoundMessage *) G_pSoundQueue->Pop();

    m_bSoundThread = false;
    G_pSoundEvent->SetEvent();

    Sleep(100);	// wait until all thread is terminated

    delete G_pSoundQueue;
    delete G_pSoundEvent;
	Action = caFree;
}

//---------------------------------------------------------------------------
// Form Destory Event
void __fastcall TFormMain::FormDestroy(TObject *Sender)
{
	// nothing to do..
//heaven2
OutputDebugString("MainForm FormDestory------------------------------------\n");
}

void __fastcall TFormMain::FormResize(TObject *Sender)
{
	// Main Form Resize Check
    if ( this->Width < MAINFORM_MIN_WEIDTH ) this->Width = MAINFORM_MIN_WEIDTH;
    if ( this->Height < MAINFORM_MIN_HEIGHT) this->Height = MAINFORM_MIN_HEIGHT;

	if ( m_pFormTest != NULL )
    	::SendMessage(m_pFormTest->Handle, WM_SIZE, NULL, NULL);
    if ( m_pFormQuery != NULL )
    	::SendMessage(m_pFormQuery->Handle, WM_SIZE, NULL, NULL);

//heaven2
OutputDebugString("MainForm OnResize-------------------------------------\n");

}
//---------------------------------------------------------------------------



위의 실행 결과는 종료될 때 이런 로그를 찍어 냅니다.

Debug Output: DM Destory-------------------------------------  Process NEOSCORE.exe (2240)
Debug Output: MainForm FormDestory------------------------------------  Process NEOSCORE.exe (2240)
Debug Output: MainForm OnResize-------------------------------------  Process NEOSCORE.exe (2240)

알고보니 죽는 이유는 다른 곳에서이지만.. 이렇게 폼이 Destory된 후에도 OnResize()이벤트를 타는 게 조까
찜찜합니다.

장성호 님이 쓰신 글 :
: 기본적으로 OnDestory 이후에 OnResize이벤트가 발생하지 않는데 왜 발생하죠?
: 이상하네요
:
: bcb6도 rad2007도 Rad2010도 그렇지 않는데.. 2009만 그런가요?
: 2009안써봐서...
:
:
: 그리고 이미 ChildWindow가 없어졌다면 SendMessage로 메세지를 보낸들 받을수 있나요?
: 없어진 윈도우로 SendMessage한다고 해서 ..
: 메세지를 못받으니 아무 의미없는 동작이 될뿐이지 죽지는 않을텐데...
: 죽는다는것 또한 이상하네요
:
: 결론적으로 님의 코드와 아래 설명이 맞지 않느것 같습니다.
:
: 다시 코드와 함께 질문해 봐주세요
:
:
: 앗참 그리고
: Form에는 MDIChildCount와 MDIChildren이라는 프로퍼티가 있습니다.
: 저넘을 통해접근하면 SendMessage를 쓰지 않아도 될듯..
:
: 그럼..
:
:
: 땅주인 님이 쓰신 글 :
: : 환경: C++ Builder 2009
: :
: : MDI Main과 MDI Child 형태로 개발 중인데요..
: : MDI Main Form에서 화면 사이즈이 변화가 일어나면...
: : MDI Child에도 반영되게 하려고.. MDI Main의 OnResize 이벤트에서
: : MDI Child에 SendMessage()로 이벤트를 보내도록 해 놓았는데요...
: : 잘 돌아가기는 잘 되는데..
: :
: : MDI Main에서 프로그램 종료를 시키면 OnDestory()까지 잘 되고..
: : 왜? 왜? 왜.. OnResize()를 다시 한 번 호출을 하는 지..
: : 이미 없어진 MDI Child에 SendMessage를 하니.. 당연히 뒈지십니다..
: :
: : 왜 OnDestory()하고 난 다음에 OnResize()가 발생을 하는 지요?
: :
: : 축구 보느라...
: : 디버깅 하다가 졸다가.. 졸다가 디버깅하고..
: : 오후 내내 디버깅하면서 알아낸 게 이런 현상인데..대체 왜 이렇게 동작하는 지?
: : 설명을 좀...
: :
: : 감사합니다.

+ -

관련 글 리스트
61676 [질문] OnDestory Event 이후 발생하는 OnResize Event 땅주인 973 2010/06/24
61678     Re:[질문] OnDestory Event 이후 발생하는 OnResize Event 장성호 1208 2010/06/24
61717         Re:Re:[질문] OnDestory Event 이후 발생하는 OnResize Event 땅주인 1069 2010/06/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.