Как предотвратить перемещение окон?

Как я могу остановить остановку формы. У меня есть стиль границы формы, установленный как FixedSingle, и хотел бы сохранить его таким образом, потому что он выглядит хорошо в Vista 🙂

15 Solutions collect form web for “Как предотвратить перемещение окон?”

Взгляните на эту ссылку . Вам может быть интересна опция №3. Это потребует, чтобы вы обернули некоторый собственный код, но должны работать. В нижней части ссылки есть комментарий, который показывает более простой способ сделать это. Взято из комментария (не беру на себя ответственность за это, но я сохраню вам некоторые поиски):

protected override void WndProc(ref Message message) { const int WM_SYSCOMMAND = 0x0112; const int SC_MOVE = 0xF010; switch(message.Msg) { case WM_SYSCOMMAND: int command = message.WParam.ToInt32() & 0xfff0; if (command == SC_MOVE) return; break; } base.WndProc(ref message); } 

Вы можете установить для свойства FormBorderStyle формы значение None

 this.FormBorderStyle=System.Windows.Forms.FormBorderStyle.None 

Я нашел это, чтобы остановить форму от перемещения (ее в c #)

 protected override void WndProc(ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_MOVE = 0xF010; switch (m.Msg) { case WM_SYSCOMMAND: int command = m.WParam.ToInt32() & 0xfff0; if (command == SC_MOVE) return; break; } base.WndProc(ref m); } 

Найдено здесь

Это еще не все красиво (происходит некоторая проблеска, когда вы пытаетесь переместить форму), но вы можете использовать свойство LocationChanged, чтобы сохранить форму там, где вы хотите:

 private Point _desiredLocation; // assign the _desiredLocation variable with the form location at some // point in the code where you know that the form is in the "correct" position private void Form_LocationChanged(object sender, EventArgs e) { if (this.Location != _desiredLocation) { this.Location = _desiredLocation; } } 

Из любопытства; зачем вы хотите это сделать?

В Windows стиль WS_CAPTION – это неклиентская область, которая позволяет перемещать ваше окно с помощью мыши. Таким образом, самый простой способ сделать то, что вы хотите, – удалить этот стиль из своего windows.

Тем не менее, если вам нужно иметь подпись и все еще достичь того, чего вы хотите, тогда следующий стиль будет состоять в том, чтобы захватить сообщение WM_NCHITTEST и проверить наличие HTCAPTION. Если код HTCAPTION, верните NTNOWHERE вместо этого. Это предотвратит выполнение по умолчанию оконной процедуры по умолчанию.

Это не хорошая практика, чтобы сделать вашу форму неподвижной. Я бы подумал об этом, если бы был вами.
В любом случае, вы можете сделать это, переопределив WinProc, чтобы отключить элемент меню [Move] из системного меню.

 [DllImport("user32.dll")] private static extern Int32 EnableMenuItem ( System.IntPtr hMenu , Int32uIDEnableItem, Int32 uEnable); private const Int32 HTCAPTION = 0×00000002; private const Int32 MF_BYCOMMAND =0×00000000; private const Int32 MF_ENABLED =0×00000000; private const Int32 MF_GRAYED =0×00000001; private const Int32 MF_DISABLED =0×00000002; private const Int32 SC_MOVE = 0xF010; private const Int32 WM_NCLBUTTONDOWN = 0xA1; private const Int32 WM_SYSCOMMAND = 0×112; private const Int32 WM_INITMENUPOPUP = 0×117; protected override void WndProc(ref System.Windows.Forms.Message m ) { if (m.Msg == WM_INITMENUPOPUP) { //handles popup of system menu if ((m.LParam.ToInt32() / 65536) != 0) // 'divide by 65536 to get hiword { Int32 AbleFlags = MF_ENABLED; if (!Moveable) { AbleFlags = MF_DISABLED | MF_GRAYED; // disable the move } EnableMenuItem(m.WParam, SC_MOVE, MF_BYCOMMAND | AbleFlags); } } if (!Moveable) { if (m.Msg == WM_NCLBUTTONDOWN) //cancels the drag this is IMP { if (m.WParam.ToInt32() == HTCAPTION) return; } if (m.Msg == WM_SYSCOMMAND) // Cancels any clicks on move menu { if ((m.WParam.ToInt32() & 0xFFF0) == SC_MOVE) return; } } base.WndProc(ref m); } 

Кроме того, вы можете обработать событие OnMove вашей формы. Но я думаю, что это вызовет некоторое мерцание:

 private void Form1_Move(object sender, EventArgs e) { this.Location = defaultLocation; } 

Попробуйте переопределить WndProc:

 protected override void WndProc(ref Message m) { const int WM_NCLBUTTONDOWN = 161; const int WM_SYSCOMMAND = 274; const int HTCAPTION = 2; const int SC_MOVE = 61456; if ((m.Msg == WM_SYSCOMMAND) && (m.WParam.ToInt32() == SC_MOVE)) { return; } if ((m.Msg == WM_NCLBUTTONDOWN) && (m.WParam.ToInt32() == HTCAPTION)) { return; } base.WndProc(ref m); } 
  1. Перейдите к форме events-> Location changed

напишите следующий код

 Location = new Point(this.Width,this.Height); 

Просто измените свойство FormBorderStyle на None .

Я бы поставил под сомнение вашу необходимость сделать форму неизменной. Это звучит не очень хорошо. Конечно, вы можете сохранить местоположение windows, когда окно закроется и снова откроет окно в эту позицию. Это дает пользователю некоторый контроль над местом расположения windows.

Вы можете подписаться на событие Form.Move и изменить его.

Просто сбросьте местоположение в событии formlocation_changed, где он был, т.е. установите для параметра Form.Location значение переменной до его перемещения, и когда пользователь попытается переместить его, он вернется к месту переменной, в которое вы его установили.

измените свойство Form StartPostion на Manual. Затем обработайте событие LocationChanged:

 private void frmMain_LocationChanged(object sender, EventArgs e) { Location = new Point(0, 0); } 

Private Sub MyFormLock () Me.Location = New Point (0, 0) End Sub

 Private Sub SearchSDR_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LocationChanged Call MyFormLock() End Sub 

Можешь попробовать:

 this.Locked = true; 
  • Какова связь между ContentPane и JPanel?
  • Установить альфа / непрозрачность макета
  • Слушатель модели JTable слишком быстро обнаруживает вставленные строки (до их рисования)
  • Как я могу получить высоту и ширину панели навигации Android программно?
  • Как подключить одну панель к другой
  • Как создать графический интерфейс пользователя на C ++?
  • установить и отключить иконки JToggleButton
  • Эффект JavaFX на фоне
  • Как настроить панель выполнения на Android
  • Почему мы должны использовать sp для размеров шрифтов в Android?
  • Добавление JPanels от других classов к cardLayout
  • Interesting Posts

    Как создать прозрачную активность на Android?

    Ресурс был получен при подключенной трассировке стека, но не был выпущен. См. Java.io.Closeable для информации об избежании утечек ресурсов

    Мультимониторы и углы экрана

    инициализация C ++ std :: istringstream из буфера памяти?

    Почему моя система использует только 3,2 ГБ моего 4GM RAM?

    Почему я могу хранить только 465 ГБ на жестком диске емкостью 500 ГБ?

    Программно установить левую выделенную в TextView

    Как туннель Windows Remote Dektop через две машины

    Безопасна ли поддержка JSF 2.0 View Scope?

    сочетание и перестановка в C ++

    Как скомпилировать kernel ​​Android AOSP и протестировать его с помощью эмулятора Android?

    Полезно ли включить Rapid Mode на твердотельный накопитель Samsung?

    Связь между kernelм и пользовательским streamом

    Как суммировать сумму в MongoDB, чтобы получить общий счет?

    Что такое Unicode, UTF-8, UTF-16?

    Давайте будем гением компьютера.