summaryrefslogtreecommitdiff
path: root/controls_windows.go
blob: 4593e2b07ce36c5c6bb1d77bdeafecf48f794bc5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
// 9 february 2014
package main

import (
//	"syscall"
//	"unsafe"
)

// Button styles.
const (
	// from winuser.h
	_BS_PUSHBUTTON = 0x00000000
	_BS_DEFPUSHBUTTON = 0x00000001
	_BS_CHECKBOX = 0x00000002
	_BS_AUTOCHECKBOX = 0x00000003
	_BS_RADIOBUTTON = 0x00000004
	_BS_3STATE = 0x00000005
	_BS_AUTO3STATE = 0x00000006
	_BS_GROUPBOX = 0x00000007
	_BS_USERBUTTON = 0x00000008
	_BS_AUTORADIOBUTTON = 0x00000009
	_BS_PUSHBOX = 0x0000000A
	_BS_OWNERDRAW = 0x0000000B
	_BS_TYPEMASK = 0x0000000F
	_BS_LEFTTEXT = 0x00000020
	_BS_TEXT = 0x00000000
	_BS_ICON = 0x00000040
	_BS_BITMAP = 0x00000080
	_BS_LEFT = 0x00000100
	_BS_RIGHT = 0x00000200
	_BS_CENTER = 0x00000300
	_BS_TOP = 0x00000400
	_BS_BOTTOM = 0x00000800
	_BS_VCENTER = 0x00000C00
	_BS_PUSHLIKE = 0x00001000
	_BS_MULTILINE = 0x00002000
	_BS_NOTIFY = 0x00004000
	_BS_FLAT = 0x00008000
	_BS_RIGHTBUTTON = _BS_LEFTTEXT
	// from commctrl.h
//	_BS_SPLITBUTTON = 0x0000000C			// Windows Vista and newer and(/or?) comctl6 only
//	_BS_DEFSPLITBUTTON = 0x0000000D		// Windows Vista and newer and(/or?) comctl6 only
//	_BS_COMMANDLINK = 0x0000000E		// Windows Vista and newer and(/or?) comctl6 only
//	_BS_DEFCOMMANDLINK = 0x0000000F		// Windows Vista and newer and(/or?) comctl6 only
)

// Button messages.
// TODO check if any are not defined on Windows 2000
const (
	// from winuser.h
	_BM_GETCHECK = 0x00F0
	_BM_SETCHECK = 0x00F1
	_BM_GETSTATE = 0x00F2
	_BM_SETSTATE = 0x00F3
	_BM_SETSTYLE = 0x00F4
	_BM_CLICK = 0x00F5
	_BM_GETIMAGE = 0x00F6
	_BM_SETIMAGE = 0x00F7
	_BM_SETDONTCLICK = 0x00F8
)

// Button WM_COMMAND notifications.
const (
	// from winuser.h
	_BN_CLICKED = 0
	_BN_PAINT = 1
	_BN_HILITE = 2
	_BN_UNHILITE = 3
	_BN_DISABLE = 4
	_BN_DOUBLECLICKED = 5
	_BN_PUSHED = _BN_HILITE
	_BN_UNPUSHED = _BN_UNHILITE
	_BN_DBLCLK = _BN_DOUBLECLICKED
	_BN_SETFOCUS = 6
	_BN_KILLFOCUS = 7
)

// Button check states.
const (
	// from winuser.h
	_BST_UNCHECKED = 0x0000
	_BST_CHECKED = 0x0001
	_BST_INDETERMINATE = 0x0002
)

/*
var (
	checkDlgButton = user32.NewProc("CheckDlgButton")
	checkRadioButton = user32.NewProc("CheckRadioButton")
	isDlgButtonChecked = user32.NewProc("IsDlgButtonChecked")
)

func CheckDlgButton(hDlg HWND, nIDButton int, uCheck uint32) (err error) {
	r1, _, err := checkDlgButton.Call(
		uintptr(hDlg),
		uintptr(nIDButton),
		uintptr(uCheck))
	if r1 == 0 {		// failure
		return err
	}
	return nil
}

func CheckRadioButton(hDlg HWND, nIDFirstButton int, nIDLastButton int, nIDCheckButton int) (err error) {
	r1, _, err := checkRadioButton.Call(
		uintptr(hDlg),
		uintptr(nIDFirstButton),
		uintptr(nIDLastButton),
		uintptr(nIDCheckButton))
	if r1 == 0 {		// failure
		return err
	}
	return nil
}

// TODO handle errors
func IsDlgButtonChecked(hDlg HWND, nIDButton int) (state uint32, err error) {
	r1, _, _ := isDlgButtonChecked.Call(
		uintptr(hDlg),
		uintptr(nIDButton))
	return uint32(r1), nil
}
*/

