Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
3 / 3 / 1
Регистрация: 16.02.2015
Сообщений: 28

Программа во весь экран с учетом панели задач (№2)

20.06.2021, 20:12. Показов 2268. Ответов 5

Студворк — интернет-сервис помощи студентам
Привет. Помогите с проблеммой.
Нужно сделать так, чтобы форма без границ и элементов управления заполняла весь экран полностью, и всегда оставалась ниже панели задач. Панель задач может быть как статична так и автоматически убираться но она всегда должна быть видна.

Проблемма в том, что как только форма заполняет весь экран панель прячется под неё, вероятно система щитает это полноэкранным приложением и прячет панель под ней.
Не важно использую я

Form2.WindowState = FormWindowState.Maximized

или

Me.Top = 0
Me.Left = 0
Me.Width = 1920
Me.Height = 1080

результат один и тот же, панель задач не видна.

Как только я делаю окно не на весь экран, например так
Me.Top = 0
Me.Left = 0
Me.Width = 1919
Me.Height = 1080
Панель задач видна но полоска шириной даже в один пиксель это не по феншую.

Дополнительная информация.
На эту форму выводится анимация поэтому всякие моргания, перерисовки и прочее не допустимы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2021, 20:12
Ответы с готовыми решениями:

Программа во весь экран с учетом панели задач
Добрый день, столкнулся с такой проблемой при клике на кнопку форма разворачивается на весь экран WindowState = FormWindowState.Maximized...

Развернуть форму на весь экран с учетом панели задач
При запуске команды в режиме maximised низ формы уходит за пень задач, мне нужно до панели задач, поэтому нужно определить размер формы...

Окно во весь экран поверх панели задач
При помощи функции: ShowWindow(hwnd,SW_SHOWMAXIMIZED); разворачиваю созданное в моём приложении окно во весь экран. Проблема в...

5
3259 / 3278 / 556
Регистрация: 17.02.2019
Сообщений: 5,191
20.06.2021, 22:47
Z-Koder, Если я вас правильно понял попробуйте так
там код
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    Dim NewLocations As Point
    ' -1 если панель задач автоматически скрывается
    Dim W As Integer = Screen.PrimaryScreen.WorkingArea.Width ' - 1
    Dim H As Integer = Screen.PrimaryScreen.WorkingArea.Height ' - 1
    Dim W1 As Integer = Screen.PrimaryScreen.Bounds.Width ' - 1
    Dim H1 As Integer = Screen.PrimaryScreen.Bounds.Height ' - 1
 
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        WhereIsTheTaskbar()
        Me.Text = ""
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.Size = New Size(W, H)
        Me.Location = New Point(NewLocations.X, NewLocations.Y)
    End Sub
 
    Private Sub WhereIsTheTaskbar() ' где панель задач
        Dim sc As Screen = Screen.FromHandle((Me).Handle)
        If sc.WorkingArea.Top > 0 Then ' верху
            NewLocations = New Point(0, H1 - H)
        ElseIf sc.WorkingArea.Left <> sc.Bounds.X Then ' слева
            NewLocations = New Point(W1 - W, 0)
        ElseIf (sc.Bounds.Height - sc.WorkingArea.Height) > 0 Then ' внизу
            NewLocations = New Point(0, 0)
        ElseIf sc.WorkingArea.Right <> 0 Then ' справа
            NewLocations = New Point(0, H1 - H)
        End If
    End Sub
1
3 / 3 / 1
Регистрация: 16.02.2015
Сообщений: 28
21.06.2021, 14:25  [ТС]
January29, спасибо за ответ.
К сожалению это не то, что нужно.
Ваш подход предпологает постоянный мониторинг расположения и состояния панели задач (а панелей может быть несколько) и нужно менять размер формы, если пользователь начинает двигать панели задач и играть с их свойством "Автоматически скрывать панель задач".
К тому же если панель задачь полупрозрачна и статична то видно, что под ней нет нашей формы а просвечивают обои рабочего стола - это не подходит. Нужно чтобы наша форма всегда заполняла абсолютно всё пространство монитора а не только рабочую область (WorkingArea) и при этом панель задач (или панели если их много) всегда должна быть выше нашей формы.
Например обои рабочего стола, всегда ниже панели задачь и заполняют всю область монитора, панель задачь никогда не залазит под обои а всегда над ними и если она прозрачна то видно, что под ней обои.

Я попробовал сделать форму дочерней по отношению к рабочему столу сделав тем самым её частью рабочего стола и это дало мне то, что я хотел но внесло некоторые ограничения.
Ниже код на VB .NET 2010, тестирован под Win7:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Imports System.Runtime.InteropServices
 
