|
빌더6 등 어떤 버전에서도 되게, API로 구현함.
// 폼 화면이 제작할 때 위치 값으로 나오는데,
// 사용자의 모니터가 제작할 때의 위치로 나타나지 않는 사태를 막기 위해
// 화면을 벗어나지 않게 폼의 위치를 자동 조정함.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// 1. 윈도우 API를 사용하여 현재 핸들로부터 모니터 핸들(HMONITOR)을 가져와
// MONITOR_DEFAULTTONEAREST는 mdNearest와 같은 역할
HMONITOR hMonitor = MonitorFromWindow(this->Handle, MONITOR_DEFAULTTONEAREST);
if (hMonitor) {
MONITORINFO mi;
mi.cbSize = sizeof(MONITORINFO);
// 2. 모니터의 상세 정보(WorkArea 포함)를 가져옵니다.
if (GetMonitorInfo(hMonitor, &mi)) {
// mi.rcWork가 바로 우리가 찾는 해당 모니터의 작업 영역입니다.
TRect rect = TRect(mi.rcWork);
// 3. 이제 이 rect를 기준으로 보정 로직을 수행합니다.
if (this->Left < rect.Left) this->Left = rect.Left;
if (this->Top < rect.Top) this->Top = rect.Top;
if (this->Left + this->Width > rect.Right)
this->Left = rect.Right - this->Width;
if (this->Top + this->Height > rect.Bottom)
this->Top = rect.Bottom - this->Height;
}
}
... 이후 코드..
}
|