cyber_ua Ответов: 2

Aero Snap effect для формы с FormBorderStyle = None


У меня есть winform с FormBorderStyle = None и мне нужно добавить форму развертывания , если он коснется бокового экрана (это легко), но как добавить aero demo, как форма будет развернута, я не могу.
Поиск в функциях Dwmapi.dll, но так и не нашли.
Скриншот.

2 Ответов

Рейтинг:
8

cyber_ua

Я нашел решение, нужно обработать WM_NCHITTEST, если курсор в строке заголовка возвращает HTCAPTION. Тестовый код, если вся строка заголовка формы.

protected override void WndProc(ref Message message)
        {
            base.WndProc(ref message);

            if (message.Msg == WM_NCHITTEST )
                            message.Result = (IntPtr)HTCAPTION;
        }


Рейтинг:
1

toATwork

Добавьте в свою форму следующее:

protected override CreateParams CreateParams
{
   get
   {
      CreateParams cp = base.CreateParams;
      cp.Style |= 0x40000; //WS_SIZEBOX;
      return cp;
   }
}


хотя обычно я использую:
protected override CreateParams CreateParams
{
   get
   {
      CreateParams cp = base.CreateParams;
      {
         cp.Style |= 0x20000 | 0x80000 | 0x40000; //WS_MINIMIZEBOX | WS_SYSMENU | WS_SIZEBOX;
      }
      return cp;
   }
}


cyber_ua

Не работает, если я перетаскиваю форму и прикасаюсь к сторонам.

Jack Han

Ну, границы в порядке, но как мне заставить элемент управления, панель для примера, вести себя так, как если бы это была строка заголовка? И это включает в себя aerosnap? А также никаких Аэро границ, но пользовательская форма, которая может быть изменена и иметь свойства aerosnap?

toATwork

У вас есть панель подписей? Вы переписали функцию HitTest?

cyber_ua

Что такое функция HitTest?

toATwork

Он используется для определения того, где находится курсор мыши в заданной форме, например, граница, подпись...
Проверить это:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645618%28v=vs.85%29.aspx

cyber_ua

Нужно ли это, чтобы определить местоположение курсора?
Что произойдет, если курсор коснется сторон (с формой)?

cyber_ua

Если cp.Style = 0x00040000L;// WS_SIZEBOX; окно имеет границу размера. Почему , когда я перетаскиваю границу в верхнюю часть демо-шоу, но если я перетаскиваю влево или вправо, демо-шоу не отображается?

toATwork

Такого я еще никогда не видел.

cyber_ua

(int)0x00040000L == 0x40000
http://msdn.microsoft.com/en-us/library/ms632600.aspx

toATwork

Я имел в виду предварительный просмотр aero dock работающий сверху но не слева и не справа

cyber_ua

Добавленные границы действительно помогли , но не полностью.
Как добавить демо-версию к левой и правой границам?
Пожалуйста помочь.

toATwork

Включен ли режим left+right? Можете ли вы сделать это с помощью клавиатуры:
http://superuser.com/questions/285356/possible-to-snap-top-bottom-instead-of-just-left-right-in-windows-7

cyber_ua

Да потому, что другие программы могут показать демо с прикосновение к левой и правой сторон или я не понял вопрос !?

toATwork

Попробуйте сделать это с помощью клавиатуры, как описано в данной ссылке, например, left half snap (Windows + left)

cyber_ua

Если я использую клавиатуру, это сработает.

cyber_ua

Странно, но и на моем ноутбуке работают такие же.

toATwork

Мне очень жаль но у меня больше нет никаких предложений

cyber_ua

Спасибо за помощь и извините, если я написал неграмотно (я изучаю английский язык ).
P. s у меня есть идея, что вы увидите исходный код .net (форма класса).

toATwork

Добро пожаловать. Надеюсь, ты это поймешь.

cyber_ua

Я был неправ, что он не должен показывать демо-версию при перетаскивании границы влево или вправо.
Но как показать демо , когда я перетаскиваю форму в стороны, как когда форма перетаскивается за строку заголовка, если у нее нет строки заголовка, а вместо него моя строка заголовка?

Member 12795607

Есть ли какой-либо способ отображать демо-версии док-станции на сторонах экрана без использования

cp.Style |= 0x40000;


У меня есть свой собственный заголовок и границы, и я действительно не хочу видеть окна изменения размера по умолчанию / границы.

Теперь я знаю, что док-станция "демо" рисуется в неклиентской области, но мне интересно, могу ли я импортировать эту функцию windows только без использования окна изменения размера Windows.


Заранее спасибо.