Public Class Form1
    <DllImport("user32.dll", SetLastError:=True)> Public Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Public Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Public Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr
    End Function
    <DllImport("user32.dll", EntryPoint:="SetLayeredWindowAttributes")> Public Shared Function SetLayeredWindowAttributes(ByVal hWnd As IntPtr, ByVal crKey As Integer, ByVal alpha As Byte, ByVal dwFlags As Integer) As Boolean
    End Function
 
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        SetParent(Me.Handle, IntPtr.Zero) 'Отвязываемся от рабочего стола
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Форма без рамок на весь экран.
        Me.ControlBox = False : Me.FormBorderStyle = 0 'Убираем элементы управления и рамку
 
        'Me.WindowState = FormWindowState.Maximized 'Не подходит так как разворачивает окно только в пределах рабочей зоны и под панель задач не лезет (а нам это нужно).
 
        'Таки развернём форму на ВЕСЬ экран (в том числе и под панель задач залезем)
        Me.Top = 0
        Me.Left = 0
        Me.Width = 1920
        Me.Height = 1080
 
        'Получим указатель на рабочий стол (и его дочерние окна)
        Dim hWndProgMan As IntPtr = FindWindow("progman", "Program Manager") 'Главное окно рабочего стола
        Dim hWndDefView As IntPtr = FindWindowEx(hWndProgMan, IntPtr.Zero, "SHELLDLL_DefView", vbNullString) ' на этом уровне контекстное меню рабочего стола
        Dim hWndListView As IntPtr = FindWindowEx(hWndDefView, IntPtr.Zero, "SysListView32", "FolderView") ' на этом уровне значки рабочего стола
 
        If hWndListView = 0 Then MsgBox("Не можем найти SysListView32 на его месте - перезагружайте комп.", , "Доигрались!") : End
 
        SetParent(Me.Handle, hWndListView) 'Становимся дочерним окном для SysListView32
 
        MsgBox("До этого момента всё было хорошо, но теперь попробуем сделать форму полупрозрачной.")
 
        'Прозрачность через .Opacity больше не работает
        Me.Opacity = 0.7
 
        'Аналогично и этот вариант прозрачности
        SetLayeredWindowAttributes(Me.Handle, 0, 200, &H2) 'Где 200 это уровень необходимой прозрачности. Может быть от 0 до 255
 
        MsgBox("К сожалению форма больше не имеет возможности стать прозрачной.")
    End Sub
End Class
Я прикрепил исходники и exe.

Как можно понять, появилось ограничение - форма перестала реагировать на .Opacity.
Попытка сделать её полупрозрачной через
VB.NET
1
SetLayeredWindowAttributes(Me.Handle, 0, 200, &H2)
так же не сработала, форма визуально не изменилась.

Вопрос №1. Как теперь её сделать полупрозрачной?

Вопрос №2. Возможно ли достичь описанного поведения формы (заполнение собой экрана в том числе и под панелью задач) не делая её дочерней по отношению к рабочему столу?
Вложения
Тип файла: zip WindowsApplication1.zip (71.9 Кб, 2 просмотров)
0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,747
Записей в блоге: 1
21.06.2021, 16:07
Почему-то возникли мысли о чём-то не хорошем - подмена рабочего стола какая-то получается. Что затеяли?
0
3 / 3 / 1
Регистрация: 16.02.2015
Сообщений: 28
21.06.2021, 16:21  [ТС]
Uswer.
Нет, ничего вредного не задумал
Идея сделасть анимированный рабочий стол, выводить на него анимированные GIF и в будущем видео.

Сам пользуюсь подобной программой от стороннего разработчика, очень нрацца но хочу своё с блэк джеком и ш...... Может даже в прямом а не переносном смысле
0
3 / 3 / 1
Регистрация: 16.02.2015
Сообщений: 28
21.06.2021, 21:44  [ТС]
Uswer, вот что-то уже получается.
Изображения
 
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2021, 21:44
Помогаю со студенческими работами здесь

Гланая форма во весь экран, не пересекает границы панели задач
У меня гланая форма отображается во весь экран, при этом она пересекает границы панели задач, а мне надо чтоб она была во весь экран и чтоб...

Показать небольшую форму в правом нижнем углу экрана с учетом высоты панели задач
Приветствую всех! Друзья, помогите с советом. Пишу программу одну. Суть в том, что эта софтина должна выдавать оповещения. Стандартный...

Форма на весь экран с учетом масштаба компонентов
Как сделать, чтобы при растягивании формы размер компонентов так же менялся пропорционально форме?

Форма на весь экран (с учётом параметров монитора компьютера)
Здравия желаю! как всё-таки сделать форму на весь экран (с учётом параметров монитора компьютера)? Не могу разобраться и понять (без...

Программа пропадает с панели задач
Здравствуйте дорогие читателя этого замечательного форума! Когда я сворачивая главную форму(Auth.hide), то моя программа пропадает с...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
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 и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru