Я пишу приложение C ++ mfc, которое я хочу запомнить его позицию. Он должен открыть свои окна именно там, где они были, прежде чем закрывать их. При открытии окна я считывал данные из файла или регистрации и восстанавливал рабочий стол окна, на котором оно было закрыто, координаты левой верхней точки и размер окна.
Там нет проблем с координатами и размером, но как лучше всего следить за дисплеем, на котором у меня есть окно?
Номер дисплея не будет работать, потому что нет способа получить монитор по номеру и номеру монитора в WinAPI.
Значение HMONITOR может соответствовать, согласно msdn: «Физический дисплей имеет тот же HMONITOR, если он является частью рабочего стола». (https://msdn.microsoft.com/en-us/library/dd144968(v=vs.85).aspx). Но если я перезагружу ПК, сохранится ли сохраненное значение HMONITOR неизменным?
Ты можешь позвонить GetWindowPlacement () когда ваше приложение закрывается, чтобы узнать размер и местоположение вашего окна (в том числе, если оно развернуто, восстановлено и т. д.). Сохраните эту информацию где-нибудь (реестр, данные приложения и т. Д.), И когда ваша программа запустится в следующий раз, прочитайте эту информацию и позвоните SetWindowPlacement () восстановить окно на прежнее место.
Кроме того, вы, вероятно, захотите убедиться, что новое местоположение окна является видимым, и если оно не перемещается, чтобы оно снова стало видимым. Это может произойти, если установлено другое количество мониторов (например, если вы не используете внешний дисплей с ноутбуком).
Других решений пока нет …