Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > PureBasic

PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач.

Закрытая тема
 
Опции темы
Старый 02.11.2007, 16:05   #1
Prof. BiG BanG
Оператор ЭВМ
 
Регистрация: 18.10.2007
Сообщений: 22
Написано 3 полезных сообщений
(для 3 пользователей)
Хорошо Прозрачность окон в Windows

Многие интересуются как сделать прозрачным какое-либо окно.
Если поискать в Интернете, почитать MSDN, справочники по WinApi, то окажется, что это вовсе не сложно (сложнее будет написать это на PureBasic'e)
Вот что у меня получилось:
OpenWindow(0,50,50,200,200,"Prof. BiG BanG")
;Открываем окно

aw=GetActiveWindow_()
;Получаем указатель(handle) на активное окно(то, которое открыли:))
SetWindowLong_(aw,#GWL_EXSTYLE,GetWindowLong_(aw,#GWL_EXSTYLE)!#WS_EX_LAYERED)
;Нужно для установки прозрачности окна

For i=0 To 255 
;прозрачность меняется от 0 до 255
  SetLayeredWindowAttributes_(aw,0,i,#LWA_ALPHA)
 ; устанавливаем прозрачность окна RedrawWindow_(aw,0,0,#RDW_ERASE|#RDW_INVALIDATE|#RDW_FRAME|#RDW_ALLCHILDREN)
;Перерисовываем содержимое окна
  Sleep_(10)
;Задержка(чтобы не расходовать зря время процессора)
 Event = WaitWindowEvent()
;ожидаем поступления сообщения окну
Next i

Ends=0
Repeat
  Event = WaitWindowEvent()
  ;Insert code here:)
  If Event = #PB_Event_CloseWindow
    Ends=1
  EndIf
Until Ends
Вот вроде и всё
(Offline)
 
Старый 02.11.2007, 16:27   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Прозрачность окон в Windows

А на сколько прозрачное будет? Есть возможность частично?
(Offline)
 
Старый 02.11.2007, 16:31   #3
Prof. BiG BanG
Оператор ЭВМ
 
Регистрация: 18.10.2007
Сообщений: 22
Написано 3 полезных сообщений
(для 3 пользователей)
Re: Прозрачность окон в Windows

Сообщение от MoKa
А на сколько прозрачное будет? Есть возможность частично?
SetLayeredWindowAttributes_(aw,0,i,#LWA_ALPHA)
Если i=0, например, то будет полностью прозрачное, а если i=255, то-непрозрачное
Можно устанавливать промежуточные значения.
В моём примере прозрачность меняется (i меняется от 0 до 255)
(Offline)
 
Старый 02.11.2007, 16:58   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Прозрачность окон в Windows

Prof. BiG BanG, оу, благодарю.
(Offline)
 
Старый 02.11.2007, 20:09   #5
PuSHiSTiCK
Оператор ЭВМ
 
Регистрация: 17.07.2006
Сообщений: 37
Написано 2 полезных сообщений
(для 0 пользователей)
Re: Прозрачность окон в Windows

Вот код, который и окошко прозрачным делает и еще регион окна меняет:

Global hWnd
Global transparent
Global Wait
TWait=5000
Global Start

Structure aPOINT
x.l
y.l
EndStructure

Structure bPOINT
aPOLYGON.aPOINT[10]
EndStructure

bPOLYGON.bPOINT

For k = 0 To 9
With bPOLYGON\aPOLYGON[k]
\x = Random(100)
\y = Random(100)
EndWith
Next

Procedure MyWindowCallback(WindowId, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select WindowId
Case 0
Default
Select Message
;Case #WM_NCHITTEST
; Result=#HTCAPTION
Case #WM_TIMER
Result=0
Select wParam
Case 1 ; fade in
If transparent<255
transparent +1
ElseIf transparent=255
KillTimer_(hWnd,1) ; stop, fade in ready
SetTimer_(hWnd,2,TWait,0) ; set pause
EndIf
SetLayeredWindowAttributes_(hWnd,0,transparent,2) ;
Case 2 ; pause ready
KillTimer_(hWnd,2)
SetTimer_(hWnd,3,3,0) ; set fade out
Case 3 ; fade out
If transparent>0
transparent -1
ElseIf transparent=0
KillTimer_(hWnd,3)
Start=1 ; start main app
EndIf
SetLayeredWindowAttributes_(hWnd,0,transparent,2) ;
EndSelect
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure

hWnd= OpenWindow(2, 1,1, 291, 155, "",#PB_Window_BorderLess | #PB_Window_Invisible | #WS_POPUP )
SetWindowPos_(hWnd,#HWND_TOPMOST,(GetSystemMetrics _(#SM_CXSCREEN)/2)-(WindowWidth(2)/2),(GetSystemMetrics_(#SM_CYSCREEN)/2)-(WindowHeight(2)/2),291,155, 0 )

If hWnd
SetWindowLong_(hWnd,#GWL_EXSTYLE,$00080000|#WS_EX_ PALETTEWINDOW)
SetLayeredWindowAttributes_(hWnd,0,0,2) ;completely transparent
h = CreatePolygonRgn_(bPOLYGON, 10, #ALTERNATE)
If CatchImage(0, ?Logo)
If CreateGadgetList(WindowID(2))
SetWindowRgn_(hWnd, h, True)
ImageGadget(0, 0, 0, 0, 0, ImageID(0))
SetWindowLong_(GadgetID(0),#WS_BORDER,0)
HideWindow(2,0)
SetWindowCallback(@MyWindowCallback())
SetTimer_(hWnd,1,3,0)
Repeat
WaitWindowEvent()
Until Start=1 ; wait until splashwindow finished
CloseWindow(2)
hWnd= OpenWindow(1, 200, 200, 673, 155 ,"PB App",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
EndIf
EndIf

Писал быстро. Извиняйте за некрасивость
Тут случайным образом генерируются точки региона окна. Указав точки, вместо их генерирования можно делать окошки самых разных форм. ПОЛИГОНАЛЬНЫЙ регион рисуется, заполняя эти точки. Если хотим нарисовать отдельные друг от друга регионы - то создаем каждый, а потом

int CombineRgn(

HRGN hrgnDest, // handle to destination region
HRGN hrgnSrc1, // handle to source region
HRGN hrgnSrc2, // handle to source region
int fnCombineMode // region combining mode
);


Parameters

hrgnDest

Identifies a new region with dimensions defined by combining two other regions. (This region must exist before CombineRgn is called.)

hrgnSrc1

Identifies the first of two regions to be combined.

hrgnSrc2

Identifies the second of two regions to be combined.

fnCombineMode

Specifies a mode indicating how the two regions will be combined. This parameter can be one of the following values:

Value Description
RGN_AND Creates the intersection of the two combined regions.
RGN_COPY Creates a copy of the region identified by hrgnSrc1.
RGN_DIFF Combines the parts of hrgnSrc1 that are not part of hrgnSrc2.
RGN_OR Creates the union of two combined regions.
RGN_XOR Creates the union of two combined regions except for any overlapping areas

это - выписка из Микрософтовского АПИ-шного справочника.
(Offline)
 
Закрытая тема


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прозрачность в OpenGL XenuS C++ 8 09.11.2007 01:13
Альфа(Прозрачность) Atomikc 2D-программирование 15 16.04.2007 18:35
Прозрачность Valet Создание текстур 12 13.02.2007 00:44
Прозрачность _maxim_ 3D-программирование 5 21.11.2006 20:51
Прозрачность в Blitz SubZer0 Библиотеки 2 04.10.2005 00:48


Часовой пояс GMT +4, время: 05:42.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com