// Combobox styles.
const (
	// from winuser.h
	_CBS_SIMPLE = 0x0001
	_CBS_DROPDOWN = 0x0002
	_CBS_DROPDOWNLIST = 0x0003
	_CBS_OWNERDRAWFIXED = 0x0010
	_CBS_OWNERDRAWVARIABLE = 0x0020
	_CBS_AUTOHSCROLL = 0x0040
	_CBS_OEMCONVERT = 0x0080
	_CBS_SORT = 0x0100
	_CBS_HASSTRINGS = 0x0200
	_CBS_NOINTEGRALHEIGHT = 0x0400
	_CBS_DISABLENOSCROLL = 0x0800
	_CBS_UPPERCASE = 0x2000
	_CBS_LOWERCASE = 0x4000
)

// Combobox messages.
// TODO filter out messages not provided in windows 2000
const (
	// from winuser.h
	_CB_GETEDITSEL = 0x0140
	_CB_LIMITTEXT = 0x0141
	_CB_SETEDITSEL = 0x0142
	_CB_ADDSTRING = 0x0143
	_CB_DELETESTRING = 0x0144
	_CB_DIR = 0x0145
	_CB_GETCOUNT = 0x0146
	_CB_GETCURSEL = 0x0147
	_CB_GETLBTEXT = 0x0148
	_CB_GETLBTEXTLEN = 0x0149
	_CB_INSERTSTRING = 0x014A
	_CB_RESETCONTENT = 0x014B
	_CB_FINDSTRING = 0x014C
	_CB_SELECTSTRING = 0x014D
	_CB_SETCURSEL = 0x014E
	_CB_SHOWDROPDOWN = 0x014F
	_CB_GETITEMDATA = 0x0150
	_CB_SETITEMDATA = 0x0151
	_CB_GETDROPPEDCONTROLRECT = 0x0152
	_CB_SETITEMHEIGHT = 0x0153
	_CB_GETITEMHEIGHT = 0x0154
	_CB_SETEXTENDEDUI = 0x0155
	_CB_GETEXTENDEDUI = 0x0156
	_CB_GETDROPPEDSTATE = 0x0157
	_CB_FINDSTRINGEXACT = 0x0158
	_CB_SETLOCALE = 0x0159
	_CB_GETLOCALE = 0x015A
	_CB_GETTOPINDEX = 0x015B
	_CB_SETTOPINDEX = 0x015C
	_CB_GETHORIZONTALEXTENT = 0x015D
	_CB_SETHORIZONTALEXTENT = 0x015E
	_CB_GETDROPPEDWIDTH = 0x015F
	_CB_SETDROPPEDWIDTH = 0x0160
	_CB_INITSTORAGE = 0x0161
	_CB_MULTIPLEADDSTRING = 0x0163
	_CB_GETCOMBOBOXINFO = 0x0164
)

// Combobox errors.
var (		// var so they can be cast to uintptr
	// from winuser.h
	_CB_ERR = (-1)
	_CB_ERRSPACE = (-2)
	_CBN_ERRSPACE = (-1)
)

// Combobox WM_COMMAND notificaitons.
// TODO filter out notifications not provided in windows 2000
const (
	// from winuser.h
	_CBN_SELCHANGE = 1
	_CBN_DBLCLK = 2
	_CBN_SETFOCUS = 3
	_CBN_KILLFOCUS = 4
	_CBN_EDITCHANGE = 5
	_CBN_EDITUPDATE = 6
	_CBN_DROPDOWN = 7
	_CBN_CLOSEUP = 8
	_CBN_SELENDOK = 9
	_CBN_SELENDCANCEL = 10
)

// Edit control styles.
const (
	// from winuser.h
	_ES_LEFT = 0x0000
	_ES_CENTER = 0x0001
	_ES_RIGHT = 0x0002
	_ES_MULTILINE = 0x0004
	_ES_UPPERCASE = 0x0008
	_ES_LOWERCASE = 0x0010
	_ES_PASSWORD = 0x0020
	_ES_AUTOVSCROLL = 0x0040
	_ES_AUTOHSCROLL = 0x0080
	_ES_NOHIDESEL = 0x0100
	_ES_OEMCONVERT = 0x0400
	_ES_READONLY = 0x0800
	_ES_WANTRETURN = 0x1000
	_ES_NUMBER = 0x2000
)

// Edit control messages.
// TODO filter out messages not provided in windows 2000
const (
	// from winuser.h
	_EM_GETSEL = 0x00B0
	_EM_SETSEL = 0x00B1
	_EM_GETRECT = 0x00B2
	_EM_SETRECT = 0x00B3
	_EM_SETRECTNP = 0x00B4
	_EM_SCROLL = 0x00B5
	_EM_LINESCROLL = 0x00B6
	_EM_SCROLLCARET = 0x00B7
	_EM_GETMODIFY = 0x00B8
	_EM_SETMODIFY = 0x00B9
	_EM_GETLINECOUNT = 0x00BA
	_EM_LINEINDEX = 0x00BB
	_EM_SETHANDLE = 0x00BC
	_EM_GETHANDLE = 0x00BD
	_EM_GETTHUMB = 0x00BE
	_EM_LINELENGTH = 0x00C1
	_EM_REPLACESEL = 0x00C2
	_EM_GETLINE = 0x00C4
	_EM_LIMITTEXT = 0x00C5
	_EM_CANUNDO = 0x00C6
	_EM_UNDO = 0x00C7
	_EM_FMTLINES = 0x00C8
	_EM_LINEFROMCHAR = 0x00C9
	_EM_SETTABSTOPS = 0x00CB
	_EM_SETPASSWORDCHAR = 0x00CC
	_EM_EMPTYUNDOBUFFER = 0x00CD
	_EM_GETFIRSTVISIBLELINE = 0x00CE
	_EM_SETREADONLY = 0x00CF
	_EM_SETWORDBREAKPROC = 0x00D0
	_EM_GETWORDBREAKPROC = 0x00D1
	_EM_GETPASSWORDCHAR = 0x00D2
	_EM_SETMARGINS = 0x00D3
	_EM_GETMARGINS = 0x00D4
	_EM_SETLIMITTEXT = _EM_LIMITTEXT		// [;win40 Name change]
	_EM_GETLIMITTEXT = 0x00D5
	_EM_POSFROMCHAR = 0x00D6
	_EM_CHARFROMPOS = 0x00D7
	_EM_SETIMESTATUS = 0x00D8
	_EM_GETIMESTATUS = 0x00D9
)

// Edit control WM_COMMAND notifications.
// TODO filter out notifications not provided in windows 2000
const (
	// from winuser.h
	_EN_SETFOCUS = 0x0100
	_EN_KILLFOCUS = 0x0200
	_EN_CHANGE = 0x0300
	_EN_UPDATE = 0x0400
	_EN_ERRSPACE = 0x0500
	_EN_MAXTEXT = 0x0501
	_EN_HSCROLL = 0x0601
	_EN_VSCROLL = 0x0602
	_EN_ALIGN_LTR_EC = 0x0700
	_EN_ALIGN_RTL_EC = 0x0701
	_EC_LEFTMARGIN = 0x0001
	_EC_RIGHTMARGIN = 0x0002
	_EC_USEFONTINFO = 0xFFFF
	_EMSIS_COMPOSITIONSTRING = 0x0001
	_EIMES_GETCOMPSTRATONCE = 0x0001
	_EIMES_CANCELCOMPSTRINFOCUS = 0x0002
	_EIMES_COMPLETECOMPSTRKILLFOCUS = 0x0004
)

// Listbox styles.
const (
	// from winuser.h
	_LBS_NOTIFY = 0x0001
	_LBS_SORT = 0x0002
	_LBS_NOREDRAW = 0x0004
	_LBS_MULTIPLESEL = 0x0008
	_LBS_OWNERDRAWFIXED = 0x0010
	_LBS_OWNERDRAWVARIABLE = 0x0020
	_LBS_HASSTRINGS = 0x0040
	_LBS_USETABSTOPS = 0x0080
	_LBS_NOINTEGRALHEIGHT = 0x0100
	_LBS_MULTICOLUMN = 0x0200
	_LBS_WANTKEYBOARDINPUT = 0x0400
	_LBS_EXTENDEDSEL = 0x0800
	_LBS_DISABLENOSCROLL = 0x1000
	_LBS_NODATA = 0x2000
	_LBS_NOSEL = 0x4000
	_LBS_COMBOBOX = 0x8000
	_LBS_STANDARD = (_LBS_NOTIFY | _LBS_SORT | _WS_VSCROLL | _WS_BORDER)
)

