It appears that ATL does not center window correctly on multi-monitor systems. ATL code checks screen work area coordinates in CWindow::CenterWindow to ensure new position is within visible area, however since SystemParametersInfo/SPI_GETWORKAREA is used target rectangle is always on a primary monitor.
This hotfix works the problem around:
atlwin.h, CWindow::CenterWindow:
#if TRUE
if(hWndCenter)
{
ATLVERIFY(::GetWindowRect(hWndCenter, &rcCenter));
HMONITOR hMonitor = MonitorFromRect(&rcCenter, MONITOR_DEFAULTTONEAREST);
ATLASSERT(hMonitor);
if(hMonitor)
{
MONITORINFO MonitorInfo = { sizeof MonitorInfo };
ATLVERIFY(GetMonitorInfo(hMonitor, &MonitorInfo));
rcArea = MonitorInfo.rcWork;
} else
ATLVERIFY(::SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcArea, NULL));
} else
{
ATLVERIFY(::SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcArea, NULL));
rcCenter = rcArea;
}
#else
::SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcArea, NULL);
if(hWndCenter == NULL)
rcCenter = rcArea;
else
::GetWindowRect(hWndCenter, &rcCenter);
#endif