Войти

Показать полную графическую версию : [решено] Повернуть изображение на 90 градусов в GUI окне.


FlatX007
14-04-2010, 16:39
Как мне в одном GUI окне использовать ОДНУ картинку 2 раза причём вторая картинка должна быть повёрнута на 90 градусов. См скрин.

http://s50.radikal.ru/i128/1004/7b/0c2a2a3f5ac7t.jpg (http://radikal.ru/F/s50.radikal.ru/i128/1004/7b/0c2a2a3f5ac7.gif.html)

$Form1 = GUICreate("Form1", 236, 133, 573, 455)
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\arrow.jpg", 16, 16, 100, 100)
$Pic2 = GUICtrlCreatePic(@ScriptDir & "\arrow.jpg", 120, 16, 100, 100)
GUISetState(@SW_SHOW)

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

madmasles
14-04-2010, 17:11
FlatX007,
А не проще сделать 2 или сразу 4 картинки заранее?

FlatX007
14-04-2010, 17:20
Было бы проще я бы так и сделал :read:

Yashied
14-04-2010, 19:06
#Include <GDIP.au3>
#Include <WinAPI.au3>

Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173

Dim $Pic[4]

GUICreate('MyGUI', 4 * 128, 128)
For $i = 0 To 3
$Pic[$i] = GUICtrlCreatePic('', $i * 128, 0, 128, 128)
Next

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile('Arrow.png')
For $i = 0 To 3
_GDIPlus_ImageRotateFlip($hImage, 1)
_SetImage($Pic[$i], _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage))
Next
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

GUISetState()

Do
Until GUIGetMsg() = -3

Func _SetImage($hWnd, $hBitmap)

If Not IsHWnd($hWnd) Then
$hWnd = GUICtrlGetHandle($hWnd)
If Not $hWnd Then
Return
EndIf
EndIf

Local $hObj

$hObj = _SendMessage($hWnd, $STM_SETIMAGE, 0, $hBitmap)
If $hObj Then
_WinAPI_DeleteObject($hObj)
EndIf
_WinAPI_InvalidateRect($hWnd)
$hObj = _SendMessage($hWnd, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
_WinAPI_DeleteObject($hBitmap)
EndIf
EndFunc ;==>_SetImage

GDIP UDF (http://autoit-script.ru/index.php?topic=1384.0)

FlatX007
15-04-2010, 19:16
А как сделать чтобы размер картинки подстраивался под размер "GUICtrlCreatePic"

Yashied
16-04-2010, 00:37
А как сделать чтобы размер картинки подстраивался под размер "GUICtrlCreatePic" »

Усложняем задачу...

:)

#Include <GDIP.au3>
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>

Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173

Dim $Pic[4]

GUICreate('MyGUI', 4 * 128, 128)
For $i = 0 To 3
$Pic[$i] = GUICtrlCreatePic('', $i * 128, 0, 128, 128)
Next

_GDIPlus_Startup()
$hPic = _GDIPlus_ImageLoadFromFile('Arrow.png')
For $i = 0 To 3
_GDIPlus_ImageRotateFlip($hPic, 1)
$W = _GDIPlus_ImageGetWidth($hPic)
$H = _GDIPlus_ImageGetHeight($hPic)
$Size = WinGetClientSize(GUICtrlGetHandle($Pic[$i]))
If ($W) And ($H) And (IsArray($Size)) Then
If $W < $H Then
$W = $Size[0] * $W / $H
$H = $Size[1]
Else
$H = $Size[1] * $H / $W
$W = $Size[0]
EndIf
$hBitmap = _WinAPI_CreateBitmap($Size[0], $Size[1], 1, 32)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
$hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE))))
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $Size[0], $Size[1], $hBrush)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hPic, ($Size[0] - $W) / 2, ($Size[1] - $H) / 2, $W, $H)
_SetImage($Pic[$i], _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage))
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($hImage)
EndIf
Next
_GDIPlus_ImageDispose($hPic)
_GDIPlus_Shutdown()

GUISetState()

Do
Until GUIGetMsg() = -3

Func _SetImage($hWnd, $hBitmap)

If Not IsHWnd($hWnd) Then
$hWnd = GUICtrlGetHandle($hWnd)
If Not $hWnd Then
Return
EndIf
EndIf

Local $hObj

$hObj = _SendMessage($hWnd, $STM_SETIMAGE, 0, $hBitmap)
If $hObj Then
_WinAPI_DeleteObject($hObj)
EndIf
_WinAPI_InvalidateRect($hWnd)
$hObj = _SendMessage($hWnd, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
_WinAPI_DeleteObject($hBitmap)
EndIf
EndFunc ;==>_SetImage

Func _WinAPI_SwitchColor($iColor)
Return BitOR(BitAND($iColor, 0x00FF00), BitShift(BitAND($iColor, 0x0000FF), -16), BitShift(BitAND($iColor, 0xFF0000), 16))
EndFunc ;==>_WinAPI_SwitchColor




© OSzone.net 2001-2012