Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/48: Рейтинг темы: голосов - 48, средняя оценка - 4.83
 Аватар для Spiritsun
33 / 6 / 0
Регистрация: 12.01.2010
Сообщений: 85

Как пользоваться API UpdateLayeredWindow

13.02.2010, 10:46. Показов 10525. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто знает как пользоваться API UpdateLayeredWindow в vba .net 2008?! Проблема такая. Далаю круглые часы на рабочий стол. Изображение фона часов в формате png (вобщем не важно), c альфа каналом (полупрозрачные края). Хочу, чтобы края оставались полупрозрачными и имели сглаживание. Пытаюсь делать так, выставляю цвет фона формы .BackColor и .TransparencyKey равными, но тут возникает проблема, эти самые края с альфа каналом в png накладываются на фон до установки прозрачности и остаются видимыми. Тобиж получается окантовка с цветом фона.

Пример:
png можно скачать отсюда
Название: fon.png
Просмотров: 89

Размер: 45.6 Кб
результат такой (виден зелёный контур)
Название: demofon.jpg
Просмотров: 89

Размер: 34.4 Кб
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
' Argb(0, 255, 0) выставлен в роли прозрачного цвета 
Imports System 
Imports System.IO 
Imports System.Text 
Imports System.Globalization 
Imports System.Drawing.Imaging 
Imports System.Windows.Forms 
Imports System.Windows 
Imports System.Math 
Public Class Main 
Dim formclock As New Form 
Dim clockimage As Image = Image.FromFile("fon.png") 
Dim clockimgbitmap As New Bitmap(clockimage) 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
formclock.FormBorderStyle = FormBorderStyle.None 
formclock.StartPosition = FormStartPosition.Manual 
formclock.Location = New System.Drawing.Point(100,100) 
formclock.TopMost = True 
formclock.AutoSize = False 
formclock.BackColor = Color.FromArgb(0, 255, 0) 
formclock.TransparencyKey = Color.FromArgb(0, 255, 0) ' прозрачный цвет фона 
formclock.BackgroundImage = clockimage 
' formclock.Size = New Size(clockimage.Size.Width, clockimage.Size.Height) 
formclock.Show() 
System.Windows.Forms.Application.DoEvents() 
End Sub 
End Class
Вот то, что смог найти, но не смог разобраться:
http://msdn.microsoft.com/en-u... 97507.aspx
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2010, 10:46
Ответы с готовыми решениями:

Как пользоваться WMI API
Добрый день пишу программу которая выводила бы информацию о ПК(Процеесор, видеокарта, оперативная память, подключенные устройства)....

MailAgent API: существует ли такая библиотека и как ею пользоваться
Добрый день. Если ли возможность манипулировать MailAgen'том через мою программу, а главное отправлять сообщения? Есть ли какая нибудь...

Как пользоваться API сервиса яндекса коротких ссылок?
Добрый! Пытаюсь подключить к сервису яндекса коротких ссылок. var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest...

23
stephanthe
24.12.2010, 14:29
Студворк — интернет-сервис помощи студентам
А где можно почитать про expression blend ?
 Аватар для FenikS91
34 / 16 / 0
Регистрация: 13.02.2016
Сообщений: 22
28.02.2016, 22:07
вот рабочий код чтобы установить png фон для формы с альфа каналом

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Public Class Win32
    Public Enum Bool
        bFalse = 0
        bTrue = 1
    End Enum
 
    <StructLayout(LayoutKind.Sequential)>
    Public Structure Point
 
        Public x As Int32
        Public y As Int32
 
        Public Sub New(x As Int32, y As Int32)
            Me.x = x
            Me.y = y
        End Sub
    End Structure
 
 
    <StructLayout(LayoutKind.Sequential)>
    Public Structure Size
        Public cx As Int32
        Public cy As Int32
 
        Public Sub New(cx As Int32, cy As Int32)
            Me.cx = cx
            Me.cy = cy
        End Sub
    End Structure
 
 
 
    <StructLayout(LayoutKind.Sequential, Pack:=1)>
    Structure ARGB
 
        Public Blue As Byte
        Public Green As Byte
        Public Red As Byte
        Public Alpha As Byte
    End Structure
 
 
 
    <StructLayout(LayoutKind.Sequential, Pack:=1)>
    Public Structure BLENDFUNCTION
        Public BlendOp As Byte
        Public BlendFlags As Byte
        Public SourceConstantAlpha As Byte
        Public AlphaFormat As Byte
    End Structure
 
 
 
    Public Const ULW_COLORKEY As Int32 = &H1
    Public Const ULW_ALPHA As Int32 = &H2
    Public Const ULW_OPAQUE As Int32 = &H4
 
    Public Const AC_SRC_OVER As Byte = &H0
    Public Const AC_SRC_ALPHA As Byte = &H1
 
 
    <DllImport("user32.dll", ExactSpelling:=True, SetLastError:=True)>
    Public Shared Function UpdateLayeredWindow(hwnd As IntPtr, hdcDst As IntPtr, ByRef pptDst As Point, ByRef psize As Size, hdcSrc As IntPtr, ByRef pprSrc As Point, crKey As Int32, ByRef pblend As BLENDFUNCTION, dwFlags As Int32) As Bool
 
    End Function
 
    <DllImport("user32.dll", ExactSpelling:=True, SetLastError:=True)>
    Public Shared Function GetDC(hWnd As IntPtr) As IntPtr
 
    End Function
    <DllImport("user32.dll", ExactSpelling:=True)>
    Public Shared Function ReleaseDC(hWnd As IntPtr, hDC As IntPtr) As Integer
    End Function
    <DllImport("gdi32.dll", ExactSpelling:=True, SetLastError:=True)>
    Public Shared Function CreateCompatibleDC(hDC As IntPtr) As IntPtr
 
    End Function
    <DllImport("gdi32.dll", ExactSpelling:=True, SetLastError:=True)>
    Public Shared Function DeleteDC(hdc As IntPtr) As Bool
 
    End Function
    <DllImport("gdi32.dll", ExactSpelling:=True)>
    Public Shared Function SelectObject(hDC As IntPtr, hObject As IntPtr) As IntPtr
 
    End Function
    <DllImport("gdi32.dll", ExactSpelling:=True, SetLastError:=True)>
    Public Shared Function DeleteObject(hObject As IntPtr) As Bool
 
    End Function
