Эфекты формы в Windows 7 при FormBorderStyle = None

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

xacker-neo
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 14.04.2010 (Ср) 3:55

Эфекты формы в Windows 7 при FormBorderStyle = None

Сообщение xacker-neo » 30.03.2013 (Сб) 15:09

Привет. Вот такой вопрос. Видел много программ у которых форма плоская, т.е без FormBorderStyle как у Windows. Но при закрытии, минимизации она так же это делает с эфектами плавного закрытия и сворачивания на панель задач. В VB net можно установить форму в FormBorderStyle = None и сделать свои кнопки и тд, но при сворачивании или закрытии форма просто исчезает резко, без эффектов. Пробовал изменять CreateParams формы но толку нет... Прошу помочь друзья!

Например нашел решение чтоб без FormBorderStyle при нажатии на иконку в TaskBar форма сворачивалась на панель задач и восстанавливалась

Код: Выделить всё
Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.Style = &HA0000
            Return cp
        End Get
    End Property

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.03.2013 (Сб) 22:37

xacker-neo писал(а):cp.Style = &HA0000

Может быть cp.Style = cp.Style Or &HA0000?
А что не работает-то?

xacker-neo
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 14.04.2010 (Ср) 3:55

Re:

Сообщение xacker-neo » 30.03.2013 (Сб) 23:07

Qwertiy писал(а):
xacker-neo писал(а):cp.Style = &HA0000

Может быть cp.Style = cp.Style Or &HA0000?
А что не работает-то?


Нет((( Дело в том что форма в Windows 7 с FormBorderStyle = FixedSingle при нажатии на кнопку свернуть, форма плавно сворачивается на панель задач, так же если нажать на кнопку закрыть она плавно закрывается. А вот если установить стиль формы FormBorderStyle = None и программно Me.WindowState = FormWindowState.Minimized форма свернется но просто. без эффекта...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.03.2013 (Вс) 0:06

Чтобы форму мог сворачивать пользователь (на панели задач) можно сделать так:
Код: Выделить всё
Private ReadOnly WS_MINIMIZEBOX As IntPtr = &H20000
Private Const GWL_STYLE As Integer = -16

Private Declare Unicode Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongPtrW" (ByVal handle As IntPtr, ByVal i As Integer) As IntPtr
Private Declare Unicode Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongPtrW" (ByVal handle As IntPtr, ByVal i As Integer, ByVal style As IntPtr) As IntPtr

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
  'Me.MinimizeBox = True ' Это не сработает
  SetWindowLongPtr(Me.Handle, GWL_STYLE, CULng(GetWindowLongPtr(Me.Handle, GWL_STYLE)) Or CULng(WS_MINIMIZEBOX))
End Sub

Но на визуализацию сворачивания оно не влияет.

xacker-neo
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 14.04.2010 (Ср) 3:55

Re:

Сообщение xacker-neo » 31.03.2013 (Вс) 16:42

Qwertiy писал(а):Чтобы форму мог сворачивать пользователь (на панели задач) можно сделать так:
Код: Выделить всё
Private ReadOnly WS_MINIMIZEBOX As IntPtr = &H20000
Private Const GWL_STYLE As Integer = -16

Private Declare Unicode Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongPtrW" (ByVal handle As IntPtr, ByVal i As Integer) As IntPtr
Private Declare Unicode Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongPtrW" (ByVal handle As IntPtr, ByVal i As Integer, ByVal style As IntPtr) As IntPtr

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
  'Me.MinimizeBox = True ' Это не сработает
  SetWindowLongPtr(Me.Handle, GWL_STYLE, CULng(GetWindowLongPtr(Me.Handle, GWL_STYLE)) Or CULng(WS_MINIMIZEBOX))
End Sub

Но на визуализацию сворачивания оно не влияет.


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

Код: Выделить всё
Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.Style = &HA0000
            Return cp
        End Get
    End Property


Но БЕЗ эффектов!((


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList