smdoss Ответов: 1

Как сделать дочернюю форму MDI прозрачной в vb6


Это мой код.

Option Explicit
Const LW_KEY = &H1
Const G_E = (-20)
Const W_E = &H80000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function ReleaseCapture Lib "user32.dll" () As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const LWA_ALPHA = &H2
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const ULW_COLORKEY = &H1
Private Const ULW_ALPHA = &H2
Private Const ULW_OPAQUE = &H4
Private Const WS_EX_LAYERED = &H80000

Private Sub Form_Load()
Dim Ret As Long
Dim TC As Long
TC = &HC000C0
Ret = GetWindowLong(Me.hwnd, G_E)
Ret = Ret Or W_E
SetWindowLong Me.hwnd, G_E, Ret
Me.BackColor = TC
SetLayeredWindowAttributes Me.hwnd, TC, 0, LWA_COLORKEY
End Sub


Что я уже пробовал:

Этот код работал в формах SDI, но не работал в дочерней форме MDI.
Как сделать так, чтобы сделать детскую форму прозрачной заднего цвета со слоистым окном?
Пожалуйста, помогите мне.
Заранее Спасибо

smdoss

Привет, Джерри, Спасибо за твой совет. Тогда я попробую что-то изменить в своем коде с помощью вашего совета. Наконец я получаю результат. Дочерняя форма MDI действительно прозрачна. Сначала я помещаю код в родительскую форму и помещаю код в дочернюю форму. Это сработало нормально. В то же время я хочу видеть содержимое элементов управления другой дочерней формы, но прозрачная дочерняя форма не показывает содержимое других дочерних форм. что я могу сделать? пожалуйста помочь.
И как я могу загрузить примерные изображения результата моего проекта?(извините за мой бедный язык)

1 Ответов

Рейтинг:
6

Gerry Schmitz

Цитата:
Ну, дочерние формы MDI не поддерживают независимую прозрачность. Дочерняя форма MDI фактически является дочерним элементом управления родительского элемента MDI, поэтому, как и все другие дочерние элементы управления, их прозрачность зависит от родительской формы. Вы можете установить TransparencyKey родителя, а затем, если этот цвет присутствует на дочернем элементе (вы можете использовать другой pictureBox, чтобы сделать это на дочерней форме), вы будете видеть прямо через них обоих. Однако невозможно установить прозрачный ключ ребенка и видеть его насквозь до родителя.


Как сделать дочернюю форму MDI прозрачной в vb6[^]


Maciej Los

Джерри, ссылка сломана, потому что она ссылается на эту страницу.

Richard Deeming

У вас есть ответ, ожидающий в комментариях к вопросу.