Я использую SetWindowPos
и MoveWindow
для изменения размера и окна центра. Он отлично работает, но в нескольких окнах, таких как проигрыватель Windows Media или панель управления, когда вы закрываете окно и открываете его снова, новое изменение размера/перемещение не отражается. Когда я изменяю размер вручную, изменения отражаются при следующем открытии окна. Даже если я звоню UpdateWindow
, изменения не отражают. Есть ли что-то, что мне нужно, чтобы отправить окно, чтобы изменения были сохранены? Помогло бы RedrawWindow
? Благодаря?SetWindowPos/MoveWindow persist issue
ответ
Вы должны использовать GetWindowPlacement
и SetWindowPlacement
функции вместо того, чтобы извлекать и изменять восстанавливаемые, свернутые и максимизируется позиции окна. Это гарантирует, что размеры окон будут правильно сохранены приложением, чтобы их можно было восстановить при следующем запуске.
Поскольку вы используете C#, вам нужно P/Invoke этих функций из API Windows:
const int SW_HIDE = 0;
const int SW_SHOWNORMAL = 1;
const int SW_SHOWMINIMIZED = 2;
const int SW_SHOWMAXIMIZED = 3;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GetWindowPlacement(IntPtr hWnd, out WINDOWPLACEMENT lpwndpl);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);
[StructLayout(LayoutKind.Sequential)]
struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential)]
struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public Point ptMinPosition;
public Point ptMaxPosition;
public RECT rcNormalPosition;
}
Ваш вклад очень ценится, я постараюсь это завтра и обновит вас по результатам. Огромное спасибо. – user577240
@ пользователь577240: Конечно, проблем нет. Я понимаю, что это довольно уродливый беспорядок кода, но проблема в том, что в окне должно храниться информация о разных размерах для каждого возможного размещения (сведено к минимуму, нормальное и максимизированное). Это должно делать то, что вы хотите. Дайте мне знать, если вам нужна помощь, вызвав ее с C#. –
К сожалению, это не сработало. Я использую следующее: – user577240
- 1. Eclipselink entity persist issue
- 2. doctrine persist + persist = insert + insert?
- 3. entitymanager persist
- 4. Hibernate JPA Persist
- 5. зная, когда позвонить persist
- 6. Doctrine2 странное исключение persist
- 7. Hibernate manyToMany only persist
- 8. Persist Only Измененные поля
- 9. symfony2 persist manyToOne
- 10. persist new entity onFlush
- 11. Persist JSON Data - Appcelarator
- 12. Quickfixj Persist Messages
- 13. Guice Persist + Maven + GWT
- 14. Warp Persist alternative
- 15. Данные Persist Tf-Idf
- 16. Persist LinkedHashMap в blob
- 17. Persist Django FormView Data
- 18. SQLite Persist Update
- 19. Realm.io: PERSIST перечисление
- 20. IPhone persist Модель
- 21. Persist GColors on Pebble
- 22. Persist @ManyToOne NULL
- 23. JPA - OneToMany persist - EntityExistsException
- 24. JPA Persist ManyToOne
- 25. VSCode persist search preferences
- 26. NHibernate persist System.Uri
- 27. EntityManager merge/persist problem
- 28. CRUD и merge/persist
- 29. EclipseLink cascade persist exception
- 30. Cascade and persist
Проблемы в том, что этот API, явно задать размер окна (и я не уверен, целевое приложение даже получает событие, но я могу ошибаться), поэтому внутренне размеры окна не будут «запоминаться» приложением, когда окно не минимизировано. Я точно не знаю, как это решить, но я бы посмотрел на нечто вроде API SendMessage. – Rob
Забавно думать, что когда я изменяю размер программно, и я вручную наводил на край окна, пока не получаю курсор мыши с изменением размера, тогда я просто нажимаю вниз и вверх (вместо щелчка и перетаскивания), а затем закрываю окно, новый размер который был установлен программно, сохраняется. Как-то мне нужно отправить в окно какое-то сообщение, то же самое, которое отправляется при изменении размера вручную. – user577240
Вы пробовали Spy ++, чтобы узнать, какое событие уволили, когда вы это сделаете? – Marco