|
저도 최상위 윈도우 때문에 고민인데.... 좀 이상하고.... 이상합니다....
최상위 윈도우를 항상 위로 고정하는 것은 하겠습니다. 여러분들의 대답처럼....
그런데 문제는 ShowMessage Box와 메인에서 서버 폼을 ShowModal로 열린 상태에서....
어떻게 해서 메인인 최상위로 올라왔다. 그러면 프로그램은 먹통이 되어 버립니다...
왜냐하면 메인폼은 항상 최상위로 유지해야 하기 때문에... 다른 윈도우가 최상위가 되면 감지하고
자기도 최상위가 되어야 하니까? 올라옵니다. 뭐 서버품이 뜰때 최상위 풀고... 메세지 박스 띄우는 것은
ShowMessage 대신에 MessageBox()를 사용하면 되는데..... 프로그램이 좀 크고 약간 복잡한 구석이
있어서... 본의 Error가 뜹니다. 간단히 해보면 어떤 변수의 값을 0으로 나누었을 때 나오는 메세지...
빌더에서 대부분이 이렇게 나오더군요... ㅋㅋㅋㅋ
버튼을 눌러 언떤 변수를 0으로 나누고 Timer로 10초 후에 메인폼을 최상위로 했습니다.
그 다음 프로그램은 먹통입니다. 이것을 막을 방법이 없겠습니다????
그래서 내 앞에 있는 윈도우는 WM_CLOSE 하고 WM_MOVE 하고 하면 어느 정도 되는데...
이게 부작용이 많다는 것입니다..
수야!╋ 님이 쓰신 글 :
: 항상 위에 있기위해서는 FormStyle을 기본적으로 fsStayOnTop 으로 설정해야하는건 아실거 같습니다.
:
: 그러데요 이 작업만으로는 항상 위에 존재하지는 못합니다.
:
: 기본적으로 윈도우라는 윈도우에 윈도우들이 생성되어있는것이지요.?
:
: 윈도우Xp니 하는 기본적인 윈도우라는 큰 윈도우에서 다른 프로그램들의 윈도우들이 있다는거지요
:
: 이는 같은 조건일 경우 나중에 생성된 윈도우를 최종적으로 그리게 되는데요
:
: 그럼 fsStrayOnTop의 윈도우들끼리는 우선순위를 정하게 되어집니다.
:
: 이 우선순위는 어느 윈도우가 더 마지막에 Active 됐었는가 입니다.
:
: 잡다한 설명이네요 ㅋㅋ
:
: 최상위로 선언된 윈도우들끼리는 가려질 수 있다는것을 말씀드린것입니다.
:
: 폼의 이벤트에보면 OnDeactivate 이벤트가 있습니다.
:
: 보통 선택된 윈도우는 타이틀바 부분의 색이 바뀌지요? 파란색으로 바뀌는 순간이 OnActivate
: 회색등으로 바뀌는 순간이 OnDeactivate 입니다.
:
: 그럼 해주실것은? OnDeactivate 가 발생되면 다시 최상위로 뿌려주면 되는 것이지요
:
: 간단한 예제이구요..
:
: 옵션은 헬프를 보셔서 알맞게 설정하시는게 좋을것입니다.
:
: void __fastcall TForm1::FormDeactivate(TObject *Sender)
: {
: SetWindowPos( Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE );
: }
: //---------------------------------------------------------------------------
:
: 보여지는 메시지의 경우에는
:
: MessageBox( Handle, "변경", "나", MB_OK | MB_TOPMOST ); 이렇게 보여지면 되는데요
:
: 메시지 박스도 어차피 윈도우입니다.
:
: 위에서 말씀드린 경우가 그대로 적용이 되지요.
:
: 하지만 Handle 값의 덕택에 Handle이 가르키는 윈도우보다 위에 있게됩니다.
:
: 도움이 되셨는지요.
:
: 3줄의 질문에 대한 답변의 글이 좀 길었군요.
:
: 초보자 님이 쓰신 글 :
: : 항상 위 옵션을 체크한 작업관리자처럼
: :
: : application을 다른 윈도우들보다 위에 있도록 할 수는 없나요?
: :
: : 그리고 application의 메세지 박스도 항상 위 옵션을 주고 싶은데 어떻게 해야하나요?
|