Function Reference

GUICtrlCreatePic

GUI用のピクチャーコントロールを作成します。

GUICtrlCreatePic ( filename, left, top [, width [, height [, style [, exStyle]]]] )

 

パラメータ

filename ロードされる画像のファイル名。BMP、JPG、GIF(アニメーションを除く)をサポートしています。
left コントロールの左端。-1を使用するとGUICoordModeに基づいて左端位置が計算されます。
top コントロールの上端。-1を使用するとGUICoordModeに基づいて上端位置が計算されます。
width [オプション] コントロールの幅(デフォルトは最後に使用された幅)。
height [オプション] コントロールの高さ(デフォルトは最後に使用された高さ)。
style [オプション] コントロールのスタイルを定義。GUIコントロールスタイル付録を参照。

デフォルト (-1) : $SS_NOTIFY
強制適用されるスタイル : $SS_BITMAP
exStyle [オプション] コントロールの拡張スタイルを定義。拡張スタイル表を参照。

 

返し値

成功 新しく作成したコントロールの識別子(コントロールID)を返します。
失敗 画像を作成できなかった場合、0を返します。

 

注意

コントロールの情報を設定/変更する方法についてはGUICtrlUpdate...を参照。

ダイアログボックス表示後に画像を更新したい場合はGUICtrlSetImageを使用します。

画像をファイル内でのサイズと同じにしたい場合、width=height=0と設定します。

透明な画像を作成したい場合、WS_EX_LAYERED拡張スタイル設定がされたウィンドウを作成する必要があります。左上のピクセルが透過色として使用されます。複数の画像が作成されている場合、最後の画像によって透過色が定義されます。例2を参照してください。

デフォルトスタイルに他のスタイルを組み合わせる場合はBitOr($GUI_SS_DEFAULT_PIC, newstyle,...)を使用してください。

上で指定されている値を使用するためにはスクリプトに#include <StaticConstants.au3>と書く必要があります。

デフォルトのサイズ変更方法は$GUI_DOCKSIZEです。

画像を背景画像に設定し、他のコントロールをその上に配置する場合、GuiCtrlSetState(-1,$GUI_DISABLE)でピクチャーコントロールを無効にし、他のコントロールの後で作成する必要があります。個々に処理をおこなうタブコンロトールやリストビューコントロールではさらに別の処理も必要になります。その場合は画像を$WS_CLIPSIBLINGSスタイルで作成し、タブコントロール、ツリービューコントロール、リストビューコントロールにGuiCtrlSetState(-1,$GUI_ONTOP)を設定する必要があります。

拡張スタイル$GUI_WS_EX_PARENTDRAGを使用すると(GUICreateで$WS_CAPTIONスタイルを設定していない)タイトルバーの無いウィンドウ用の親ウィンドウのドラッギングが可能になります。

背景は常に透明に設定されています。GUICtrlSetBkColor()はピクチャーコントロールに対して動作しません。

GDI+を使用した場合、PNGも使用できます。例3を参照してください。


 

関連

GUICoordMode (Option), GUICtrlSetImage, GUICtrlUpdate..., GUIGetMsg

 


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $gui, $guiPos, $pic, $picPos

Example1()
Example2()

;----- 例 1 ----
Func Example1()
    Local $n, $msg
   
    GUICreate("My GUI picture", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)  ; 表示時に中央に表示されるダイアログボックスを作成

    GUISetBkColor(0xE0FFFF)
    $n = GUICtrlCreatePic("..\GUI\mslogo.jpg", 50, 50, 200, 50)

    GUISetState()

    ; ダイアログが閉じられるまでGUIを実行
    While 1
        $msg = GUIGetMsg()
       
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd


    ; コントロールをサイズ変更
    $n = GUICtrlSetPos($n, 50, 50, 200, 100)
    ; ダイアログが閉じられるまでGUIを実行
    While 1
        $msg = GUIGetMsg()
       
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
   
    GUIDelete()
EndFunc   ;==>example1

;----- 例 2
Func Example2()
    Local $msg
   
    $gui = GUICreate("test transparentpic", 200, 100)
    $pic = GUICreate("", 68, 71, 10, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    GUICtrlCreatePic("..\GUI\merlin.gif", 0, 0, 0, 0)

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_SHOW, $gui)

    HotKeySet("{ESC}", "main")
    HotKeySet("{LEFT}", "left")
    HotKeySet("{RIGHT}", "right")
    HotKeySet("{DOWN}", "down")
    HotKeySet("{UP}", "up")
    $picPos = WinGetPos($pic)
    $guiPos = WinGetPos($gui)

    Do
        $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE
EndFunc   ;==>Example2

Func main()
    $guiPos = WinGetPos($gui)
    WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)
EndFunc   ;==>main

Func left()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] - 10, $picPos[1])
EndFunc   ;==>left

Func right()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] + 10, $picPos[1])
EndFunc   ;==>right

Func down()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] + 10)
EndFunc   ;==>down

Func up()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] - 10)
EndFunc   ;==>up

;----- 例 3 PNG処理 by Zedna
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1

; GUI作成
$hGUI = GUICreate("Show PNG", 250, 250)

; PNG画像をロード
_GDIPlus_StartUp()
$hImage   = _GDIPlus_ImageLoadFromFile("..\GUI\Torus.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
GUISetState()

; ユーザーが終了させるまでループ
do
until GUIGetMsg() = $GUI_EVENT_CLOSE

; リソースをクリーン
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()

; PNG画像を描画
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
EndFunc