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
[54890] Re:MDI 메인폼에서 DLL로 만든 Child 폼이 Close된걸 어떻게 알수있나요?
박지훈.임프 [cbuilder] 1085 읽음    2008-10-15 06:19
Win32 API 헬프에서 보면, MDI 차일드 윈도우가 파괴될 때 MDI 클라이언트 윈도우(메인의 MDI 영역)로 WM_MDIDESTROY 메시지가 보내진다고 써있습니다. 만약 그대로라면, 메인의 ClientHandle의 윈도우 프로시저를 바꿔치우고 WM_MDIDESTROY 메시지가 들어오는지 검사하면 되는데요.

http://msdn.microsoft.com/en-us/library/ms644914(VS.85).aspx

실제로는 안됩니다. 거짓말입니다. WM_MDIDESTROY와 반대인 WM_MDICREATE의 경우 MDI 클라이언트 윈도우로 메시지가 들어와서 검출이 되는데, WM_MDIDESTROY는 메인의 MDI 클라이언트 윈도우로 들어오는 것이 아니라 MDI 차일드 윈도우로 들어옵니다. 생각해보면, 그게 논리적이기도 합니다. (왜 아직도 이 MS 문서들이 업데이트가 안되고 있는지 모르겠습니다)

그래서, 직접 검출해야 합니다. 쉽게 생각할 수 있는 방법은, MDI 차일드 폼의 OnClose 등의 이벤트에서 메인쪽으로 직접 사용자 정의 메시지를 날려주는 겁니다. (메인의 함수를 실행하거나.. 이런 방법은 곤란합니다. MDI 차일드쪽에서 메인폼 클래스를 알아야 하기 때문에, dll에서 메인 유닛을 참조하게 되는 문제가 생깁니다)

물론 이런 방법을 쓰면, dll의 경우 모든 MDI 차일드 dll마다 일일이 이런 코드를 다 추가해줘야 합니다. 그래도 해주면 되긴 됩니다.

하지만 역시 꽤 번거롭기 때문에, 그래서 저는 dll이 아닌 bpl을 씁니다. dll은 C 인터페이스여서 클래스 액세스가 여러가지로 곤란하지만, bpl의 경우 C++ 인터페이스이기 때문에 다른 bpl의 클래스로부터 상속도 가능합니다. 따라서 공통 bpl을 만들고 여기에서 공통 MDI 차일드 클래스를 만들고 위의 코드를 추가한 다음, 실제 MDI 차일드 화면 파일들은 모두 여기에서 상속받도록 만듭니다. 이외에도 업무 개발 화면을 MDI 차일드로 만들게 되면 여러 공통 코드들이 생기는데 역시 마찬가지로 공통 클래스에 집어넣고 상속받으면 아주 깔끔해집니다. 더욱이 모든 MDI 차일드들이 공통 클래스로부터 상속받았기 때문에, 공통 클래스에 필요한 공통 함수나 이벤트, 속성을 추가하고 차일드폼들끼리의 독립성을 최대한 유지하면서도 서로 액세스할 수 있습니다.

그럼...



쏘가리 님이 쓰신 글 :
: MDI 메인폼 Child 폼을 dll로 만들었습니다. 그런데 메인폼에서 child  폼이 종료된걸 알고
: 싶은데 어렵네요. 방법이 없을까요

+ -

관련 글 리스트
54857 MDI 메인폼에서 DLL로 만든 Child 폼이 Close된걸 어떻게 알수있나요? 쏘가리 1215 2008/10/12
54897     Re:MDI 메인폼에서 DLL로 만든 Child 폼이 Close된걸 어떻게 알수있나요? 감사합니다. 많은 도 1081 2008/10/15
54890     Re:MDI 메인폼에서 DLL로 만든 Child 폼이 Close된걸 어떻게 알수있나요? 박지훈.임프 1085 2008/10/15
54896         Re:Re:MDI 메인폼에서 DLL로 만든 Child 폼이 Close된걸 어떻게 알수있나요? 장성호 1409 2008/10/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.