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
[58155] Re:캡션바를 없앴을때의 문제점..
장성호 [nasilso] 1660 읽음    2009-08-24 16:02
원래 그랬었나?
저도 왜 안되는지 언제부터 안되는지 잘모르겠네요..

하지만 님께서 원하시는 기능은 ... 다음과 같이 구현할수 있습니다.

그전에 먼저 질문이 있는데  Builder버젼이 2006이상이시죠?
VCL에서는 TaskBar에 나타나는 버튼이 메인폼의 버튼이 아닙니다.
Application->Handle이죠

방법1


하지만 2006인가 2007인가 부터는 메인폼이 TaskBar에 나타날수 있도록 할수 있는데요
님의 경우 그렇게 된것 같구요
메인폼이 아닌 Application->Handle이 TaskBar에 나타나면 메인폼의 BorderStyle = bsNone 이라도
Taskbar에 세스템 메뉴가 타나납니다.


project1.cpp 파일에서 다음과 같이  하면...


   Application->MainFormOnTaskBar=false;
   SetApplicationMainFormOnTaskBar(Application, false);
   Application->Initialize();



방법2
   다음 방법은 대부분의 vcl버젼에 적용될것인데요
   디자인 타임에 Form의  BorderStyle = bsNone 으로 하구요
  
   다음과 같이 ..
// bsNone 때문에 사라진 System메뉴를 다시 살려주는 것이죠
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
    TForm::CreateParams(Params);
     Params.Style |= WS_SYSMENU;
}


방법3
  아니면 BorderStyle 을 bsNone으로 하지말고 아무렇게나 두고...
  다음과 같이 해도 됩니다.
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
    TForm::CreateParams(Params);
     Params.Style =  WS_POPUPWINDOW  & (~ WS_BORDER);
}
</pre>

방법4

그리고 또 다름과 같이 그냥 BorderStyle을 건들지 않고 하는 방법도 있습니다.
Form의 OnShow이벤트에서 ...
//CreateWindow하고 난뒤에 SetWindowLong으로 style을 바꾸는 방법입니다.

void __fastcall TForm1::FormShow(TObject *Sender)
{
    if( BorderStyle == bsNone)return;

     int Style = GetWindowLong(Handle, GWL_STYLE);
    SetWindowLong(Handle, GWL_STYLE, Style & (~WS_CAPTION ) & (~WS_BORDER) &(~WS_DLGFRAME));
    Height = Height - GetSystemMetrics(SM_CYCAPTION);
    this->Refresh();
    return;

}


기타...
  그밖에도 윈도우를 짤라버리는등  여러가지 방법이 있을수 있겠네요

그럼..


나그네 님이 쓰신 글 :
: BorderStyle = bsNone으로 설정하면
: 캡션바가 사라진 윈도가 됩니다. 근데 여기서 문제가 생깁니다.
:
: 태스크바에서 마우스 오른클릭을 하면 모든 윈도우는 기본팝업(이동, 크기조정, 최소화, 최대화, 닫기)이 뜨는데
: BorderStyle = bsNone일경우는 팝업이 뜨지 않는군요.
:
: 그래서 BorderStyle = bsNone을 하지않고
: //---------------------------------------------------------------------------
: void __fastcall TForm1::CreateParams(TCreateParams &Params)
: {
:     TForm::CreateParams(Params);
:     Params.Style &= ~WS_CAPTION;
: }
: //---------------------------------------------------------------------------
: //---------------------------------------------------------------------------
: class TForm1 : public TForm
: {
: __published:    // IDE-managed Components
: private:    // User declarations
: public:        // User declarations
:     __fastcall TForm1(TComponent* Owner);
:     void __fastcall CreateParams(TCreateParams &Params);
: };
: //---------------------------------------------------------------------------
: 코딩을 했더니... 캡션바가 사라지지 않고 그냥 보이네요.
: 예전에는 사라졌었는데.. 쩝~ 뭔가 바뀐듯
:
: 암튼... 캡션바를 없앤후에 태스크바에서 기본윈도 팝업이 뜨게하는 방법좀 부탁드립니다.

+ -

관련 글 리스트
58151 캡션바를 없앴을때의 문제점.. 나그네 931 2009/08/24
58155     Re:캡션바를 없앴을때의 문제점.. 장성호 1660 2009/08/24
58159         감사합니다. 도움이 되었습니다. 나그네 764 2009/08/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.