Что нового

Как убрать мерцания прозрачных окон с картинками при перемещении

mmsgeorge

Новичок
Сообщения
96
Репутация
0
Здравствуйте! При перемещении главного окна - "Задняя часть(желтая)", перемещаются второстепенные окна с картинкой и мерцают. Сами окна прозрачные. Стиль $WS_EX_COMPOSITED не совсем помог. Как убрать мерцание?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Icons.au3>
#include "GIFAnimation.au3"
#include <GDIPlus.au3>
#include <WinAPISys.au3>
#include <Misc.au3>

#cs
	=============__COMENTS__===========
	|_____-ВИЗУАЛЬНАЯ ЧАСТЬ КОДА-_____|

	/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
	|\/\/\/\/\Функция\/\/\/\/\/\/|
	\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/

	/0-0-0-0-0-0-0-0-0-0-0-0-0-0-0\
	|0-0-Обьявление переменных-0-0|
	\0-0-0-0-0-0-0-0-0-0-0-0-0-0-0/

	/()()()()()()()()()()()()()()\
	|()()Параметры переменных()()|
	\()()()()()()()()()()()()()()/

	/----------------------------\
	|-------разьяснение кода-----|
	\----------------------------/

	|__________-СОКРАЩЕНИЯ-___________|
	-kn-кнопка
	-ok-окно
	-pr-переменная
	====================================
#ce
Opt("GUIOnEventMode", 1)
;=====================================================================;
;=====================================================================;
;=====;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=====;
;=====;;;;;;;;;;;;;;;;;;;;;;; START ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=====;
;=====;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=====;
;=====================================================================;
;=====================================================================;
;/0-0-0-0-0-0-0-0-0-0-0-0-0-0-0\;
;------Startovie parametri-----;
;(Координаты Начальные);
Global $xx[100]
Global $yy[100]
Global $Razmer_Shirina[100]
Global $Razmer_Visota[100]
;o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o;


;==================================================================================
;/\/\/\/\/\/\/\/\/\-НАЧАЛЬНОЕ ОКНО-/\/\/\/\/\/\/\/\/\/\:
;______________________( 0 )_________________________:
;0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0;
Global $Ok_Nachalinoe_okno
Global $Ok_Levaya_verhyaya_knopka_1
Global $Ok_Pravaya_verhyaya_knopka_2
Global $Ok_Levaya_nignyaya_knopka_3
Global $Ok_Pravaya_nignyaya_knopka_4
Global $Pr_Vkluchen_proces
;o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o;
;/()()()()()()()()()()()()()()()()()()()\
$Pr_Vkluchen_proces = 0
Global Const $SC_DRAGMOVE = 0xF012 ;0xF012 --- Это клик по заголовку окна (смотреть в хелпе WM_SYSCOMMAND)
Local $pr_Put_Zadnya_chast = "C:\Users\Lilu\Desktop\PROEKT AUTOIT\Программа по Репосту\Изображения\Начальное окно\Zadnya_chast.png"
Local $pr_Put_Levaya_nignyaya_knopka_1 = "C:\Users\Lilu\Desktop\PROEKT AUTOIT\Программа по Репосту\Изображения\Начальное окно\Levaya_verhyaya_knopka_1.png"
Local $pr_Put_Pravaya_verhyaya_knopka_2 = "C:\Users\Lilu\Desktop\PROEKT AUTOIT\Программа по Репосту\Изображения\Начальное окно\Pravaya_verhyaya_knopka_2.png"
Local $pr_Put_Levaya_nignyaya_knopka_3 = "C:\Users\Lilu\Desktop\PROEKT AUTOIT\Программа по Репосту\Изображения\Начальное окно\Levaya_nignyaya_knopka_3.png"
Local $pr_Put_Pravaya_nignyaya_knopka_4 = "C:\Users\Lilu\Desktop\PROEKT AUTOIT\Программа по Репосту\Изображения\Начальное окно\Pravaya_nignyaya_knopka_4.png"

;\()()()()()()()()()()()()()()()()()()()/
;-------------------------------------;
;$WS_POPUPWINDOW----Создает всплывающее окно со стилями $WS_BORDER, $WS_POPUP, и $WS_SYSMENU. Для того чтобы сделать системное меню доступным,
;$WS_EX_LAYERED----Создаёт многослойное окно. Не может быть использовано в качестве дочернего окна.
;$WS_EX_TOPMOST----Поверх всех окон, даже если окно неактивно.
;-------------------------------------;
;;;;;;;;;;;;;;;;;;;;;;;;-ZADNYAYA CHAST-;;;;;;;;;;;;;;;;;;;;;
_GDIPlus_Startup()
Local $pr_hImage = _GDIPlus_ImageLoadFromFile($pr_Put_Zadnya_chast)
;ConsoleWrite($pr_hImage&@CRLF)
Local $pr_Shirina_objekta = _GDIPlus_ImageGetWidth($pr_hImage)
Local $pr_Visota_objekta = _GDIPlus_ImageGetHeight($pr_hImage)
Local $pr_hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pr_hImage)
$index_massiv = 1
papmetri_ellementa($index_massiv, 0, 0, $pr_Shirina_objekta, $pr_Visota_objekta)
$Ok_Nachalinoe_okno = GUICreate("", $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv], $xx[$index_massiv], $yy[$index_massiv], $WS_POPUPWINDOW, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) ;создает главное окно
GUIRegisterMsg($WM_LBUTTONDOWN, 'Peremeshenie_okna')
;local $pr_izmenennie_kartinki = Izmenenie_razmerov_kartinki($pr_hImage, 400, 400);-изменяет размеры картинки
_WinAPI_UpdateLayeredWindowEx($Ok_Nachalinoe_okno, -1, -1, $pr_hBitmap, 250)
_WinAPI_DeleteObject($pr_hBitmap)
_GDIPlus_ImageDispose($pr_hImage)
;_GDIPlus_ImageDispose($pr_izmenennie_kartinki);-выгружает размеры кратинки
GUISetState()
;;;;;;;;;;;;;;;;;;;;;;;;-Levaya_nignyaya_knopka_1-;;;;;;;;;;;;;;;;;;;;;
Local $pr_hImage = _GDIPlus_ImageLoadFromFile($pr_Put_Levaya_nignyaya_knopka_1)
Local $pr_Shirina_objekta = _GDIPlus_ImageGetWidth($pr_hImage)
Local $pr_Visota_objekta = _GDIPlus_ImageGetHeight($pr_hImage)
Local $pr_hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pr_hImage)
$index_massiv = 1
papmetri_ellementa($index_massiv, $xx[1] + 99, $yy[1] + 99, $pr_Shirina_objekta, $pr_Visota_objekta)
$Ok_Levaya_nignyaya_knopka_1 = GUICreate("", $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv], $xx[$index_massiv], $yy[$index_massiv], $WS_POPUPWINDOW + $WS_EX_COMPOSITED, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), $Ok_Nachalinoe_okno) ;создает главное окно
_WinAPI_UpdateLayeredWindowEx($Ok_Levaya_nignyaya_knopka_1, 0, 0, $pr_hBitmap, 250)
GUISetState()
;;;;;;;;;;;;;;;;;;;;;;;;-Pravaya_verhyaya_knopka_2-;;;;;;;;;;;;;;;;;;;;;
Local $pr_hImage = _GDIPlus_ImageLoadFromFile($pr_Put_Pravaya_verhyaya_knopka_2)
Local $pr_Shirina_objekta = _GDIPlus_ImageGetWidth($pr_hImage)
Local $pr_Visota_objekta = _GDIPlus_ImageGetHeight($pr_hImage)
Local $pr_hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pr_hImage)
$index_massiv = 2
papmetri_ellementa($index_massiv, $xx[1] + 329, $yy[1] + 99, $pr_Shirina_objekta, $pr_Visota_objekta)
$Ok_Pravaya_verhyaya_knopka_2 = GUICreate("", $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv], $xx[$index_massiv], $yy[$index_massiv], $WS_POPUPWINDOW + $WS_EX_COMPOSITED, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), $Ok_Nachalinoe_okno) ;создает главное окно
_WinAPI_UpdateLayeredWindowEx($Ok_Pravaya_verhyaya_knopka_2, 0, 0, $pr_hBitmap, 250)
GUISetState()

;;;;;;;;;;;;;;;;;;;;;;;;-Levaya_nignyaya_knopka_3-;;;;;;;;;;;;;;;;;;;;;
Local $pr_hImage = _GDIPlus_ImageLoadFromFile($pr_Put_Levaya_nignyaya_knopka_3)
Local $pr_Shirina_objekta = _GDIPlus_ImageGetWidth($pr_hImage)
Local $pr_Visota_objekta = _GDIPlus_ImageGetHeight($pr_hImage)
Local $pr_hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pr_hImage)
$index_massiv = 4
papmetri_ellementa($index_massiv, $xx[1] + 99, $yy[1] + 330, $pr_Shirina_objekta, $pr_Visota_objekta)
$Ok_Levaya_nignyaya_knopka_3 = GUICreate("", $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv], $xx[$index_massiv], $yy[$index_massiv], $WS_POPUPWINDOW + $WS_EX_COMPOSITED, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), $Ok_Nachalinoe_okno) ;создает главное окно
_WinAPI_UpdateLayeredWindowEx($Ok_Levaya_nignyaya_knopka_3, 0, 0, $pr_hBitmap, 250)
GUISetState()
;;;;;;;;;;;;;;;;;;;;;;;;-Pravaya_nignyaya_knopka_4-;;;;;;;;;;;;;;;;;;;;;
Local $pr_hImage = _GDIPlus_ImageLoadFromFile($pr_Put_Pravaya_nignyaya_knopka_4)
Local $pr_Shirina_objekta = _GDIPlus_ImageGetWidth($pr_hImage)
Local $pr_Visota_objekta = _GDIPlus_ImageGetHeight($pr_hImage)
Local $pr_hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pr_hImage)
$index_massiv = 5
papmetri_ellementa($index_massiv, $xx[1] + 330, $yy[1] + 330, $pr_Shirina_objekta, $pr_Visota_objekta)
$Ok_Pravaya_nignyaya_knopka_4 = GUICreate("", $Razmer_Shirina[$index_massiv], $Razmer_Visota[$index_massiv], $xx[$index_massiv], $yy[$index_massiv], $WS_POPUPWINDOW + $WS_EX_COMPOSITED, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), $Ok_Nachalinoe_okno) ;создает главное окно
_WinAPI_UpdateLayeredWindowEx($Ok_Pravaya_nignyaya_knopka_4, 0, 0, $pr_hBitmap, 250)
GUISetState()
GUIRegisterMsg($WM_MOVE, 'Peremeshenie_vseh_chastei_nachalinogo_okna')

;Peremeshenie_vseh_chastei_nachalinogo_okna($Ok_Levaya_nignyaya_knopka_1, $WM_MOVE, 0, 0)
;Peremeshenie_vseh_chastei_nachalinogo_okna($Ok_Pravaya_verhyaya_knopka_2, $WM_MOVE, 0, 0)
;Peremeshenie_vseh_chastei_nachalinogo_okna($Ok_Levaya_nignyaya_knopka_3, $WM_MOVE, 0, 0)
;Peremeshenie_vseh_chastei_nachalinogo_okna($Ok_Pravaya_nignyaya_knopka_4, $WM_MOVE, 0, 0)









GUISwitch($Ok_Nachalinoe_okno) ;переключение на главное окно

;_______________________________________________0:
;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/:


;##########################################################################
;##########Blok_Dvigatel###################################################
While 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;######################################
	Sleep(100) ; Цикл ожидания
	If _IsPressed("1B") Then
		Exit
	EndIf
	;######################################
WEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;######################################
;##########################################################################
;##########################################################################
Func Peremeshenie_okna($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $Ok_Nachalinoe_okno
			_SendMessage($Ok_Nachalinoe_okno, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
		Case $pr_hBitmap
			Return $HTCAPTION
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>Peremeshenie_okna

Func Peremeshenie_vseh_chastei_nachalinogo_okna($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $Ok_Nachalinoe_okno

			Local $Pos = WinGetPos($Ok_Nachalinoe_okno)

			If IsArray($Pos) Then

				WinMove($Ok_Levaya_nignyaya_knopka_1, '', $Pos[0], $Pos[1])
				WinMove($Ok_Pravaya_verhyaya_knopka_2, '', $Pos[0], $Pos[1])
				WinMove($Ok_Levaya_nignyaya_knopka_3, '', $Pos[0], $Pos[1])
				WinMove($Ok_Pravaya_nignyaya_knopka_4, '', $Pos[0], $Pos[1])
				Sleep(20)
			EndIf
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>Peremeshenie_vseh_chastei_nachalinogo_okna




Func Izmenenie_razmerov_kartinki($hImage, $iWidth, $iHeight)

	Local $aResult = DllCall($__g_hGDIPDll, 'uint', 'GdipGetImageThumbnail', 'ptr', $hImage, 'uint', $iWidth, 'uint', $iHeight, 'ptr*', 0, 'ptr', 0, 'ptr', 0)

	If @error Then
		Return SetError(@error, @extended, 0)
	EndIf
	Return $aResult[4]
EndFunc   ;==>Izmenenie_razmerov_kartinki

;==================================================================================
;/\/\/\/\/\/\/\-Параметры обьекта рассположения-/\/\/\/\/\/\:
;____________________( - )_____________________:
;Настройка рассположения елемента
;->Закрывает Окно Новости
Func papmetri_ellementa($index, $x_cor, $y_cor, $razmer_w, $razmer_h)
	$xx[$index] = $x_cor
	$yy[$index] = $y_cor
	$Razmer_Shirina[$index] = $razmer_w
	$Razmer_Visota[$index] = $razmer_h
EndFunc   ;==>papmetri_ellementa
;_________________________________________-:
;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/:
 

Вложения

  • Zadnya_chast.png
    Zadnya_chast.png
    11.8 КБ · Просмотры: 5
  • Levaya_nignyaya_knopka_3.png
    Levaya_nignyaya_knopka_3.png
    7.3 КБ · Просмотры: 4
  • Levaya_verhyaya_knopka_1.png
    Levaya_verhyaya_knopka_1.png
    5.3 КБ · Просмотры: 4
  • Pravaya_nignyaya_knopka_4.png
    Pravaya_nignyaya_knopka_4.png
    7.5 КБ · Просмотры: 4
  • Pravaya_verhyaya_knopka_2.png
    Pravaya_verhyaya_knopka_2.png
    5.5 КБ · Просмотры: 4
Автор
M

mmsgeorge

Новичок
Сообщения
96
Репутация
0
вообщем вышел из положения, на задний фон нанес такой же красный круг, а концы кнопок уменьшил, и все норм) Но, если кто то знает как по другому сделать , поделитесь пожалуйста, на будущее.
 
A

Alofa

Гость
mmsgeorge сказал(а):
вообщем вышел из положения...
Костыль.

mmsgeorge сказал(а):
... если кто то знает как по другому сделат..
В коде вы используете GDIPlus.au3 - так зачем вам костыли, да и внешние рисунки тоже. Всю графику можно нарисовать при помощи функций этой мощной библиотеки.
 
Автор
M

mmsgeorge

Новичок
Сообщения
96
Репутация
0
Alofa
Это пока они просто залиты красным цветом, потом будет обьем. Да и опыта столько нету)


Добавлено:
Сообщение автоматически объединено:

Alofa
а можно ли в автоит сделать отражение? блики, я могу их сделать в фотошопе, но прикольно было бы если бы они менялись динамически.


Добавлено:
Сообщение автоматически объединено:

Alofa
Я подумал, что можно сделать гифку, где блик ездит сверху вниз, слева направо, по всей области, в потом в зависимости от движения обьекта, воспроизводить определенные кадры, думаешь норм такое сделать?


Добавлено:
Сообщение автоматически объединено:

Alofa
Вот что получилось, сырой вариант. http://dropmefiles.com/SZWB5
 
Верх