End Class
 
Public MustInherit Class PerPixelAlphaForm
    Inherits Form
 
    Public Sub New()
        FormBorderStyle = FormBorderStyle.None
    End Sub
    Public Overloads Sub SetBitmap(bmp As Bitmap)
        SetBitmap(bmp, 255)
    End Sub
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H80000
            Return cp
 
 
 
        End Get
    End Property
    Public Overloads Sub SetBitmap(bmp As Bitmap, Opacity As Byte)
 
        If bmp.PixelFormat <> PixelFormat.Format32bppArgb Then
            Throw New ApplicationException("The Bitmap must be a 32bpp with a Alpha Channel")
        End If
 
        Dim ScreenDC As IntPtr = Win32.GetDC(IntPtr.Zero)
        Dim MemDC As IntPtr = Win32.CreateCompatibleDC(ScreenDC)
        Dim hBitmap As IntPtr = IntPtr.Zero
        Dim oldBitmap As IntPtr = IntPtr.Zero
        Try
            hBitmap = bmp.GetHbitmap(Color.FromArgb(0))
            oldBitmap = Win32.SelectObject(MemDC, hBitmap)
            Dim thesize As Win32.Size = New Win32.Size(bmp.Width, bmp.Height)
            Dim pointSource As Win32.Point = New Win32.Point(0, 0)
            Dim topPos As Win32.Point = New Win32.Point(Left, Top)
            Dim blend As Win32.BLENDFUNCTION = New Win32.BLENDFUNCTION()
            blend.BlendOp = Win32.AC_SRC_OVER
            blend.BlendFlags = 0
            blend.SourceConstantAlpha = Opacity
            blend.AlphaFormat = Win32.AC_SRC_ALPHA
            Win32.UpdateLayeredWindow(Handle, ScreenDC, topPos, New Win32.Size(Size.Width, Size.Height), MemDC, pointSource, 0, blend, Win32.ULW_ALPHA)
 
        Catch ex As Exception
 
        Finally
            Win32.ReleaseDC(IntPtr.Zero, ScreenDC)
            If Not hBitmap = IntPtr.Zero Then
                Win32.SelectObject(MemDC, oldBitmap)
                Win32.DeleteObject(hBitmap)
            End If
            Win32.DeleteDC(MemDC)
 
        End Try
 
 
    End Sub
End Class
Использование класса

VB.NET
1
2
3
4
5
6
7
8
Public Class Form1
    Inherits PerPixelAlphaForm
    Private useBackground As Bitmap
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        useBackground = New Bitmap(My.Resources.testpng)
        SetBitmap(useBackground)
    End Sub
End Class
0
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.02.2016, 06:29
FenikS91, для сплешскрина может подойти, так как контроллы на такой форме не прорисовываются.
Ну и вот не знаю, у кого как, а у меня это:

0
29.02.2016, 18:02

Не по теме:

Старт топика 2010 год, а как будто вчера)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.02.2016, 18:02

как пользоваться программатором для Whirlpool, раздобыл программатор, а как им пользоваться я не знаю
подскажите плиз

Какими библиотеками лучше пользоваться для работы с vk API?
Привет, Какими библиотеками лучше пользоваться для работы с vk API?

не работает функция UpdateLayeredWindow
Почему не работает функция UpdateLayeredWindow? T.e. ошибки не возникает, но и окна невидно :(( Делаю так: 1. Создаю окно CreateEx с...

UpdateLayeredWindow (из WinApi) в Qt. А именно окна произвольной формы в Qt
Привет ещё раз! :) Можно ли и если да, то с помощью чего, сделать окно произвольной формы? Не то есть чтоб можно было как - то рисовать,...

Steam API - как можно получить медиану цен через API?
Ребят, как можно получить медиану цен через API ? Интересует количество продаж за последний день. Инфу по предмету получаю таким...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru