Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
3 / 3 / 3
Регистрация: 16.11.2015
Сообщений: 107

Прикрепление окна к краю монитора

05.06.2017, 10:26. Показов 2349. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть вопроса такова: хочу сделать как в некоторых программах - при перемещении окна к краю монитора, форма должна примагничиваться к краю монитора. Как такое реализовывается? Примеры: аимп плеер, клиент стим. Там когда подводишь форму к краю, она примагничивается к краям. Понимаю что надо делать что то на подобии: реагируем на перемещение окна. Когда позиция приближается к границе - сами "додвигаем" к границе. И аналогично, не даем отодвинуть на какое то минимальное расстояние, возвращаем назад. Подскажите пожалуйста как такое реализовать.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2017, 10:26
Ответы с готовыми решениями:

Прикрепление формы к краю экрана
Хотелось бы на событие мауз_клик по контролу прописать прикрепление формы к правому краю экрана. Подскажите как это можно реализовать,...

Притягивание формы к краю монитора
Как реализовать Притягивание формы к краю монитора? Или может есть свойство какое-то?

Прикрепление главного окна к границе экрана
Подскажите, как с использованием MFC прикрепить главное окно приложения к границе экрана. На Borland это делается просто, свойство...

4
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
05.06.2017, 11:57
Kanelynch, не совсем тот функционал, но можете посмотреть здесь:
https://www.codeproject.com/Ar... -Container
0
3 / 3 / 3
Регистрация: 16.11.2015
Сообщений: 107
06.06.2017, 08:25  [ТС]
Лучший ответ Сообщение было отмечено kolorotur как решение

Решение

Решил следующим образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0046 /* WM_WINDOWPOSCHANGING */)
            {
                Rectangle workArea = SystemInformation.WorkingArea;
                Rectangle rect = (Rectangle)Marshal.PtrToStructure((IntPtr)(IntPtr.Size * 2 + m.LParam.ToInt64()), typeof(Rectangle));
 
                if (rect.X <= workArea.Left + ДИСТАНЦИЯ)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2, workArea.Left);
 
                if (rect.X + rect.Width >= workArea.Width - ДИСТАНЦИЯ)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2, workArea.Right - rect.Width);
 
                if (rect.Y <= workArea.Top + ДИСТАНЦИЯ)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2 + 4, workArea.Top);
 
                if (rect.Y + rect.Height >= workArea.Height - ДИСТАНЦИЯ)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2 + 4, workArea.Bottom - rect.Height);
            }
 
            base.WndProc(ref m);
        }
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.06.2017, 10:06
Цитата Сообщение от Kanelynch Посмотреть сообщение
Решил следующим образом
Плюсик за решение и пара замечаний в нагрузку:
1. Если используется несколько мониторов, то форму невозможно будет перетащить с того монитора, на котором она открылась, на другой. Чтобы этой проблемы не было, используйте SystemInformation.VirtualScreen вместо SystemInformation.WorkingArea.
Можно пойти дальше и использовать Screen.FromControl(this).WorkingArea в комбинации с SystemInformation.VirtualScreen, чтобы цеплять форму на границе "рабочего" монитора, но при дальнейшем перетаскивании отцеплять и позволять тащить дальше на другой монитор.

2. Не обязательно выполнять эту задачу на уровне WndPrоc, достаточно обрабатывать событие Layout и устанавливать новое значение свойству Location. Код будет более читаем и без использования маршала и указателей
1
3 / 3 / 3
Регистрация: 16.11.2015
Сообщений: 107
06.06.2017, 10:08  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
пара замечаний в нагрузку
спасибо большое, приму это к сведению и позже постараюсь переделать =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2017, 10:08
Помогаю со студенческими работами здесь

Позиция окна по нижнему краю экрана
Здравствуйте, как установить позицию окна по нижнему краю экрана?

Расположения заголовка окна по правому краю
Заголовок формы по-умолчанию расположен по центру . Как переместить его влево?

Выравнивание JTextField по нижнему краю окна
Имеется ввиду аналог из Delphi Edit1.Align:=alBottom

Выровнять DIV по левому краю окна на CSS 3
Всем привет! Если честно, мне такие вопросы напоминают тот анекдот про короткие ноги, которые еле еле достают до земли. Но тем не менее...

Как выровнять div по верхнему краю окна браузера?
Скажите пожалуйста как выровнять div по верхнему краю окна браузера? у меня вся страница помещена в общий контейнер div но когда я нажимаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru