Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Повернуть изображение на 90 градусов в GUI окне. (http://forum.oszone.net/showthread.php?t=173120)

FlatX007 14-04-2010 16:39 1392477

Повернуть изображение на 90 градусов в GUI окне.
 
Вложений: 1
Как мне в одном GUI окне использовать ОДНУ картинку 2 раза причём вторая картинка должна быть повёрнута на 90 градусов. См скрин.



Код:

$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 1392502

FlatX007,
А не проще сделать 2 или сразу 4 картинки заранее?

FlatX007 14-04-2010 17:20 1392512

Было бы проще я бы так и сделал :read:

Yashied 14-04-2010 19:06 1392590

Вложений: 1
Код:

#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

FlatX007 15-04-2010 19:16 1393508

А как сделать чтобы размер картинки подстраивался под размер "GUICtrlCreatePic"

Yashied 16-04-2010 00:37 1393734

Цитата:

Цитата FlatX007
А как сделать чтобы размер картинки подстраивался под размер "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



Время: 04:08.

Время: 04:08.
© OSzone.net 2001-2025