Jump to content
Sign in to follow this  

Image as a button

Recommended Posts



I just want to replace a simple button by an image.

Easy with GuiCtrlCreateButton and GUICtrlSetImage , but how to get rid of the button borders ?

More, I have to click on the button part : doing so on the image part -inside the button- does nothing.

Then I tried with GUICtrlCreateIcon.

It shows my icon (no borders, great !) but impossible to register a message with it.

So is it possible to have a nice button (bmp or ico) ?

Thanks in advance


Share this post

Link to post
Share on other sites

Hmm I was pretty certain you could register a msg of any control on a gui, seems I was wrong again.

Have you tried GUICtrlCreatePic() see if you can use that.


I've just used an icon and registered it msg in a gui, perhaps some other part of yopr code is failing.

Edited by JohnOne

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Share this post

Link to post
Share on other sites


I have found Malkey's UDF here to be very useful when I want to register a click on a certain part of the GUI (like an image) without using a specific control. It was designed to use different parts of a larger background image as separate "buttons", but it is easy to extract the code to react to the area covered by your smaller image.

Do not be put off by all the GDI drawing code - that is just to give a graphic to show the areas you can click on. If you have a rectangular image, all you really need is the _WinAPI_PtInRectEx function.

Give it a go and come back if you have difficulties. :(


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:


ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area


Share this post

Link to post
Share on other sites

Please supply some code when asking for help.

There is no need to use GuiCtrlCreateButton() if you don't want the button border.

Both GUICtrlCreatePic() and GUICtrlCreateIcon() set GUIGetMsg() when clicked by default. (or GuiCtrlSetOnEvent())

If you are not using the default style, then specify the $SS_NOTIFY style.

Share this post

Link to post
Share on other sites

Simple way.

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

$Background = _WinAPI_GetSysColor($COLOR_3DFACE)
$Background = BitOR(BitAND($Background, 0x00FF00), BitShift(BitAND($Background, 0x0000FF), -16), BitShift(BitAND($Background, 0xFF0000), 16))

GUICreate('', 100, 100)
$Icon = GUICtrlCreateIcon(@AutoItExe, 0, 34, 34, 32, 32)

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case -3
        Case $Icon
            If PixelGetColor(MouseGetPos(0), MouseGetPos(1)) <> $Background Then
                ConsoleWrite('Click' & @CR)

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this