// 16 august 2014 package ui import ( "image" "unsafe" ) // #include "winapi_windows.h" import "C" type imagelist struct { list []C.HBITMAP width []int height []int } func newImageList() ImageList { return new(imagelist) } func (i *imagelist) Append(img *image.RGBA) { i.list = append(i.list, C.unscaledBitmap(unsafe.Pointer(img), C.intptr_t(img.Rect.Dx()), C.intptr_t(img.Rect.Dy()))) i.width = append(i.width, img.Rect.Dx()) i.height = append(i.height, img.Rect.Dy()) } func (i *imagelist) Len() ImageIndex { return ImageIndex(len(i.list)) } type imageListApply interface { apply(C.HWND, C.UINT) } func (i *imagelist) apply(hwnd C.HWND, uMsg C.UINT) { width := C.GetSystemMetrics(C.SM_CXSMICON) height := C.GetSystemMetrics(C.SM_CYSMICON) il := C.newImageList(width, height) for index := range i.list { C.addImage(il, hwnd, i.list[index], C.int(i.width[index]), C.int(i.height[index]), width, height) } C.SendMessageW(hwnd, uMsg, 0, C.LPARAM(uintptr(unsafe.Pointer(il)))) }