|
항상 위에 있기위해서는 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의 메세지 박스도 항상 위 옵션을 주고 싶은데 어떻게 해야하나요?
|