Получить размещение окон из сохраненной рабочей области в реестре Windows - PullRequest
0 голосов
/ 23 января 2019

У меня есть приложение MFC, которое автоматически сохраняет и восстанавливает свое рабочее пространство (положение окна, открытые панели, размеры и т. Д.) В реестре Windows (например, HKCU\Software\foo\bar\Workspace).Он работает правильно.

Теперь мне интересно показать заставку перед загрузкой любого другого окна (требования пользователя).Этот экран-заставку должен отображаться на том же экране, где будет отображаться главное окно приложения.

Я заметил, что в реестре есть значение HKCU\Software\foo\bar\Workspace\WindowPlacement\MainWindowRect, которое, как мне кажется, содержит информацию олевая точка и размер окна.С этой информацией я могу получить правильный номер экрана (см. этот другой пост , если интересно, как).

Как я могу получить и интерпретировать это значение MainWindowRect?

1 Ответ

0 голосов
/ 23 января 2019

Насколько я мог видеть, MainWindowRect является прямым дампом памяти структуры RECT. Для получения прямоугольника окна достаточно простого приведения.

Вот полный фрагмент кода для получения значения, а также соответствующий монитор:

// Assumes SetRegistryKey has been already called
if (const auto hKey = AfxGetApp()->GetSectionKey("Workspace\\WindowPlacement")) {
  DWORD dwReturn[32];
  DWORD dwBufSize = sizeof(dwReturn);
  if (RegQueryValueEx(hKey, "MainWindowRect", 0, 0, (LPBYTE)dwReturn, &dwBufSize) == ERROR_SUCCESS) {
    const auto rectWindow = *(RECT*)dwReturn;

    // Get monitor index from window's rect
    const auto hMonitor = MonitorFromRect(&rectWindow, MONITOR_DEFAULTTONEAREST);
    const auto iMonitorIndex = GetMonitorIndex(hMonitor); // see linked post for GetMonitorIndex implementation
  }
  RegCloseKey(hKey);
}
...