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
[8066] Re:시스템메뉴에 대해서
박지훈.임프 [cbuilder] 2788 읽음    2001-06-09 01:54
임펠리테리입니다.

Tip'N Tricks에 조로님이 올려주신 팁 중에 현재 폼의 X (닫기) 버튼을 활성/비활성 시키는 팁이 있죠.
바로가기 : 73 / [팁]종료버튼 동적으로 disable 시켰다 enable 시키는 방법
이걸 아주 조금만 응용하면 원하시는 동작을 할 수 있습니다. 왜냐하면, 조로님의 팁 자체가 원래 폼의
시스템 메뉴에서 닫기 항목을 활성/비활성시키는 것인데 이것이 폼의 X 버튼과 연결되는 것이기 때문입니다.
이런 시스템 메뉴 조작을 위해서는 윈도우의 핸들이 필요하구요, 조로님의 팁에서는 그냥 Handle, 즉 폼의
윈도우 핸들을 사용했습니다.

원래 윈도우즈에서 작업표시줄에서 오른쪽 버튼을 눌러 나오는 시스템 메뉴는 그 프로그램의 메인윈도우의
시스템 메뉴입니다. 그런데 빌더나 델파이에서는 프로그램의 메인폼이 실제 메인 윈도우가 아니고, 실제
메인 윈도우는 숨겨져 있기 때문에 메인폼의 시스템 메뉴를 암만 조작해도 프로그램의 시스템 메뉴는 반응이
없지요.

그런데 이 숨겨진 메인 윈도우의 핸들은 Application->Handle에 저장되어 있으니까, 조로님의 팁에 쬐끔만
손질을 하면 원하시는 대로 프로그램 자체의 '닫기' 를 비활성화할 수 있는 거지요.

그래서 결론적으로, 프로그램의 '닫기' 메뉴를 비활성화하려면,
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HMENU hMenu = GetSystemMenu(Application->Handle, false);
  EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
  DrawMenuBar(Handle);
}

그리고 다시 활성화하려면..
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  HMENU hMenu = GetSystemMenu(Application->Handle, false);
  EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND&~MF_GRAYED);
  DrawMenuBar(Handle);
}

이렇게 하면 됩니다.

수고하신 조로님의 팁을 살짝 훔쳐다가 생색은 혼자 다 낸거 같아서 쑥스럽네요. ^^;;
그럼 이만...


길드짱 님이 쓰신 글 :
: Application->Minimize();
: 상태에서 오른쪽 버튼을 누르면 시스템 메뉴가 나오지요...
: 그런데...
:
: 시스템 메뉴를 않나오게 할수 있는 방법은 없나요....아니면...시스템 메뉴중...닫기를 사용할수 없게 하고
: 싶은데....어떤방법이 있을지 간단한 소스좀 알려주세요...ㅜ_ㅜ;
:
: 맨날 질문만 해서 지송함다....^^;
:

+ -

관련 글 리스트
8049 시스템메뉴에 대해서 길드짱 1824 2001/06/08
8066     Re:시스템메뉴에 대해서 박지훈.임프 2788 2001/06/09
8111         Re:Re:시스템메뉴에 대해서 길드짱 2053 2001/06/11
8171             Re:Re:Re:시스템메뉴에 대해서 -> 시스템메뉴의 서브메뉴로 팝업메뉴 달기 박지훈.임프 2817 2001/06/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.