// Listbox messages.
// TODO filter out messages not provided in windows 2000
const (
	// from winuser.h
	_LB_ADDSTRING = 0x0180
	_LB_INSERTSTRING = 0x0181
	_LB_DELETESTRING = 0x0182
	_LB_SELITEMRANGEEX = 0x0183
	_LB_RESETCONTENT = 0x0184
	_LB_SETSEL = 0x0185
	_LB_SETCURSEL = 0x0186
	_LB_GETSEL = 0x0187
	_LB_GETCURSEL = 0x0188
	_LB_GETTEXT = 0x0189
	_LB_GETTEXTLEN = 0x018A
	_LB_GETCOUNT = 0x018B
	_LB_SELECTSTRING = 0x018C
	_LB_DIR = 0x018D
	_LB_GETTOPINDEX = 0x018E
	_LB_FINDSTRING = 0x018F
	_LB_GETSELCOUNT = 0x0190
	_LB_GETSELITEMS = 0x0191
	_LB_SETTABSTOPS = 0x0192
	_LB_GETHORIZONTALEXTENT = 0x0193
	_LB_SETHORIZONTALEXTENT = 0x0194
	_LB_SETCOLUMNWIDTH = 0x0195
	_LB_ADDFILE = 0x0196
	_LB_SETTOPINDEX = 0x0197
	_LB_GETITEMRECT = 0x0198
	_LB_GETITEMDATA = 0x0199
	_LB_SETITEMDATA = 0x019A
	_LB_SELITEMRANGE = 0x019B
	_LB_SETANCHORINDEX = 0x019C
	_LB_GETANCHORINDEX = 0x019D
	_LB_SETCARETINDEX = 0x019E
	_LB_GETCARETINDEX = 0x019F
	_LB_SETITEMHEIGHT = 0x01A0
	_LB_GETITEMHEIGHT = 0x01A1
	_LB_FINDSTRINGEXACT = 0x01A2
	_LB_SETLOCALE = 0x01A5
	_LB_GETLOCALE = 0x01A6
	_LB_SETCOUNT = 0x01A7
	_LB_INITSTORAGE = 0x01A8
	_LB_ITEMFROMPOINT = 0x01A9
	_LB_MULTIPLEADDSTRING = 0x01B1
	_LB_GETLISTBOXINFO = 0x01B2
)

// Listbox errors.
var (		// var so they can be cast to uintptr
	// from winuser.h
	_LB_OKAY = 0
	_LB_ERR = (-1)
	_LB_ERRSPACE = (-2)
	_LBN_ERRSPACE = (-2)
)

// Listbox WM_COMMAND notifications and message returns.
// TODO filter out notifications not provided in windows 2000
const (
	// from winuser.h
	_LBN_SELCHANGE = 1
	_LBN_DBLCLK = 2
	_LBN_SELCANCEL = 3
	_LBN_SETFOCUS = 4
	_LBN_KILLFOCUS = 5
)

// Static control styles.
const (
	// from winuser.h
	_SS_LEFT = 0x00000000
	_SS_CENTER = 0x00000001
	_SS_RIGHT = 0x00000002
	_SS_ICON = 0x00000003
	_SS_BLACKRECT = 0x00000004
	_SS_GRAYRECT = 0x00000005
	_SS_WHITERECT = 0x00000006
	_SS_BLACKFRAME = 0x00000007
	_SS_GRAYFRAME = 0x00000008
	_SS_WHITEFRAME = 0x00000009
	_SS_USERITEM = 0x0000000A
	_SS_SIMPLE = 0x0000000B
	_SS_LEFTNOWORDWRAP = 0x0000000C
	_SS_OWNERDRAW = 0x0000000D
	_SS_BITMAP = 0x0000000E
	_SS_ENHMETAFILE = 0x0000000F
	_SS_ETCHEDHORZ = 0x00000010
	_SS_ETCHEDVERT = 0x00000011
	_SS_ETCHEDFRAME = 0x00000012
	_SS_TYPEMASK = 0x0000001F
	_SS_REALSIZECONTROL = 0x00000040
	_SS_NOPREFIX = 0x00000080
	_SS_NOTIFY = 0x00000100
	_SS_CENTERIMAGE = 0x00000200
	_SS_RIGHTJUST = 0x00000400
	_SS_REALSIZEIMAGE = 0x00000800
	_SS_SUNKEN = 0x00001000
	_SS_EDITCONTROL = 0x00002000
	_SS_ENDELLIPSIS = 0x00004000
	_SS_PATHELLIPSIS = 0x00008000
	_SS_WORDELLIPSIS = 0x0000C000
	_SS_ELLIPSISMASK = 0x0000C000
)

// Static control messages and WM_COMMAND notifications.
const (
	// from winuser.h
	_STM_SETICON = 0x0170
	_STM_GETICON = 0x0171
	_STM_SETIMAGE = 0x0172
	_STM_GETIMAGE = 0x0173
	_STN_CLICKED = 0
	_STN_DBLCLK = 1
	_STN_ENABLE = 2
	_STN_DISABLE = 3
)