Эта функция должна определять, находится ли экран в режиме протрейта:
BOOL IsPortrait()
{
DEVMODE devmode;
ZeroMemory(&devmode, sizeof(DEVMODE));
devmode.dmSize = sizeof(DEVMODE);
devmode.dmDisplayOrientation = DMDO_0;
devmode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &devmode, NULL, CDS_TEST, NULL);
return devmode.dmDisplayOrientation == DMDO_0;
}
Эта функция должна повернуться в портретный режим:
void RotatePortrait(void)
{
DEVMODE devmode;
ZeroMemory(&devmode, sizeof(DEVMODE));
devmode.dmSize = sizeof(DEVMODE);
devmode.dmFields = DM_DISPLAYORIENTATION;
devmode.dmDisplayOrientation = DMDO_0;
ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);
}
Вам понадобится окно верхнего уровня (без родителя), которое обрабатывает сообщение WM_SETTINGCHANGE
для обнаружения вращения.
//...in WndProc...
case WM_SETTINGCHANGE:
if (!IsPortrait())
{
RotatePortrait();
}
break;