다이얼로그박스를 중앙에 오게 하려면
페이지 정보
본문
다이얼로그박스 함수를 이용해서 리소스에 있는 다이얼로그박스를 하나 띄웠습니다. 이를 부르는 윈도우가 이 다이얼로그박스의 부모 윈도우가 될 줄 알았는데, 해당 다이얼로그 박스의 프로시저에서 GetParent를 해보니까 잘 안됩니다. 다이얼로그박스를 원래 윈도우 위에 한 가운데 띄우려면 어떻게 해야하는지요.
다음과 같은 방법을 통해 다이얼로그박스를 중앙에 오도록 할 수 있습니다.
HWND hwndOwner;
RECT rc, rcDlg, rcOwner;
case WM_INITDIALOG:
if ((hwndOwner = GetParent(hwndDlg)) == NULL)
hwndOwner = GetDesktopWindow();
GetWindowRect(hwndOwner, &rcOwner);
GetWindowRect(hwndDlg, &rcDlg);
CopyRect(&rc, &rcOwner);
OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top);
OffsetRect(&rc, -rc.left, -rc.top);
OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom);
SetWindowPos(hwndDlg, HWND_TOP, rcOwner.left + (rc.right / 2), rcOwner.top + (rc.bottom / 2),
0, 0, // 크기인수를인식한다
SWP_NOSIZE);
if (GetDlgCtrlID((HWND) wParam) != ID_ITEMNAME) {
SetFocus(GetDlgItem(hwndDlg, ID_ITEMNAME));
return FALSE;
}
return TRUE;
다음과 같은 방법을 통해 다이얼로그박스를 중앙에 오도록 할 수 있습니다.
HWND hwndOwner;
RECT rc, rcDlg, rcOwner;
case WM_INITDIALOG:
if ((hwndOwner = GetParent(hwndDlg)) == NULL)
hwndOwner = GetDesktopWindow();
GetWindowRect(hwndOwner, &rcOwner);
GetWindowRect(hwndDlg, &rcDlg);
CopyRect(&rc, &rcOwner);
OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top);
OffsetRect(&rc, -rc.left, -rc.top);
OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom);
SetWindowPos(hwndDlg, HWND_TOP, rcOwner.left + (rc.right / 2), rcOwner.top + (rc.bottom / 2),
0, 0, // 크기인수를인식한다
SWP_NOSIZE);
if (GetDlgCtrlID((HWND) wParam) != ID_ITEMNAME) {
SetFocus(GetDlgItem(hwndDlg, ID_ITEMNAME));
return FALSE;
}
return TRUE;
댓글목록
등록된 댓글이 없습니다.