Что нового

Как на окно GUI добавить png-картинку

Snegovik

Новичок
Сообщения
47
Репутация
0
Доброго дня.
У меня появился вопрос по GUI - помогите пожалуйста решить.

Существует пнг-картинка с прозрачным фоном.
У этой картинки есть ширина и высота.
Как создать интерфейс GUI - который бы подобрал такую ширину и высоту окна (которая бы соответствовала картинке png) и вписал бы в окно эту картинку ?

То есть это то же самое окно, только на него будет наложена png-картинка.
 

Вложения

  • 1.png
    1.png
    72.7 КБ · Просмотры: 7

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
На форуме много примеров. Есть поиск. Внизу своей темы посмотри сходные темы.
 
Автор
S

Snegovik

Новичок
Сообщения
47
Репутация
0
joiner, я нашел вот такой скрипт:

Код:
#include <Constants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
#Include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Global Const $STM_SETIMAGE = 0x172


;$hGUI = GUICreate("Test")
$hGUI = GUICreate("PET", 324, 243, -1, -1, $WS_POPUP, BitOr($WS_EX_LAYERED,$WS_EX_TOOLWINDOW, $GUI_WS_EX_PARENTDRAG))
$Pic = GUICtrlCreatePic("", 0, 0, 324, 243, -1, $GUI_WS_EX_PARENTDRAG)
_SetPNGIntoPicControl($Pic, @ScriptDir & "\1.png")

$hLab_1 = GUICtrlCreateLabel ( "Text 1", 55, 20, 50, 20 )
$hLab_2 = GUICtrlCreateLabel ( "Text 2", 55, 53, 50, 20 )
$hLab_3 = GUICtrlCreateLabel ( "Text 3", 55, 86, 50, 20 )
$hLab_4 = GUICtrlCreateLabel ( "15.59 - 19/01/2014", 15, 110, 100, 20 )

GUICtrlSetFont ($hLab_1, 10, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_1, 0xE1E100 )
GUICtrlSetBkColor ($hLab_1,$GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont ($hLab_2, 10, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_2, 0xE1E100 )
GUICtrlSetBkColor ($hLab_2,$GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont ($hLab_3, 10, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_3, 0xE1E100 )
GUICtrlSetBkColor ($hLab_3,$GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont ($hLab_4, 7, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_4, 0xFFFFFF )
GUICtrlSetBkColor ($hLab_4,$GUI_BKCOLOR_TRANSPARENT)


GUISetState()
GUISetBkColor ( 0x000000 )

While True
    $msg = GUIGetMsg()
    Switch $msg
        Case -3
            Exit
    EndSwitch
WEnd

Func _SetPNGIntoPicControl($iPic, $sPNGFile)
    _GDIPlus_Startup()
    Local $hImage = _GDIPlus_ImageLoadFromFile($sPNGFile)
    Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _WinAPI_DeleteObject(GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap))
    _WinAPI_DeleteObject($hBitmap)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
EndFunc

Но я не могу определить - поддерживается ли здесь прозрачный фон или нет, поскольку фон окна - черный.
И еще - размеры окна здесь - приходится задавать вручную "...$hGUI = GUICreate("PET", 324, 243..." в коде эти размеры не подстраиваются под размеры картинки.
Как это изменить ?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
#include <GDIPlus.au3>
#include <WinAPIEx.au3>
#include <GUIConstants.au3>

$hGUI = GUICreate("PET", 324, 243, -1, -1, $WS_POPUP, BitOr($WS_EX_LAYERED,$WS_EX_TOOLWINDOW, $GUI_WS_EX_PARENTDRAG))
GUISetBkColor(50)
$Pic = GUICtrlCreatePic("", 0, 0, 324, 243, -1, $GUI_WS_EX_PARENTDRAG)
_SetPNGIntoPicControl($Pic, @ScriptDir & "\1.png")

$hLab_1 = GUICtrlCreateLabel ( "Text 1", 55, 20, 50, 20 )
$hLab_2 = GUICtrlCreateLabel ( "Text 2", 55, 53, 50, 20 )
$hLab_3 = GUICtrlCreateLabel ( "Text 3", 55, 86, 50, 20 )
$hLab_4 = GUICtrlCreateLabel ( "15.59 - 19/01/2014", 15, 110, 100, 20 )

GUICtrlSetFont ($hLab_1, 10, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_1, 0xE1E100 )
GUICtrlSetBkColor ($hLab_1,-2)
GUICtrlSetFont ($hLab_2, 10, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_2, 0xE1E100 )
GUICtrlSetBkColor ($hLab_2,-2)
GUICtrlSetFont ($hLab_3, 10, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_3, 0xE1E100 )
GUICtrlSetBkColor ($hLab_3,-2)
GUICtrlSetFont ($hLab_4, 7, 600, 0,"Tahoma")
GUICtrlSetColor ( $hLab_4, 0xFFFFFF )
GUICtrlSetBkColor ($hLab_4,-2)
_WinAPI_SetLayeredWindowAttributes($hGUI, 50, 255)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
    EndSwitch
WEnd

Func _SetPNGIntoPicControl($iPic, $sPNGFile)
    _GDIPlus_Startup()
    Local $hImage = _GDIPlus_ImageLoadFromFile($sPNGFile)
    Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _WinAPI_DeleteObject(GUICtrlSendMsg($iPic, 0x172, 0, $hBitmap))
    _WinAPI_DeleteObject($hBitmap)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
EndFunc

только клик проходит через окно ))
зачем прозрачная средина?
 
Автор
S

Snegovik

Новичок
Сообщения
47
Репутация
0
joiner
У вас тоже - размеры окна здесь - задаются вручную "...$hGUI = GUICreate("PET", 324, 243..." а не подстраиваются под размеры картинки.
(Тут смысл в том, что картинка может быть любого размера.)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
#include <GDIPlus.au3>
#include <WinAPIEx.au3>
#include <GUIConstants.au3>

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\1.png")
$Width = _GDIPlus_ImageGetWidth($hImage)
$Height = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

$hGUI = GUICreate("PET", $Width, $Height, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW, $GUI_WS_EX_PARENTDRAG))
GUISetBkColor(50)
$Pic = GUICtrlCreatePic("", 0, 0, $Width, $Height, -1, $GUI_WS_EX_PARENTDRAG)
_SetPNGIntoPicControl($Pic, @ScriptDir & "\1.png")
$hLab_1 = GUICtrlCreateLabel("Text 1", 55, 20, 50, 20)
$hLab_2 = GUICtrlCreateLabel("Text 2", 55, 53, 50, 20)
$hLab_3 = GUICtrlCreateLabel("Text 3", 55, 86, 50, 20)
$hLab_4 = GUICtrlCreateLabel("15.59 - 19/01/2014", 15, 110, 100, 20)

GUICtrlSetFont($hLab_1, 10, 600, 0, "Tahoma")
GUICtrlSetColor($hLab_1, 0xE1E100)
GUICtrlSetBkColor($hLab_1, -2)
GUICtrlSetFont($hLab_2, 10, 600, 0, "Tahoma")
GUICtrlSetColor($hLab_2, 0xE1E100)
GUICtrlSetBkColor($hLab_2, -2)
GUICtrlSetFont($hLab_3, 10, 600, 0, "Tahoma")
GUICtrlSetColor($hLab_3, 0xE1E100)
GUICtrlSetBkColor($hLab_3, -2)
GUICtrlSetFont($hLab_4, 7, 600, 0, "Tahoma")
GUICtrlSetColor($hLab_4, 0xFFFFFF)
GUICtrlSetBkColor($hLab_4, -2)
_WinAPI_SetLayeredWindowAttributes($hGUI, 50, 255)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
	EndSwitch
WEnd

Func _SetPNGIntoPicControl($iPic, $sPNGFile)
	_GDIPlus_Startup()
	Local $hImage = _GDIPlus_ImageLoadFromFile($sPNGFile)
	Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_WinAPI_DeleteObject(GUICtrlSendMsg($iPic, 0x172, 0, $hBitmap))
	_WinAPI_DeleteObject($hBitmap)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
EndFunc   ;==>_SetPNGIntoPicControl
 
Автор
S

Snegovik

Новичок
Сообщения
47
Репутация
0
joiner, спасибо - все заработало.
 
Верх