|
BorderStyle이 지정하는건, Form의 BorderStyle 프로퍼티를 지시하는것 같네요. 만약, 기본적으로 나와있는 타이틀바가 있다면, 그걸 덧붙여 칠할 수는 없습니다. 그 아래로 바로 위치하게 되지요.
그렇기 때문에, 만약 두개 이상의 폼을 활성화 시키고 싶으시다면, 각 폼의 BorderStyle 을 전부 bsNone으로 해놓고, 캡션바를 직접 그려내는 방법이 있습니다.
아래 소스를 해당 Form1 의 캡션을 다시 그려내는 예제인데, bsNone이 아니면, 타이틀바가 두개가 그려지는 현상을 보실 수 있으실껍니다.
HDC dc = GetDC(Form1->Handle);
DrawCaption(Form1->Handle, dc,
&Bounds(0, 0, Width, GetSystemMetrics(SM_CYCAPTION)),
DC_ACTIVE | DC_TEXT);
ReleaseDC(Form1->Handle, dc);
굳이 활성화 시키시려는 이유는 잘 모르겠지만, 어쨌든 복잡한 방법입니다. 직접 이벤트를 잡으셔서 타이틀바를 그려주시고 계산을 해주셔야 할 문제인것 같네요.
주병윤 님이 쓰신 글 :
: MDI application에서 콘트롤바에 도구바를 올려놓고 도구바의 DragKind=dkDock, DragMode=dmAutomatic으로 해 놓으면 도구바를 도킹하여 쓸 수 있습니다. 이때 도구바를 클릭하여 child form을 제어하고 싶습니다. 하지만 도구바를 선택하면 메인폼이 비활성화되고 또 child 폼들도 다 비활성화되더군요.
: 그래서 도킹된 도구바윈도우를 선택하는순간 억지로 메인폼을 포커스시켰습니다.
: 하지만 도킹된 도구바윈도우가 비활성화되어 캡션바 색깔이 비활성화된 색으로 바뀌는데 이것을 활성화된것처럼 하기 위해 SDK의 DrawCaption함수를 이용하여보려고 했습니다. 그런데 잘 안되네요. 어디가 문제인지 잘 모르겠습니다.
: 포럼에 올라온글을 읽어보니깐 DrawCaption함수를 쓰기전에 윈도우의 BorderStyle을 bsNone으로 하라고 했는데 tool bar의 property를 아무리 뒤져봐도 BorderStyle이 없네요.
: 그리고 DC_ACTIVE를 쓰면 활성화된 폼의 색깔로 칠해준다고 하는데 그게 잘 안되네요.
: 며칠째 고생하고 있습니다. 코드를 올려놓을테니 답변부탁드립니다.
:
:
:
: void __fastcall TMainForm::ToolBar1MouseDown(TObject *Sender,
: TMouseButton Button, TShiftState Shift, int X, int Y)
: {
: SetFocus(); //메인폼 포커싱
:
: HDC dc = GetDC(ToolBar1->Handle);
: RECT r;
: r.left = 0;
: r.top = -20;
: r.right = 300;
: r.bottom = 0; //ToolBar1의 left,top,right,bottom은 0,0,300,30임
: HWND hw2 = ToolBar1->Handle;
:
: DrawCaption(hw2, dc, &r,
: DC_ACTIVE |
: DC_TEXT |
: DC_ICON |
: DC_INBUTTON |
: DC_SMALLCAP
: );
:
: ReleaseDC(hw2,dc);
: }
:
|