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
[16194] [질문] 최상위 윈도우 만들기
^^ [] 1786 읽음    2002-03-11 15:07
C Builder가 폼에 대하여 기본적으로 최상위 윈도우를 만들 수 있도록 지원하고 있죠 ?
그런데, 문제는

    TFormDoc *formDoc = new TFormDoc (Application);
    // TFormDoc 윈도우는 자동생성되지 않도록 프로젝트에서 선택해둠

이와같이 할 때, 문제가 발생합니다.
기본적으로,
void __fastcall TFormDoc::CreateParams (TCreateParams& Params)
{
      TForm::CreateParams(Params);
      Params.ExStyle |= WS_EX_TOPMOST;
}

이렇게 하면 최초 생성되는 폼은 아무런 문제가 없는데, 문제는 최상위윈도우를 토글해 주어야 할 때나, 두번째 생성되는 폼부터 발생합니다. 정상적으로 최상위 윈도우로 처리가 되지를 않네요.
void __fastcall TFormDoc::PMenuDocOnTopClick(TObject *Sender)
{
    PMenuDocOnTop->Checked = ! PMenuDocOnTop->Checked;
/*
    if ( PMenuDocOnTop->Checked )   FormStyle = fsStayOnTop;
    else                            FormStyle = fsNormal;
*/
    if ( PMenuDocOnTop->Checked )
        BringWindowToTop (Handle);
    SetWindowPos (Handle,
                  PMenuDocOnTop->Checked ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE);
}

위와 같이 FormStyle에 의한 처리나 SetWindowPos API에 의한 처리, 모두 최상위윈도우로 변경하여 주지를 않네요. 이걸 실행시키고나서, 다른 윈도룰 클릭하면 제가 최상위윈도우로 만든 것 위에 나타나내요. 즉, Z-Order상에 최상위윈도우로 등록되지 않았나 봅니다. (제 생각에는 C Builder가 child window를 관리해 주지 않아서 발생하는 문제인 것 같습니다.)

이런 문제에 부딪쳐 보신 분 계신가요 ?
해결책을 아시는 분은, 좀 알려 주세요.

좋은 하루 되세요.

+ -

관련 글 리스트
16194 [질문] 최상위 윈도우 만들기 ^^ 1786 2002/03/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.