powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Стартовая позиция диалога?
7 сообщений из 7, страница 1 из 1
Стартовая позиция диалога?
    #39861575
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть диалог выведенный из System.Windows.Forms.CommonDialog

Как сделать ему стартовую позицию, типа такой, как для формы

frm.StartPosition = FormStartPosition.CenterParent;
...
Рейтинг: 0 / 0
Стартовая позиция диалога?
    #39861696
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открывай наследника Form как диалог или https://docs.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-setwindowpos
...
Рейтинг: 0 / 0
Стартовая позиция диалога?
    #39861700
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВили https://docs.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-setwindowpos
Не взлетит. Это, по идее, надо выполнять после показа диалога, но диалог показывается модально, и всё, что после показа (SetWindowPos) выполнится только после закрытия диалога. Разве что делать из background thread - взводить в нем ждущий event, который сбрасывать перед открытием диалога, и после некоторой задержки искать окно.
...
Рейтинг: 0 / 0
Стартовая позиция диалога?
    #39861703
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Ну хз, там внутри есть такой метод
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
	internal static void MoveToScreenCenter(IntPtr hWnd)
	{
		NativeMethods.RECT rect = default(NativeMethods.RECT);
		UnsafeNativeMethods.GetWindowRect(new HandleRef(null, hWnd), ref rect);
		Rectangle workingArea = Screen.GetWorkingArea(Control.MousePosition);
		int x = workingArea.X + (workingArea.Width - rect.right + rect.left) / 2;
		int y = workingArea.Y + (workingArea.Height - rect.bottom + rect.top) / 3;
		SafeNativeMethods.SetWindowPos(new HandleRef(null, hWnd), NativeMethods.NullHandleRef, x, y, 0, 0, 21);
	}
...
Рейтинг: 0 / 0
Стартовая позиция диалога?
    #39861726
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСон Веры Павловны,
Ну хз, там внутри есть такой метод
И к нему камент:
Код: c#
1.
2.
3.
///     This method is used by the default
///     common dialog hook procedure to center the dialog on the screen before it
///     is shown.


причем эта хук-процедура - виртуальная, практически у всех наследников она переопределена, и они не соизволяют ни отцентроваться, ни даже вызвать базовую реализацию.
...
Рейтинг: 0 / 0
Стартовая позиция диалога?
    #39861864
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Есть некий опыт кастомизирования диалогов
Ну вот нашел к примеру
А Form_resize для Common Dialog как отловить?
Предотвратить срабатывание по Enter для диалога OpenFile
И в частности там нужно было позиционирование, т.к. дорисовывая что-то справа-внизу, это могло вылезать за края экрана и надо было "чуть сдвинуть", с учетом в частности, где TaskBar находится.

Но это
1) реальная жесть на API, то бишь System.Windows.Forms.CommonDialog не прокатит
2) применялось к старым диалогам стиля "XP" где предусмотрена hook-процедура, а не стиля >=Vista.

С "новыми" тоже чуток поигрался впоследствии, но там отностительно штатные фичи через интерфейсы:
Кастомизация (добавление своих элементов) в "новых" диалогах SaveAs/Open
И сабклассинг там пробовал похоже не особо работает (а без него позиционирования не получится). ИМХО забей. Если очень надо, покопайся поиском в моих топиках (в том числе VB6) - у меня есть привычка выкладывать коды когда что-то удается, направление уловишь. Но времени уйдет не день и не два.
...
Рейтинг: 0 / 0
Стартовая позиция диалога?
    #39861865
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще стартовая позиция и размеры задаются виндами, т.е. они помнят то как было при предыдущем запуске.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Стартовая позиция диалога?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]