C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[4] 팁! 어플리케이션을 최소화상태로 유지하기
박지훈.임프 [cbuilder] 9927 읽음    1999-06-04 00:00
임펠리테리입니다.
며칠 팁을 쉬었군요. 죄송합니다.

오늘의 팁은, 어플리케이션을 작업표시줄에 따악~ 엎드린 상태로 안튀어나오게
만드는 겁니다. 작업표시줄에는 나타나야하지만 메인폼을 보여주면 안될 경우
써먹으면 되겠죠?

이 팁의 주인공은 WM_QUERYOPEN 메시지입니다. 이 메시지는 최소화되어있는 어플을
클릭하거나 해서 원래의 윈도우로 복원시키려 할때 발생합니다. 요 메시지를
잡아먹어(?) 버리면 작업표시줄의 아이콘(달라붙어있는 어플의 바)를 클릭해도
아무일도 안생깁니다. 이런 처리를 위해서는, 폼에 들어오는 메시지중 WM_QUERYOPEN
메시지만 무시하도록 메시지 핸들러를 만들어버리면 됩니다. 방법은 강좌에서도
언급한 메시지맵을 사용하도록 합시다.
다음은 폼 클래스내의 protected: 섹션에(다른 섹션에 해도 큰 문제는 없습니다만
프로텍티드로 하는 것이 일반적입니다. 왜 그런지를 잘 이해하시지 못하신다면
짬을 내셔서 클래스를 다시한번 공부해보시는게 좋겠습니다.) 추가합니다.

void virtual __fastcall WMQueryOpen(TMessage& Msg);

그리고 폼의 생성자가 있는 public: 섹션의 가장 마지막에, 그러니까 클래스선언을
끝내기 직전부분에 다음과 같은 메시지맵을 작성합시다.

BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_QUERYOPEN, TMessage, WMQueryOpen)
END_MESSAGE_MAP(TForm)

그럼, 이제 폼의 유닛 파일에 메시지핸들러를 정의해주면 되겠죠?
내용은 무식합니다.

void __fastcall TForm1::WMQueryOpen(TMessage& Msg)
{
    Msg.Result = 0;
}

더럽게(?) 무식하죠? ^^ 이 메시지핸들러의 역할은, WM_QUERYOPEN 메시지가 들어
왔을때 그걸 꿀꺽~ 삼켜버리는 겁니다. 그러니 당연히 폼은 리스토어 되지 않겠죠?

만약 상황에 따라 폼이 복원되어야 할때도 있고 복원되어서는 안될 경우도 있다면
위 메시지핸들러 내에서 if 등으로 검사해주면 되겠네요.

그럼, 모두들 하루 잘 마무리 하시길 바라면서, 이만...

(이 팁은 인프라이즈의 빌더 FAQ를 참고로 하여 작성하였습니다.)




독립문에서 임펠리테리였습니다.


+ -

관련 글 리스트
4 팁! 어플리케이션을 최소화상태로 유지하기 박지훈.임프 9927 1999/06/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.