Vista aero

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

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

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Vista aero

Сообщение Paradox » 08.06.2009 (Пн) 14:27

Как активировать aero в форме не только в заголовке, но и далее (как в проводнике)? vb 2008 express

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Vista aero

Сообщение Williams » 08.06.2009 (Пн) 17:42

Есть соответствующая функция DwmExtendFrameIntoClientArea
И вы думаете, что вас оставят в живых после прочтения этого поста?

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 09.06.2009 (Вт) 7:15

Искал во всех неймспейсах - не нашел... Может, это Express Edition такой... А API - аналог есть?...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Vista aero

Сообщение Viper » 09.06.2009 (Вт) 7:49

Paradox писал(а):Искал во всех неймспейсах - не нашел... Может, это Express Edition такой... А API - аналог есть?...
Это и есть API функция из библиотеки dwmapi.dll.
Весь мир матрица, а мы в нем потоки байтов!

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 09.06.2009 (Вт) 8:04

А параметры у этой функции есть?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Vista aero

Сообщение Viper » 09.06.2009 (Вт) 8:15

Paradox писал(а):А параметры у этой функции есть?..
Несомненно, целых два - хэндл окна и структура с нужными размерами полей окна.
Весь мир матрица, а мы в нем потоки байтов!

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 09.06.2009 (Вт) 8:46

Э... А поподробнее про переменные структуры и где брать идентификатор окна?

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Vista aero

Сообщение Williams » 09.06.2009 (Вт) 8:50

Paradox писал(а):Э... А поподробнее про переменные структуры и где брать идентификатор окна?


1.
Код: Выделить всё
<StructLayout(LayoutKind.Sequential)> _
Public Structure MARGINS
    Public Left As Integer
    Public Right As Integer
    Public Top As Integer
    Public Bottom As Integer
End Structure


2.
Me.Handle
И вы думаете, что вас оставят в живых после прочтения этого поста?

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 09.06.2009 (Вт) 10:40

Эх... =( Можно еще строку вызова?..

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Vista aero

Сообщение Williams » 09.06.2009 (Вт) 10:46

Paradox писал(а):Эх... =( Можно еще строку вызова?..


Дальше давай-ка уже сам =)

http://lmgtfy.com/?q=dwmextendframeinto ... rea+vb.net
И вы думаете, что вас оставят в живых после прочтения этого поста?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Vista aero

Сообщение Viper » 09.06.2009 (Вт) 11:08

Paradox, а самому в MSDN никак нельзя посмотреть? Имя функции ты теперь знаешь.
Весь мир матрица, а мы в нем потоки байтов!

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 09.06.2009 (Вт) 12:06

Я уж посмотрел =) Только вызов этой функции делает только белый бордюр, а не aero =(

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 09.06.2009 (Вт) 12:09

Я уж посмотрел =) Только вызов этой функции делает только белый бордюр, а не aero =(

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Vista aero

Сообщение 773FF » 09.06.2009 (Вт) 17:25

Код: Выделить всё
  'Обьявляем структуру, описывающую размер полей Glass
    <StructLayout(LayoutKind.Sequential)> Private Structure Margins
        Public cxLeftWidth As Integer
        Public cxRightWidth As Integer
        Public cyTopHeight As Integer
        Public cyBottomHeight As Integer
    End Structure

    'Импортируем функию из DLL
    <DllImport("DwmApi.dll")> Private Shared Function DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef pMarInset As Margins) As Integer
    End Function

    <DllImport("dwmapi.dll", PreserveSig:=False)> Private Shared Function DwmIsCompositionEnabled() As Boolean
    End Function
    Const HT_CAPTION As Integer = &H2
    Const WM_NCLBUTTONDOWN As Integer = &HA1

    Private Sub PaintGlass()
        Dim margins As New Margins()
        margins.cxLeftWidth = Me.Width / 2
        margins.cxRightWidth = Me.Width / 2
        margins.cyTopHeight = Me.Height / 2
        margins.cyBottomHeight = Me.Height / 2

        Me.BackColor = Color.Black

        'Определяем Handle формы
        Dim theHandle As Long = Me.Handle.ToInt64



        'Вызываем функцию Glass из библиотеки DwmApi.dll
        Try
            If DwmIsCompositionEnabled() = True Then
                                DwmExtendFrameIntoClientArea(theHandle, margins)
                     End If
        Catch
         
        End Try

Private Sub Form_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        PaintGlass()
    End Sub

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Vista aero

Сообщение Nord777 » 09.06.2009 (Вт) 17:56

773FF, а что это за безобразие? :)
773FF писал(а):Dim theHandle As Long = Me.Handle.ToInt64
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 10.06.2009 (Ср) 9:09

РАБОТАЕТ! Только надо так Dim theHandle as IntPtr = Me.handle

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Vista aero

Сообщение Williams » 10.06.2009 (Ср) 17:24

Paradox писал(а):РАБОТАЕТ! Только надо так Dim theHandle as IntPtr = Me.handle


Включи варнинг на Implicit Conversion в свойствах проекта, меньше путаницы будет.
И вы думаете, что вас оставят в живых после прочтения этого поста?

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Vista aero

Сообщение 773FF » 11.06.2009 (Чт) 16:16

Как ни странно, но и Dim theHandle As Long = Me.Handle.ToInt64 тоже работает (пробовал в Windows Vista X64 и в Windows 7RC X64). А вообще-то Me.Handle.ToInt64 это моя привычка из времён VB6.
Последний раз редактировалось 773FF 11.06.2009 (Чт) 16:23, всего редактировалось 1 раз.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Vista aero

Сообщение Nord777 » 11.06.2009 (Чт) 16:21

Тебе просто повезло :)
На 64-битных системах указатели 64-битные
На 32бит будет ждать облом.
Поэтому желательно использовать IntPtr вместо int32 или int64
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Vista aero

Сообщение 773FF » 11.06.2009 (Чт) 16:26

Тебе просто повезло
На 64-битных системах указатели 64-битные
На 32бит будет ждать облом.
Поэтому желательно использовать IntPtr вместо int32 или int64
- спрасибо!!! В VMware Workstation Aero не работает, а пользователи ругались бы долго.

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 13.06.2009 (Сб) 9:45

Еще один вопрос =) С тех пор, как я растянул аеро на всю форму, на кнопках стал "просвечивать" текст. Смена цвета текста кнопки не помогает =(. Можно это как-нибудь устранить?

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Vista aero

Сообщение Williams » 14.06.2009 (Вс) 12:35

Paradox писал(а):Еще один вопрос =) С тех пор, как я растянул аеро на всю форму, на кнопках стал "просвечивать" текст. Смена цвета текста кнопки не помогает =(. Можно это как-нибудь устранить?


Кажется на такой поверхности текст надо рисовать вручную. Где-то была инфа, но не на этом форуме
И вы думаете, что вас оставят в живых после прочтения этого поста?

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Vista aero

Сообщение 773FF » 14.06.2009 (Вс) 18:36

на кнопках стал "просвечивать" текст
- у меня возникли аналогичные проблемы. В процессе раскопок я прочитал, что полноценно с Aero можно работать в приложениях WPF (Windows Presentation Foundation). А в Windows Forms надо или вручную прорисовывать текст на кнопках (текстовых полях и пр.), или например, вставить в кнопку рисунок (image) с необходимой надписью.

Paradox
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 08.06.2009 (Пн) 13:37

Re: Vista aero

Сообщение Paradox » 16.06.2009 (Вт) 17:04

Я нашел =) Надо поставить свойство кнопки UseCompatibleTextRendering в Truе.


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

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

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

    TopList