가끔 어떤 프로그램들을 보면 윈도우의 한 부분을 차지하고 그 영역을 침범하지 못하게 하는 프로그램들이 있다.
예를들면 윈도우를 켜면 기본적으로 보이는 작업표시줄이 그 예이다.
익스플로어 같은 윈도우를 전체화면으로 변경해도 작업표시줄 위로 올라가지 않는다. (물론 창모드로 해서 올리면 올릴수도 있지만.. 지금은 전체화면 얘기다.)
이 작업표시줄과 같이 일정 영역을 차지하는 방법이 있다. 그것이 바로 AppBar라는 것.
간단한 예제 소스가 밑에 있다.
C++ Builder 로 제작된 소스지만.. 기본 Win32 API 이므로 C/C++ 어느곳에도 적용할 수 있다.
자! 그럼 계속 코딩에 빠져보자! ;ㅁ;
RECT rc;
void __fastcall TForm1::FormCreate(TObject *Sender)
{ APPBARDATA abd;
abd.cbSize = sizeof(abd);
abd.hWnd = Handle;
abd.uCallbackMessage = WM_USER + 100;
SHAppBarMessage(ABM_NEW,&abd);
abd.uEdge = ABE_BOTTOM;
SetRect(&abd.rc,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
SHAppBarMessage(ABM_QUERYPOS,&abd);
abd.rc.top = abd.rc.bottom - 50;
SHAppBarMessage(ABM_SETPOS,&abd);
MoveWindow(Handle,abd.rc.left,abd.rc.top,abd.rc.right,abd.rc.bottom,TRUE);
rc = abd.rc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{ APPBARDATA abd;
abd.cbSize = sizeof(abd);
abd.hWnd = Handle;
SHAppBarMessage(ABM_REMOVE,&abd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
::MoveWindow(Handle,rc.left,rc.top,rc.right,rc.bottom,TRUE);
}
//---------------------------------------------------------------------------
출처 : 볼랜드 포럼 (
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=35447 )