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
[57219] Re:메세지창 팝업 문제에 대해 한번더 질문합니다
장성호 [nasilso] 1420 읽음    2009-06-11 14:35
: 메인 폼이 뜨고. 그위에 차일드폼을 띄우고. 그위에 얼럿이 뜨거나. 세부폼이 한번더뜨고 그위에 얼럿이뜨는
: 그런형식으로 짜여져 있습니다

위 말이 무슨 말인지 잘 모르겠네요...

ShowMessage나 MessageBox를 사용하면
현재 Thead즉 메인쓰레드에서 는 메세지 박스가 Modal 로 뜨는것 아시죠?
메세지 박스를 닫기 전까지는 다른 폼을 선택할수 없습니다.

--------------------------------------------------------------------------------
그리고 중요한 사실한가지가 있는데요
왜 저런 현상이 나타나는가 하니..
VCL에서는  작업표시줄에 나타나는 Application버튼이 메인윈도우 핸들에 해당하는 버튼이 아닙니다.
(2005이상에서는 조절 가능)

작업표시줄에 나타나는 버튼은 Application->Handle입니다.
VCL에서 만든 모든 폼은 Application->Handle을  Params.WndParent 으로 가지게 됩니다.
메인폼이나 다른 폼이나 모두  Application->Handle을 WndParent로 가지게 되는것입니다.

만약 sub-form의 WndParent는 메인폼->Handle로 되면
sub-form은 항상 메인폼 앞에 만 오죠(2005이상에서는 옵션으로 가능합니다.)


Win32API MessageBox는
http://msdn.microsoft.com/en-us/library/ms645505(VS.85).aspx
첫번째 인자가 HWND입니다.

MessageBox(..ActiveForm->Handle , ...) 이렇게 하면 되게죠..

그리고 아래 child 의 변경은
   Params.WndParent = GetDesktopWindow();
child폼을 작업표시줄에 버튼이 나타나게 하기 위한것 같네요.

그럼...


조안 님이 쓰신 글 :
: 이전 글 : http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=57169
:
: 답해주신 장성호님 감사합니다.
:
: 장성호님 말씀대로 시도해보다가. createparams 에서
:
:
: void __fastcall TfrmF_014::CreateParams(TCreateParams &Params)
: {
:     TForm::CreateParams(Params);
:     Params.ExStyle = WS_EX_APPWINDOW;
: //    Params.WndParent = GetDesktopWindow(); //Before
:     Params.WndParent = Screen->ActiveForm->Handle; //After
: }

:
: Before 를 After 로 고쳐서 해결보았습니다.
:
: 그러나 여기서 문제가 발생했습니다
:
: 메인 폼이 뜨고. 그위에 차일드폼을 띄우고. 그위에 얼럿이 뜨거나. 세부폼이 한번더뜨고 그위에 얼럿이뜨는
: 그런형식으로 짜여져 있습니다
:
: 그러나 createparams 를 고치니 차일드 폼에 액티브가 가있는상태에서 메인폼에 액티브를 줘도, 스크린폼이 뒤로가지 않아 메인폼을 확인할수가 없더군요.(한마디로 차일드폼이 stay on top 이 되어있는 것과 같이 동작)
: 물론 모든 폼의 FormStyle 은 fsNormal 입니다.
:
: 참고로 메인폼은 createparams 를 코딩하지 않았습니다.
:
: 게다가 페어런트를 액티브폼으로 바꿔주었는데도. 차일드폼에서 띄운 메시지창이 다른 차일드폼에 의해서 가려졌을때,
: 메인창을 선택해야만 (윈도우 바 or Alt+Tab) 메시지창이 뜨고, 메시지창을 띄운 차일드폼을 선택해도
: 메시지창이 뒤에있게됩니다.
:
:
: 페어런트 설정에서 뭔가 잘못이 있었는건지. 순서의 잘못인지. 잘모르겠네요
:
: 또다시 염치불구하고 질문을 드립니다. 도와주세요 ^^

+ -

관련 글 리스트
57217 메세지창 팝업 문제에 대해 한번더 질문합니다 조안 1677 2009/06/11
57219     Re:메세지창 팝업 문제에 대해 한번더 질문합니다 장성호 1420 2009/06/11
57220         Re:Re:메세지창 팝업 문제에 대해 한번더 질문합니다 조안 1441 2009/06/11
57226             Re:Re:Re:메세지창 팝업 문제에 대해 한번더 질문합니다 장성호 1778 2009/06/11
57231                 Re:Re:Re:Re:메세지창 팝업 문제에 대해 한번더 질문합니다 조안 1460 2009/06/12
57233                     Re:Re:Re:Re:Re:메세지창 팝업 문제에 대해 한번더 질문합니다 장성호 2758 2009/06/12
57234                         Re:Re:Re:Re:Re:Re:메세지창 팝업 문제에 대해 한번더 질문합니다 조안 1751 2009/06/12
57236                             Re:Re:Re:Re:Re:Re:Re:메세지창 팝업 문제에 대해 한번더 질문합니다 장성호 1989 2009/06/12
57237                                 Re:Re:Re:Re:Re:Re:Re:Re:메세지창 팝업 문제에 대해 한번더 질문합니다 조안 2361 2009/06/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.