github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/winc/combobox.go (about) 1 //go:build windows 2 3 /* 4 * Copyright (C) 2019 The Winc Authors. All Rights Reserved. 5 */ 6 7 package winc 8 9 import ( 10 "syscall" 11 "unsafe" 12 13 "github.com/secoba/wails/v2/internal/frontend/desktop/windows/winc/w32" 14 ) 15 16 type ComboBox struct { 17 ControlBase 18 onSelectedChange EventManager 19 } 20 21 func NewComboBox(parent Controller) *ComboBox { 22 cb := new(ComboBox) 23 24 cb.InitControl("COMBOBOX", parent, 0, w32.WS_CHILD|w32.WS_VISIBLE|w32.WS_TABSTOP|w32.WS_VSCROLL|w32.CBS_DROPDOWNLIST) 25 RegMsgHandler(cb) 26 27 cb.SetFont(DefaultFont) 28 cb.SetSize(200, 400) 29 return cb 30 } 31 32 func (cb *ComboBox) DeleteAllItems() bool { 33 return w32.SendMessage(cb.hwnd, w32.CB_RESETCONTENT, 0, 0) == w32.TRUE 34 } 35 36 func (cb *ComboBox) InsertItem(index int, str string) bool { 37 lp := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(str))) 38 return w32.SendMessage(cb.hwnd, w32.CB_INSERTSTRING, uintptr(index), lp) != w32.CB_ERR 39 } 40 41 func (cb *ComboBox) DeleteItem(index int) bool { 42 return w32.SendMessage(cb.hwnd, w32.CB_DELETESTRING, uintptr(index), 0) != w32.CB_ERR 43 } 44 45 func (cb *ComboBox) SelectedItem() int { 46 return int(int32(w32.SendMessage(cb.hwnd, w32.CB_GETCURSEL, 0, 0))) 47 } 48 49 func (cb *ComboBox) SetSelectedItem(value int) bool { 50 return int(int32(w32.SendMessage(cb.hwnd, w32.CB_SETCURSEL, uintptr(value), 0))) == value 51 } 52 53 func (cb *ComboBox) OnSelectedChange() *EventManager { 54 return &cb.onSelectedChange 55 } 56 57 // Message processer 58 func (cb *ComboBox) WndProc(msg uint32, wparam, lparam uintptr) uintptr { 59 switch msg { 60 case w32.WM_COMMAND: 61 code := w32.HIWORD(uint32(wparam)) 62 63 switch code { 64 case w32.CBN_SELCHANGE: 65 cb.onSelectedChange.Fire(NewEvent(cb, nil)) 66 } 67 } 68 return w32.DefWindowProc(cb.hwnd, msg, wparam, lparam) 69 //return cb.W32Control.WndProc(msg, wparam, lparam) 70 }