301 lines
7.3 KiB
Go
301 lines
7.3 KiB
Go
// Copyright 2010 The win Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build windows
|
|
|
|
package win
|
|
|
|
import (
|
|
"golang.org/x/sys/windows"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
// Common error codes
|
|
const (
|
|
CDERR_DIALOGFAILURE = 0xFFFF
|
|
CDERR_FINDRESFAILURE = 0x0006
|
|
CDERR_INITIALIZATION = 0x0002
|
|
CDERR_LOADRESFAILURE = 0x0007
|
|
CDERR_LOADSTRFAILURE = 0x0005
|
|
CDERR_LOCKRESFAILURE = 0x0008
|
|
CDERR_MEMALLOCFAILURE = 0x0009
|
|
CDERR_MEMLOCKFAILURE = 0x000A
|
|
CDERR_NOHINSTANCE = 0x0004
|
|
CDERR_NOHOOK = 0x000B
|
|
CDERR_NOTEMPLATE = 0x0003
|
|
CDERR_REGISTERMSGFAIL = 0x000C
|
|
CDERR_STRUCTSIZE = 0x0001
|
|
)
|
|
|
|
// CHOOSECOLOR flags
|
|
const (
|
|
CC_ANYCOLOR = 0x00000100
|
|
CC_ENABLEHOOK = 0x00000010
|
|
CC_ENABLETEMPLATE = 0x00000020
|
|
CC_ENABLETEMPLATEHANDLE = 0x00000040
|
|
CC_FULLOPEN = 0x00000002
|
|
CC_PREVENTFULLOPEN = 0x00000004
|
|
CC_RGBINIT = 0x00000001
|
|
CC_SHOWHELP = 0x00000008
|
|
CC_SOLIDCOLOR = 0x00000080
|
|
)
|
|
|
|
type CHOOSECOLOR struct {
|
|
LStructSize uint32
|
|
HwndOwner HWND
|
|
HInstance HWND
|
|
RgbResult COLORREF
|
|
LpCustColors *[16]COLORREF
|
|
Flags uint32
|
|
LCustData uintptr
|
|
LpfnHook uintptr
|
|
LpTemplateName *uint16
|
|
}
|
|
|
|
// PrintDlg specific error codes
|
|
const (
|
|
PDERR_CREATEICFAILURE = 0x100A
|
|
PDERR_DEFAULTDIFFERENT = 0x100C
|
|
PDERR_DNDMMISMATCH = 0x1009
|
|
PDERR_GETDEVMODEFAIL = 0x1005
|
|
PDERR_INITFAILURE = 0x1006
|
|
PDERR_LOADDRVFAILURE = 0x1004
|
|
PDERR_NODEFAULTPRN = 0x1008
|
|
PDERR_NODEVICES = 0x1007
|
|
PDERR_PARSEFAILURE = 0x1002
|
|
PDERR_PRINTERNOTFOUND = 0x100B
|
|
PDERR_RETDEFFAILURE = 0x1003
|
|
PDERR_SETUPFAILURE = 0x1001
|
|
)
|
|
|
|
// ChooseFont specific error codes
|
|
const (
|
|
CFERR_MAXLESSTHANMIN = 0x2002
|
|
CFERR_NOFONTS = 0x2001
|
|
)
|
|
|
|
// GetOpenFileName and GetSaveFileName specific error codes
|
|
const (
|
|
FNERR_BUFFERTOOSMALL = 0x3003
|
|
FNERR_INVALIDFILENAME = 0x3002
|
|
FNERR_SUBCLASSFAILURE = 0x3001
|
|
)
|
|
|
|
// FindText and ReplaceText specific error codes
|
|
const (
|
|
FRERR_BUFFERLENGTHZERO = 0x4001
|
|
)
|
|
|
|
// GetOpenFileName and GetSaveFileName flags
|
|
const (
|
|
OFN_ALLOWMULTISELECT = 0x00000200
|
|
OFN_CREATEPROMPT = 0x00002000
|
|
OFN_DONTADDTORECENT = 0x02000000
|
|
OFN_ENABLEHOOK = 0x00000020
|
|
OFN_ENABLEINCLUDENOTIFY = 0x00400000
|
|
OFN_ENABLESIZING = 0x00800000
|
|
OFN_ENABLETEMPLATE = 0x00000040
|
|
OFN_ENABLETEMPLATEHANDLE = 0x00000080
|
|
OFN_EXPLORER = 0x00080000
|
|
OFN_EXTENSIONDIFFERENT = 0x00000400
|
|
OFN_FILEMUSTEXIST = 0x00001000
|
|
OFN_FORCESHOWHIDDEN = 0x10000000
|
|
OFN_HIDEREADONLY = 0x00000004
|
|
OFN_LONGNAMES = 0x00200000
|
|
OFN_NOCHANGEDIR = 0x00000008
|
|
OFN_NODEREFERENCELINKS = 0x00100000
|
|
OFN_NOLONGNAMES = 0x00040000
|
|
OFN_NONETWORKBUTTON = 0x00020000
|
|
OFN_NOREADONLYRETURN = 0x00008000
|
|
OFN_NOTESTFILECREATE = 0x00010000
|
|
OFN_NOVALIDATE = 0x00000100
|
|
OFN_OVERWRITEPROMPT = 0x00000002
|
|
OFN_PATHMUSTEXIST = 0x00000800
|
|
OFN_READONLY = 0x00000001
|
|
OFN_SHAREAWARE = 0x00004000
|
|
OFN_SHOWHELP = 0x00000010
|
|
)
|
|
|
|
// GetOpenFileName and GetSaveFileName extended flags
|
|
const (
|
|
OFN_EX_NOPLACESBAR = 0x00000001
|
|
)
|
|
|
|
// PrintDlg[Ex] result actions
|
|
const (
|
|
PD_RESULT_APPLY = 2
|
|
PD_RESULT_CANCEL = 0
|
|
PD_RESULT_PRINT = 1
|
|
)
|
|
|
|
// PrintDlg[Ex] flags
|
|
const (
|
|
PD_ALLPAGES = 0x00000000
|
|
PD_COLLATE = 0x00000010
|
|
PD_CURRENTPAGE = 0x00400000
|
|
PD_DISABLEPRINTTOFILE = 0x00080000
|
|
PD_ENABLEPRINTTEMPLATE = 0x00004000
|
|
PD_ENABLEPRINTTEMPLATEHANDLE = 0x00010000
|
|
PD_EXCLUSIONFLAGS = 0x01000000
|
|
PD_HIDEPRINTTOFILE = 0x00100000
|
|
PD_NOCURRENTPAGE = 0x00800000
|
|
PD_NOPAGENUMS = 0x00000008
|
|
PD_NOSELECTION = 0x00000004
|
|
PD_NOWARNING = 0x00000080
|
|
PD_PAGENUMS = 0x00000002
|
|
PD_PRINTTOFILE = 0x00000020
|
|
PD_RETURNDC = 0x00000100
|
|
PD_RETURNDEFAULT = 0x00000400
|
|
PD_RETURNIC = 0x00000200
|
|
PD_SELECTION = 0x00000001
|
|
PD_USEDEVMODECOPIES = 0x00040000
|
|
PD_USEDEVMODECOPIESANDCOLLATE = 0x00040000
|
|
PD_USELARGETEMPLATE = 0x10000000
|
|
)
|
|
|
|
// PrintDlgEx exclusion flags
|
|
const (
|
|
PD_EXCL_COPIESANDCOLLATE = DM_COPIES | DM_COLLATE
|
|
)
|
|
|
|
const START_PAGE_GENERAL = 0xffffffff
|
|
|
|
type (
|
|
LPOFNHOOKPROC uintptr
|
|
HPROPSHEETPAGE HANDLE
|
|
LPUNKNOWN uintptr
|
|
)
|
|
|
|
type OPENFILENAME struct {
|
|
LStructSize uint32
|
|
HwndOwner HWND
|
|
HInstance HINSTANCE
|
|
LpstrFilter *uint16
|
|
LpstrCustomFilter *uint16
|
|
NMaxCustFilter uint32
|
|
NFilterIndex uint32
|
|
LpstrFile *uint16
|
|
NMaxFile uint32
|
|
LpstrFileTitle *uint16
|
|
NMaxFileTitle uint32
|
|
LpstrInitialDir *uint16
|
|
LpstrTitle *uint16
|
|
Flags uint32
|
|
NFileOffset uint16
|
|
NFileExtension uint16
|
|
LpstrDefExt *uint16
|
|
LCustData uintptr
|
|
LpfnHook LPOFNHOOKPROC
|
|
LpTemplateName *uint16
|
|
PvReserved unsafe.Pointer
|
|
DwReserved uint32
|
|
FlagsEx uint32
|
|
}
|
|
|
|
type PRINTPAGERANGE struct {
|
|
NFromPage uint32
|
|
NToPage uint32
|
|
}
|
|
|
|
type DEVNAMES struct {
|
|
WDriverOffset uint16
|
|
WDeviceOffset uint16
|
|
WOutputOffset uint16
|
|
WDefault uint16
|
|
}
|
|
|
|
type PRINTDLGEX struct {
|
|
LStructSize uint32
|
|
HwndOwner HWND
|
|
HDevMode HGLOBAL
|
|
HDevNames HGLOBAL
|
|
HDC HDC
|
|
Flags uint32
|
|
Flags2 uint32
|
|
ExclusionFlags uint32
|
|
NPageRanges uint32
|
|
NMaxPageRanges uint32
|
|
LpPageRanges *PRINTPAGERANGE
|
|
NMinPage uint32
|
|
NMaxPage uint32
|
|
NCopies uint32
|
|
HInstance HINSTANCE
|
|
LpPrintTemplateName *uint16
|
|
LpCallback LPUNKNOWN
|
|
NPropertyPages uint32
|
|
LphPropertyPages *HPROPSHEETPAGE
|
|
NStartPage uint32
|
|
DwResultAction uint32
|
|
}
|
|
|
|
var (
|
|
// Library
|
|
libcomdlg32 *windows.LazyDLL
|
|
|
|
// Functions
|
|
chooseColor *windows.LazyProc
|
|
commDlgExtendedError *windows.LazyProc
|
|
getOpenFileName *windows.LazyProc
|
|
getSaveFileName *windows.LazyProc
|
|
printDlgEx *windows.LazyProc
|
|
)
|
|
|
|
func init() {
|
|
// Library
|
|
libcomdlg32 = windows.NewLazySystemDLL("comdlg32.dll")
|
|
|
|
// Functions
|
|
chooseColor = libcomdlg32.NewProc("ChooseColorW")
|
|
commDlgExtendedError = libcomdlg32.NewProc("CommDlgExtendedError")
|
|
getOpenFileName = libcomdlg32.NewProc("GetOpenFileNameW")
|
|
getSaveFileName = libcomdlg32.NewProc("GetSaveFileNameW")
|
|
printDlgEx = libcomdlg32.NewProc("PrintDlgExW")
|
|
}
|
|
|
|
func ChooseColor(lpcc *CHOOSECOLOR) bool {
|
|
ret, _, _ := syscall.Syscall(chooseColor.Addr(), 1,
|
|
uintptr(unsafe.Pointer(lpcc)),
|
|
0,
|
|
0)
|
|
|
|
return ret != 0
|
|
}
|
|
|
|
func CommDlgExtendedError() uint32 {
|
|
ret, _, _ := syscall.Syscall(commDlgExtendedError.Addr(), 0,
|
|
0,
|
|
0,
|
|
0)
|
|
|
|
return uint32(ret)
|
|
}
|
|
|
|
func GetOpenFileName(lpofn *OPENFILENAME) bool {
|
|
ret, _, _ := syscall.Syscall(getOpenFileName.Addr(), 1,
|
|
uintptr(unsafe.Pointer(lpofn)),
|
|
0,
|
|
0)
|
|
|
|
return ret != 0
|
|
}
|
|
|
|
func GetSaveFileName(lpofn *OPENFILENAME) bool {
|
|
ret, _, _ := syscall.Syscall(getSaveFileName.Addr(), 1,
|
|
uintptr(unsafe.Pointer(lpofn)),
|
|
0,
|
|
0)
|
|
|
|
return ret != 0
|
|
}
|
|
|
|
func PrintDlgEx(lppd *PRINTDLGEX) HRESULT {
|
|
ret, _, _ := syscall.Syscall(printDlgEx.Addr(), 1,
|
|
uintptr(unsafe.Pointer(lppd)),
|
|
0,
|
|
0)
|
|
|
|
return HRESULT(ret)
|
|
}
|