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
[41] 팁! X 버튼 disable 시키기~
박지훈.임프 [cbuilder] 8659 읽음    1999-06-04 00:00
임프랍니다..
오늘도.. 에구.. 바쁜 일에 쫓기다보니.. 간단한 팁 하나만 올리죠.
오늘은.. 캡션바의 오른쪽 끝에 나타나는 버튼들중 종료버튼(X버튼)을 동작하지
않도록 하는 간단한 팁입니다.

사실은.. 이건 무지 간단한건데도.. 흑~ 컨닝입니다. 쩝~
출처는 Tom's Builder Page(http://members.xoom.com/demjen/builder/)입니다.
이 사이트는 몇가지 팁들과 유용한 컴퍼넌트들의 소스를 제공하고 있습니다.
한번씩 들러서 살펴보시기 바랍니다.
유명한 IvoryDraw(다이렉트X 컴퍼넌트죠)도 이 사이트의 주인 아찌 작품입니다.

그럼 본론으로 들어가서.. 어케 X 버튼을 헤까닥 동작 안하게 만드느냐?
방법은, 역시 어제처럼 무지 간단합니다.
윈도우컨트롤이 create될때는 내부적으론 CreateWindowEx()를 호출하게 되는데,
이 함수는 윈도우를생성하는 api 함수죠. 그리고 CreateParams()라는 함수가
윈도우 생성시 그 윈도우에 팁?특성을 전달하게 됩니다.
이 CreateParams()에서는 단 하나의 인자만 받는데, TCreateParams 라는
구조체입니다. 그리고 이 구조체의 WindowClass 멤버는 사실상 api에서 윈도우를
생성할때 쓰는 바로 그 윈도우 클래스가 되구요, 이 WindowClass의 멤버중
style 에 특정 값을 비트연산함으로서 여러가지 윈도우의 특성을 제어할 수
있습니다.

우리가 지금 주목할 것은 이 스타일로 지정할 수 있는 값들 중 CS_NOCLOSE이죠.
윈도우 클래스의 스타일에 CS_NOCLOSE가 포함되면, 우리가 원하는 결과를 얻을
수 있습니다.
그럼, 어떻게 CreateParams()로 전달되는 윈도우클래스의 내용을 중간에
가로채서 값을 변경시켜주는가?

여기서 사용할 수 있는 가장 좋은 해결책은 오버라이딩입니다.
폼클래스의 CreateParams()를 오버라이딩하면, 가만히 입만 벌리고 있으면
TCreateParams 가 인자로 전달되 입안으로 뚝 떨어집니다. 그럼 이렇게
전달받은 TCreateParams의 멤버중 윈도우클래스의 스타일을 적당히 조작한 후,
원래의 CreateParams()를 호출하면 되는거죠.
원래의 함수를 호출하려면, 베이스클래스인 TForm을 명시하여
TForm::CreateParams(Params) 이렇게 하면 되겠죠?

그럼.. 이제 소스를 봅시다.
void __fastcall TForm1::CreateParams(TCreateParams& Params)
{
    TForm::CreateParams(Params);
    Params.WindowClass.style := CS_NOCLOSE;
}


물론 이 오버로딩한 CreateParams()는 폼 클래스 내에 선언해줘야죠.

이걸로 만사 땡입니다. 컴파일해서 실행해보면, 정말 X 버튼이 disable되어있고,
눌러도 아무일도 생기지 않습니다.
이때, 키보드로 알트+F4를 눌러도 종료가 되지 않습니다.

오늘의 팁은 정말 간단했지요?
내용은 간단했지만.. 가능하면 단순한 팁 하나를 갈쳐드리는 것보다는
그 뒷면에 깔린 배경지식을 알려드리려고 애쓰는 임프였습니다.
그런데.. 제대로 이해가 되셨나요? ^^;;;;



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

+ -

관련 글 리스트
41 팁! X 버튼 disable 시키기~ 박지훈.임프 8659 1999/06/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.