module WindowsGUI

Constants

AD_CLOCKWISE
AD_COUNTERCLOCKWISE
ALTERNATE
ANSI_CHARSET
ANTIALIASED_QUALITY
APPNAME
AW_ACTIVATE
AW_BLEND
AW_CENTER
AW_HIDE
AW_HOR_NEGATIVE
AW_HOR_POSITIVE
AW_SLIDE
AW_VER_NEGATIVE
AW_VER_POSITIVE
BM_CLICK
BM_GETCHECK
BM_GETIMAGE
BM_GETSTATE
BM_SETCHECK
BM_SETDONTCLICK
BM_SETIMAGE
BM_SETSTATE
BM_SETSTYLE
BN_CLICKED
BN_DBLCLK
BN_KILLFOCUS
BN_SETFOCUS
BST_CHECKED
BST_FOCUS
BST_INDETERMINATE
BST_PUSHED
BST_UNCHECKED
BS_3STATE
BS_AUTO3STATE
BS_AUTOCHECKBOX
BS_AUTORADIOBUTTON
BS_BITMAP
BS_BOTTOM
BS_CENTER
BS_CHECKBOX
BS_DEFPUSHBUTTON
BS_DIBPATTERN
BS_DIBPATTERNPT
BS_FLAT
BS_GROUPBOX
BS_HATCHED
BS_ICON
BS_LEFT
BS_LEFTTEXT
BS_MULTILINE
BS_NOTIFY
BS_NULL
BS_OWNERDRAW
BS_PATTERN
BS_PUSHBUTTON
BS_PUSHLIKE
BS_RADIOBUTTON
BS_RIGHT
BS_SOLID
BS_TEXT
BS_TOP
BS_VCENTER
CBN_CLOSEUP
CBN_DBLCLK
CBN_DROPDOWN
CBN_EDITCHANGE
CBN_EDITUPDATE
CBN_ERRSPACE
CBN_KILLFOCUS
CBN_SELCHANGE
CBN_SELENDCANCEL
CBN_SELENDOK
CBN_SETFOCUS
CBS_AUTOHSCROLL
CBS_DISABLENOSCROLL
CBS_DROPDOWN
CBS_DROPDOWNLIST
CBS_HASSTRINGS
CBS_LOWERCASE
CBS_NOINTEGRALHEIGHT
CBS_OWNERDRAWFIXED
CBS_OWNERDRAWVARIABLE
CBS_SIMPLE
CBS_SORT
CBS_UPPERCASE
CB_ADDSTRING
CB_DELETESTRING
CB_DIR
CB_ERR
CB_ERRSPACE
CB_FINDSTRING
CB_FINDSTRINGEXACT
CB_GETCOMBOBOXINFO
CB_GETCOUNT
CB_GETCURSEL
CB_GETDROPPEDCONTROLRECT
CB_GETDROPPEDSTATE
CB_GETDROPPEDWIDTH
CB_GETEDITSEL
CB_GETEXTENDEDUI
CB_GETHORIZONTALEXTENT
CB_GETITEMDATA
CB_GETITEMHEIGHT
CB_GETLBTEXT
CB_GETLBTEXTLEN
CB_GETLOCALE
CB_GETTOPINDEX
CB_INITSTORAGE
CB_INSERTSTRING
CB_LIMITTEXT
CB_OKAY
CB_RESETCONTENT
CB_SELECTSTRING
CB_SETCURSEL
CB_SETDROPPEDWIDTH
CB_SETEDITSEL
CB_SETEXTENDEDUI
CB_SETHORIZONTALEXTENT
CB_SETITEMDATA
CB_SETITEMHEIGHT
CB_SETLOCALE
CB_SETTOPINDEX
CB_SHOWDROPDOWN
CLEARTYPE_NATURAL_QUALITY
CLEARTYPE_QUALITY
CLIP_DEFAULT_PRECIS
CMD
COLOR_APPWORKSPACE
COLOR_DESKTOP
COLOR_MENU
COLOR_MENUBAR
COLOR_WINDOW
COMMON_CONTROLS_ACTCTX
COMPLEXREGION
CS_CLASSDC
CS_DBLCLKS
CS_DROPSHADOW
CS_HREDRAW
CS_NOCLOSE
CS_OWNDC
CS_PARENTDC
CS_SAVEBITS
CS_VREDRAW
CW_USEDEFAULT
DC_HASDEFID
DDL_ARCHIVE
DDL_DIRECTORY
DDL_DRIVES
DDL_EXCLUSIVE
DDL_HIDDEN
DDL_POSTMSGS
DDL_READONLY
DDL_READWRITE
DDL_SYSTEM
DEFAULT_CHARSET
DEFAULT_PITCH
DEFAULT_QUALITY
DIB_PAL_COLORS
DIB_RGB_COLORS
DLGC_BUTTON
DLGC_DEFPUSHBUTTON
DLGC_HASSETSEL
DLGC_RADIOBUTTON
DLGC_STATIC
DLGC_UNDEFPUSHBUTTON
DLGC_WANTALLKEYS
DLGC_WANTARROWS
DLGC_WANTCHARS
DLGC_WANTMESSAGE
DLGC_WANTTAB
DLGWINDOWEXTRA
DM_GETDEFID
DM_REPOSITION
DM_SETDEFID
DPIX
DPIY
DRAFT_QUALITY
DS_ABSALIGN
DS_CENTER
DS_CENTERMOUSE
DS_CONTROL
DS_MODALFRAME
DT_BOTTOM
DT_CALCRECT
DT_CENTER
DT_EDITCONTROL
DT_END_ELLIPSIS
DT_EXPANDTABS
DT_EXTERNALLEADING
DT_HIDEPREFIX
DT_INTERNAL
DT_LEFT
DT_MODIFYSTRING
DT_NOCLIP
DT_NOPREFIX
DT_PATH_ELLIPSIS
DT_PREFIXONLY
DT_RIGHT
DT_SINGLELINE
DT_TABSTOP
DT_TOP
DT_VCENTER
DT_WORDBREAK
DT_WORD_ELLIPSIS
DWL_DLGPROC
DWL_MSGRESULT
DWL_USER
EC_LEFTMARGIN
EC_RIGHTMARGIN
EC_USEFONTINFO
EM_CANUNDO
EM_CHARFROMPOS
EM_EMPTYUNDOBUFFER
EM_FMTLINES
EM_GETFIRSTVISIBLELINE
EM_GETHANDLE
EM_GETLIMITTEXT
EM_GETLINE
EM_GETLINECOUNT
EM_GETMARGINS
EM_GETMODIFY
EM_GETPASSWORDCHAR
EM_GETRECT
EM_GETSEL
EM_GETTHUMB
EM_GETWORDBREAKPROC
EM_LINEFROMCHAR
EM_LINEINDEX
EM_LINELENGTH
EM_LINESCROLL
EM_POSFROMCHAR
EM_REPLACESEL
EM_SCROLL
EM_SCROLLCARET
EM_SETHANDLE
EM_SETLIMITTEXT
EM_SETMARGINS
EM_SETMODIFY
EM_SETPASSWORDCHAR
EM_SETREADONLY
EM_SETRECT
EM_SETRECTNP
EM_SETSEL
EM_SETTABSTOPS
EM_SETWORDBREAKPROC
EM_UNDO
ENDSESSION_CLOSEAPP
ENDSESSION_CRITICAL
ENDSESSION_LOGOFF
EN_CHANGE
EN_ERRSPACE
EN_HSCROLL
EN_KILLFOCUS
EN_MAXTEXT
EN_SETFOCUS
EN_UPDATE
EN_VSCROLL
ERROR
ESB_DISABLE_BOTH
ESB_DISABLE_DOWN
ESB_DISABLE_LEFT
ESB_DISABLE_RIGHT
ESB_DISABLE_UP
ESB_ENABLE_BOTH
ES_AUTOHSCROLL
ES_AUTOVSCROLL
ES_CENTER
ES_LEFT
ES_LOWERCASE
ES_MULTILINE
ES_NOHIDESEL
ES_NUMBER
ES_PASSWORD
ES_READONLY
ES_RIGHT
ES_UPPERCASE
ES_WANTRETURN
FALT
FCONTROL
FF_DECORATIVE
FF_DONTCARE
FF_MODERN
FF_ROMAN
FF_SCRIPT
FF_SWISS
FIXED_PITCH
FSHIFT
FVIRTKEY
FW_BOLD
FW_DONTCARE
FW_EXTRABOLD
FW_EXTRALIGHT
FW_HEAVY
FW_LIGHT
FW_MEDIUM
FW_NORMAL
FW_SEMIBOLD
FW_THIN
GA_PARENT
GA_ROOT
GA_ROOTOWNER
GCL_CBCLSEXTRA
GCL_CBWNDEXTRA
GCL_HBRBACKGROUND
GCL_HCURSOR
GCL_HICON
GCL_HICONSM
GCL_HMODULE
GCL_MENUNAME
GCL_STYLE
GCL_WNDPROC
GCW_ATOM
GMDI_GOINTOPOPUPS
GMDI_USEDISABLED
GWL_EXSTYLE
GWL_HINSTANCE
GWL_HWNDPARENT
GWL_ID
GWL_STYLE
GWL_USERDATA
GWL_WNDPROC
GW_CHILD
GW_ENABLEDPOPUP
GW_HWNDFIRST
GW_HWNDLAST
GW_HWNDNEXT
GW_HWNDPREV
GW_OWNER
HGDI_ERROR
HS_BDIAGONAL
HS_CROSS
HS_DIAGCROSS
HS_FDIAGONAL
HS_HORIZONTAL
HS_VERTICAL
HWND_BOTTOM
HWND_BROADCAST
HWND_DESKTOP
HWND_MESSAGE
HWND_NOTOPMOST
HWND_TOP
HWND_TOPMOST
ICON_BIG
ICON_SMALL
ICON_SMALL2
IDABORT
IDCANCEL
IDCONTINUE
IDC_APPSTARTING
IDC_ARROW
IDC_CROSS
IDC_HAND
IDC_HELP
IDC_IBEAM
IDC_NO
IDC_SIZEALL
IDC_SIZENESW
IDC_SIZENS
IDC_SIZENWSE
IDC_SIZEWE
IDC_WAIT
IDIGNORE
IDI_APPLICATION
IDI_ERROR
IDI_INFORMATION
IDI_QUESTION
IDI_SHIELD
IDI_WARNING
IDNO
IDOK
IDRETRY
IDTIMEOUT
IDTRYAGAIN
IDYES
IMAGE_BITMAP
IMAGE_CURSOR
IMAGE_ICON
INPUT_HARDWARE
INPUT_KEYBOARD
INPUT_MOUSE
INVALID_HANDLE_VALUE
Id2Ref
KEYEVENTF_EXTENDEDKEY
KEYEVENTF_KEYUP
KEYEVENTF_SCANCODE
KEYEVENTF_UNICODE
LBN_DBLCLK
LBN_ERRSPACE
LBN_KILLFOCUS
LBN_SELCANCEL
LBN_SELCHANGE
LBN_SETFOCUS
LBS_COMBOBOX
LBS_DISABLENOSCROLL
LBS_EXTENDEDSEL
LBS_HASSTRINGS
LBS_MULTICOLUMN
LBS_MULTIPLESEL
LBS_NODATA
LBS_NOINTEGRALHEIGHT
LBS_NOREDRAW
LBS_NOSEL
LBS_NOTIFY
LBS_OWNERDRAWFIXED
LBS_OWNERDRAWVARIABLE
LBS_SORT
LBS_STANDARD
LBS_USETABSTOPS
LBS_WANTKEYBOARDINPUT
LB_ADDFILE
LB_ADDSTRING
LB_DELETESTRING
LB_DIR
LB_ERR
LB_ERRSPACE
LB_FINDSTRING
LB_FINDSTRINGEXACT
LB_GETANCHORINDEX
LB_GETCARETINDEX
LB_GETCOUNT
LB_GETCURSEL
LB_GETHORIZONTALEXTENT
LB_GETITEMDATA
LB_GETITEMHEIGHT
LB_GETITEMRECT
LB_GETLISTBOXINFO
LB_GETLOCALE
LB_GETSEL
LB_GETSELCOUNT
LB_GETSELITEMS
LB_GETTEXT
LB_GETTEXTLEN
LB_GETTOPINDEX
LB_INITSTORAGE
LB_INSERTSTRING
LB_ITEMFROMPOINT
LB_OKAY
LB_RESETCONTENT
LB_SELECTSTRING
LB_SELITEMRANGEEX
LB_SETANCHORINDEX
LB_SETCARETINDEX
LB_SETCOLUMNWIDTH
LB_SETCOUNT
LB_SETCURSEL
LB_SETHORIZONTALEXTENT
LB_SETITEMDATA
LB_SETITEMHEIGHT
LB_SETLOCALE
LB_SETSEL
LB_SETTABSTOPS
LB_SETTOPINDEX
LOGPIXELSX
LOGPIXELSY
LR_CREATEDIBSECTION
LR_DEFAULTSIZE
LR_LOADFROMFILE
LR_LOADMAP3DCOLORS
LR_LOADTRANSPARENT
LR_SHARED
LWA_ALPHA
LWA_COLORKEY
MB_ABORTRETRYIGNORE
MB_APPLMODAL
MB_CANCELTRYCONTINUE
MB_DEFBUTTON1
MB_DEFBUTTON2
MB_DEFBUTTON3
MB_DEFBUTTON4
MB_HELP
MB_ICONERROR
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONWARNING
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_SYSTEMMODAL
MB_TASKMODAL
MB_YESNO
MB_YESNOCANCEL
MFS_GRAYED
MFT_RADIOCHECK
MF_BITMAP
MF_BYCOMMAND
MF_BYPOSITION
MF_CHECKED
MF_DEFAULT
MF_DISABLED
MF_ENABLED
MF_GRAYED
MF_HILITE
MF_MENUBARBREAK
MF_MENUBREAK
MF_OWNERDRAW
MF_POPUP
MF_RIGHTJUSTIFY
MF_SEPARATOR
MF_STRING
MF_UNCHECKED
MF_UNHILITE
MIIM_BITMAP
MIIM_CHECKMARKS
MIIM_DATA
MIIM_FTYPE
MIIM_ID
MIIM_STATE
MIIM_STRING
MIIM_SUBMENU
MK_CONTROL
MK_LBUTTON
MK_MBUTTON
MK_RBUTTON
MK_SHIFT
MK_XBUTTON1
MK_XBUTTON2
MOUSEEVENTF_ABSOLUTE
MOUSEEVENTF_HWHEEL
MOUSEEVENTF_LEFTDOWN
MOUSEEVENTF_LEFTUP
MOUSEEVENTF_MIDDLEDOWN
MOUSEEVENTF_MIDDLEUP
MOUSEEVENTF_MOVE
MOUSEEVENTF_MOVE_NOCOALESCE
MOUSEEVENTF_RIGHTDOWN
MOUSEEVENTF_RIGHTUP
MOUSEEVENTF_VIRTUALDESK
MOUSEEVENTF_WHEEL
MOUSEEVENTF_XDOWN
MOUSEEVENTF_XUP
NONANTIALIASED_QUALITY
NTDDI_VERSION
NTDDI_VISTA
NTDDI_VISTASP1
NTDDI_VISTASP2
NTDDI_VISTASP3
NTDDI_VISTASP4
NTDDI_WIN10
NTDDI_WIN10_RS1
NTDDI_WIN10_TH2
NTDDI_WIN2K
NTDDI_WIN2KSP1
NTDDI_WIN2KSP2
NTDDI_WIN2KSP3
NTDDI_WIN2KSP4
NTDDI_WIN7
NTDDI_WIN8
NTDDI_WINBLUE
NTDDI_WINXP
NTDDI_WINXPSP1
NTDDI_WINXPSP2
NTDDI_WINXPSP3
NTDDI_WINXPSP4
NTDDI_WS03
NTDDI_WS03SP1
NTDDI_WS03SP2
NTDDI_WS03SP3
NTDDI_WS03SP4
NTDDI_WS08
NTDDI_WS08SP2
NTDDI_WS08SP3
NTDDI_WS08SP4
NULLREGION
OBJID_CLIENT
OBJID_HSCROLL
OBJID_VSCROLL
ODA_DRAWENTIRE
ODA_FOCUS
ODA_SELECT
ODS_CHECKED
ODS_COMBOBOXEDIT
ODS_DEFAULT
ODS_DISABLED
ODS_FOCUS
ODS_GRAYED
ODS_HOTLIGHT
ODS_INACTIVE
ODS_NOACCEL
ODS_NOFOCUSRECT
ODS_SELECTED
ODT_BUTTON
ODT_COMBOBOX
ODT_LISTBOX
ODT_MENU
ODT_STATIC
OSVERSION
OUT_DEFAULT_PRECIS
OUT_DEVICE_PRECIS
OUT_OUTLINE_PRECIS
OUT_PS_ONLY_PRECIS
OUT_RASTER_PRECIS
OUT_SCREEN_OUTLINE_PRECIS
OUT_TT_ONLY_PRECIS
OUT_TT_PRECIS
PM_NOREMOVE
PM_NOYIELD
PM_REMOVE
PRF_CHECKVISIBLE
PRF_CHILDREN
PRF_CLIENT
PRF_ERASEBKGND
PRF_NONCLIENT
PRF_OWNED
PROOF_QUALITY
PS_ALTERNATE
PS_COSMETIC
PS_DASH
PS_DASHDOT
PS_DASHDOTDOT
PS_DOT
PS_ENDCAP_FLAT
PS_ENDCAP_ROUND
PS_ENDCAP_SQUARE
PS_GEOMETRIC
PS_INSIDEFRAME
PS_JOIN_BEVEL
PS_JOIN_MITER
PS_JOIN_ROUND
PS_NULL
PS_SOLID
PS_USERSTYLE
PT_BEZIERTO
PT_CLOSEFIGURE
PT_LINETO
PT_MOVETO
R2_BLACK
R2_COPYPEN
R2_MASKNOTPEN
R2_MASKPEN
R2_MASKPENNOT
R2_MERGENOTPEN
R2_MERGEPEN
R2_MERGEPENNOT
R2_NOP
R2_NOT
R2_NOTCOPYPEN
R2_NOTMASKPEN
R2_NOTMERGEPEN
R2_NOTXORPEN
R2_WHITE
R2_XORPEN
RGN_AND
RGN_COPY
RGN_DIFF
RGN_OR
RGN_XOR
SBM_ENABLE_ARROWS
SBM_GETPOS
SBM_GETRANGE
SBM_GETSCROLLBARINFO
SBM_GETSCROLLINFO
SBM_SETPOS
SBM_SETRANGE
SBM_SETRANGEREDRAW
SBM_SETSCROLLINFO
SBS_BOTTOMALIGN
SBS_HORZ
SBS_LEFTALIGN
SBS_RIGHTALIGN
SBS_SIZEBOX
SBS_SIZEBOXBOTTOMRIGHTALIGN
SBS_SIZEBOXTOPLEFTALIGN
SBS_SIZEGRIP
SBS_TOPALIGN
SBS_VERT
SB_BOTH
SB_BOTTOM
SB_CTL
SB_ENDSCROLL
SB_HORZ
SB_LEFT
SB_LINEDOWN
SB_LINELEFT
SB_LINERIGHT
SB_LINEUP
SB_PAGEDOWN
SB_PAGELEFT
SB_PAGERIGHT
SB_PAGEUP
SB_RIGHT
SB_THUMBPOSITION
SB_THUMBTRACK
SB_TOP
SB_VERT
SC_ARRANGE
SC_CLOSE
SC_CONTEXTHELP
SC_DEFAULT
SC_HOTKEY
SC_HSCROLL
SC_KEYMENU
SC_MAXIMIZE
SC_MINIMIZE
SC_MONITORPOWER
SC_MOUSEMENU
SC_MOVE
SC_NEXTWINDOW
SC_PREVWINDOW
SC_RESTORE
SC_SCREENSAVE
SC_SIZE
SC_TASKLIST
SC_VSCROLL
SE_ERR_ACCESSDENIED
SE_ERR_ASSOCINCOMPLETE
SE_ERR_DDEBUSY
SE_ERR_DDEFAIL
SE_ERR_DDETIMEOUT
SE_ERR_DLLNOTFOUND
SE_ERR_FNF
SE_ERR_NOASSOC
SE_ERR_OOM
SE_ERR_PNF
SE_ERR_SHARE
SIF_ALL
SIF_DISABLENOSCROLL
SIF_PAGE
SIF_POS
SIF_RANGE
SIF_TRACKPOS
SIMPLEREGION
SIZE_MAXHIDE
SIZE_MAXIMIZED
SIZE_MAXSHOW
SIZE_MINIMIZED
SIZE_RESTORED
SM_CXSCREEN
SM_CYSCREEN
SPI_GETNONCLIENTMETRICS
SPI_SETNONCLIENTMETRICS
SS_BITMAP
SS_BLACKFRAME
SS_BLACKRECT
SS_CENTER
SS_CENTERIMAGE
SS_EDITCONTROL
SS_ENDELLIPSIS
SS_ETCHEDFRAME
SS_ETCHEDHORZ
SS_ETCHEDVERT
SS_GRAYFRAME
SS_GRAYRECT
SS_ICON
SS_LEFT
SS_LEFTNOWORDWRAP
SS_NOPREFIX
SS_NOTIFY
SS_OWNERDRAW
SS_PATHELLIPSIS
SS_REALSIZECONTROL
SS_REALSIZEIMAGE
SS_RIGHT
SS_RIGHTJUST
SS_SIMPLE
SS_SUNKEN
SS_WHITEFRAME
SS_WHITERECT
SS_WORDELLIPSIS
STM_GETICON
STM_GETIMAGE
STM_SETICON
STM_SETIMAGE
STN_CLICKED
STN_DBLCLK
STN_DISABLE
STN_ENABLE
SWP_ASYNCWINDOWPOS
SWP_FRAMECHANGED
SWP_NOACTIVATE
SWP_NOMOVE
SWP_NOOWNERZORDER
SWP_NOSIZE
SWP_NOZORDER
SW_ERASE
SW_FORCEMINIMIZE
SW_HIDE
SW_INVALIDATE
SW_MAXIMIZE
SW_MINIMIZE
SW_OTHERUNZOOM
SW_OTHERZOOM
SW_PARENTCLOSING
SW_PARENTOPENING
SW_RESTORE
SW_SCROLLCHILDREN
SW_SHOW
SW_SHOWDEFAULT
SW_SHOWMAXIMIZED
SW_SHOWMINIMIZED
SW_SHOWMINNOACTIVE
SW_SHOWNA
SW_SHOWNOACTIVATE
SW_SHOWNORMAL
SW_SMOOTHSCROLL
SYSCMD
TPM_BOTTOMALIGN
TPM_CENTERALIGN
TPM_HORIZONTAL
TPM_LEFTALIGN
TPM_LEFTBUTTON
TPM_NONOTIFY
TPM_RECURSE
TPM_RETURNCMD
TPM_RIGHTALIGN
TPM_RIGHTBUTTON
TPM_TOPALIGN
TPM_VCENTERALIGN
TPM_VERTICAL
VARIABLE_PITCH
VK_ADD
VK_BACK
VK_CANCEL
VK_CAPITAL
VK_CONTROL
VK_DECIMAL
VK_DELETE
VK_DIVIDE
VK_DOWN
VK_END
VK_ESCAPE
VK_F1
VK_F10
VK_F11
VK_F12
VK_F2
VK_F3
VK_F4
VK_F5
VK_F6
VK_F7
VK_F8
VK_F9
VK_HOME
VK_INSERT
VK_LBUTTON
VK_LCONTROL
VK_LEFT
VK_LMENU
VK_LSHIFT
VK_LWIN
VK_MBUTTON
VK_MEDIA_NEXT_TRACK
VK_MEDIA_PLAY_PAUSE
VK_MEDIA_PREV_TRACK
VK_MEDIA_STOP
VK_MENU
VK_MULTIPLY
VK_NEXT
VK_NUMLOCK
VK_NUMPAD0
VK_NUMPAD1
VK_NUMPAD2
VK_NUMPAD3
VK_NUMPAD4
VK_NUMPAD5
VK_NUMPAD6
VK_NUMPAD7
VK_NUMPAD8
VK_NUMPAD9
VK_PAUSE
VK_PRIOR
VK_RBUTTON
VK_RCONTROL
VK_RETURN
VK_RIGHT
VK_RMENU
VK_RSHIFT
VK_RWIN
VK_SCROLL
VK_SHIFT
VK_SNAPSHOT
VK_SPACE
VK_SUBTRACT
VK_TAB
VK_UP
VK_VOLUME_DOWN
VK_VOLUME_MUTE
VK_VOLUME_UP
VK_XBUTTON1
VK_XBUTTON2
WA_ACTIVE
WA_CLICKACTIVE
WA_INACTIVE
WB_ISDELIMITER
WB_LEFT
WB_RIGHT
WC_DIALOG
WHEEL_DELTA
WIN10
WIN2K
WIN7
WIN8
WINBLUE
WINDING
WINNAME
WINVER
WINVISTA
WINXP
WMSZ_BOTTOM
WMSZ_BOTTOMLEFT
WMSZ_BOTTOMRIGHT
WMSZ_LEFT
WMSZ_RIGHT
WMSZ_TOP
WMSZ_TOPLEFT
WMSZ_TOPRIGHT
WM_ACTIVATE
WM_APP
WM_CAPTURECHANGED
WM_CHAR
WM_CHARTOITEM
WM_CLOSE
WM_COMMAND
WM_COMPAREITEM
WM_CONTEXTMENU
WM_CREATE
WM_CTLCOLORBTN
WM_CTLCOLOREDIT
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC
WM_DEADCHAR
WM_DELETEITEM
WM_DESTROY
WM_DRAWITEM
WM_ENABLE
WM_ENDSESSION
WM_ERASEBKGND
WM_GETDLGCODE
WM_GETFONT
WM_GETICON
WM_GETMINMAXINFO
WM_GETTEXT
WM_GETTEXTLENGTH
WM_HSCROLL
WM_INITDIALOG
WM_INITMENU
WM_INITMENUPOPUP
WM_KEYDOWN
WM_KEYUP
WM_KILLFOCUS
WM_LBUTTONDBLCLK
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_MBUTTONDBLCLK
WM_MBUTTONDOWN
WM_MBUTTONUP
WM_MEASUREITEM
WM_MOUSEHWHEEL
WM_MOUSEMOVE
WM_MOUSEWHEEL
WM_MOVE
WM_MOVING
WM_NCCREATE
WM_NCDESTROY
WM_NOTIFY
WM_PAINT
WM_PRINT
WM_PRINTCLIENT
WM_QUERYENDSESSION
WM_QUIT
WM_RBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_SETFOCUS
WM_SETFONT
WM_SETICON
WM_SETTEXT
WM_SHOWWINDOW
WM_SIZE
WM_SIZING
WM_STYLECHANGED
WM_STYLECHANGING
WM_SYSCHAR
WM_SYSCOMMAND
WM_SYSDEADCHAR
WM_SYSKEYDOWN
WM_SYSKEYUP
WM_USER
WM_VKEYTOITEM
WM_VSCROLL
WM_WINDOWPOSCHANGED
WM_WINDOWPOSCHANGING
WM_XBUTTONDBLCLK
WM_XBUTTONDOWN
WM_XBUTTONUP
WS_BORDER
WS_CAPTION
WS_CHILD
WS_CHILDWINDOW
WS_CLIPCHILDREN
WS_CLIPSIBLINGS
WS_DISABLED
WS_DLGFRAME
WS_EX_ACCEPTFILES
WS_EX_APPWINDOW
WS_EX_CLIENTEDGE
WS_EX_COMPOSITED
WS_EX_CONTEXTHELP
WS_EX_CONTROLPARENT
WS_EX_DLGMODALFRAME
WS_EX_LAYERED
WS_EX_NOPARENTNOTIFY
WS_EX_OVERLAPPEDWINDOW
WS_EX_PALETTEWINDOW
WS_EX_STATICEDGE
WS_EX_TOOLWINDOW
WS_EX_TOPMOST
WS_EX_TRANSPARENT
WS_EX_WINDOWEDGE
WS_GROUP
WS_HSCROLL
WS_MAXIMIZE
WS_MAXIMIZEBOX
WS_MINIMIZE
WS_MINIMIZEBOX
WS_OVERLAPPED
WS_OVERLAPPEDWINDOW
WS_POPUP
WS_POPUPWINDOW
WS_SYSMENU
WS_TABSTOP
WS_THICKFRAME
WS_VISIBLE
WS_VSCROLL
XBUTTON1
XBUTTON2

Public Class Methods

DPIAwareFontHeight(pointSize) click to toggle source
# File lib/windows_gui/gdi.rb, line 57
def DPIAwareFontHeight(pointSize)
        -MulDiv(pointSize, DPIY, 72)
end
DPIAwareX(x) click to toggle source
# File lib/windows_gui/user.rb, line 197
def DPIAwareX(x)
        MulDiv(x, DPIX, 96)
end
DPIAwareXY(*args) click to toggle source
# File lib/windows_gui/user.rb, line 205
def DPIAwareXY(*args)
        raise ArgumentError, 'Expected two or more, even count arguments' if
                args.length < 2 || args.length.odd?

        args.each_with_index { |arg, i|
                args[i] = (i.even?) ? DPIAwareX(arg) : DPIAwareY(arg)
        }
end
DPIAwareY(y) click to toggle source
# File lib/windows_gui/user.rb, line 201
def DPIAwareY(y)
        MulDiv(y, DPIY, 96)
end
DeclareDPIAware() click to toggle source
# File lib/windows_gui/user.rb, line 138
def DeclareDPIAware
        return unless WINVER >= WINVISTA

        Detonate(0, :SetProcessDPIAware)

        STDERR.puts "DPI aware init" if $DEBUG
end
Detonate(on, name, *args) { |result| ... } click to toggle source
# File lib/windows_gui/common.rb, line 56
def Detonate(on, name, *args)
        result = send(name, *args)
        failed = [*on].include?(result)

        raise "#{name} failed (result: #{result})" if failed

        result
ensure
        yield result if failed && block_given?
end
DetonateLastError(on, name, *args) { |result, last_error| ... } click to toggle source

TODO: GetLastError always returns 0

# File lib/windows_gui/common.rb, line 68
def DetonateLastError(on, name, *args)
        result = send(name, *args)
        failed = [*on].include?(result)
        last_error = 0

        raise "#{name} failed (last error: #{last_error = GetLastError()})" if failed

        result
ensure
        yield result, last_error if failed && block_given?
end
DoPaint(hwnd) { |ps| ... } click to toggle source
# File lib/windows_gui/user.rb, line 1061
def DoPaint(hwnd)
        return unless GetUpdateRect(hwnd, nil, 0) != 0

        UsingFFIStructs(PAINTSTRUCT.new) { |ps|
                DetonateLastError(FFI::Pointer::NULL, :BeginPaint,
                        hwnd, ps
                )

                begin
                        yield ps
                ensure
                        EndPaint(hwnd, ps)
                end
        }
end
DoPrintClient(hwnd, wParam) { |ps| ... } click to toggle source
# File lib/windows_gui/user.rb, line 1077
def DoPrintClient(hwnd, wParam)
        UsingFFIStructs(PAINTSTRUCT.new) { |ps|
                ps[:hdc] = FFI::Pointer.new(wParam)
                ps[:fErase] = 1
                GetClientRect(hwnd, ps[:rcPaint])

                yield ps
        }
end
EnableVisualStyles() click to toggle source
# File lib/windows_gui/kernel.rb, line 199
        def EnableVisualStyles
                return unless WINVER >= WINXP

                raise 'Visual styles already enabled' if
                        COMMON_CONTROLS_ACTCTX[:activated]

                manifest = "#{ENV['TEMP']}/windows_gui.manifest"

                File.open(manifest, 'w:utf-8') { |file|
                        file << <<-XML

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
        <dependency>
                <dependentAssembly>
<assemblyIdentity
        type='Win32'
        name='Microsoft.Windows.Common-Controls'
        version='6.0.0.0'
        processorArchitecture='*'
        publicKeyToken='6595b64144ccf1df'
        language='*'
/>
                </dependentAssembly>
        </dependency>
</assembly>
                        XML
                }

                UsingFFIStructs(ACTCTX.new) { |ac|
                        ac[:cbSize] = ac.size

                        UsingFFIMemoryPointers(PWSTR(L(manifest))) { |source|
                                ac[:lpSource] = source

                                COMMON_CONTROLS_ACTCTX[:handle] =
                                        DetonateLastError(INVALID_HANDLE_VALUE, :CreateActCtx,
                                                ac
                                        )
                        }
                }

                DetonateLastError(0, :ActivateActCtx,
                        COMMON_CONTROLS_ACTCTX[:handle], COMMON_CONTROLS_ACTCTX[:cookie]
                ) {
                        ReleaseActCtx(COMMON_CONTROLS_ACTCTX[:handle])
                        COMMON_CONTROLS_ACTCTX[:handle] = INVALID_HANDLE_VALUE
                }

                COMMON_CONTROLS_ACTCTX[:activated] = true

                STDERR.puts "Visual styles init (COMMON_CONTROLS_ACTCTX: #{COMMON_CONTROLS_ACTCTX})" if $DEBUG
        end
FormatException(ex) click to toggle source
# File lib/windows_gui/common.rb, line 12
def FormatException(ex)
        str, trace = ex.to_s, ex.backtrace

        str << "\n\n-- backtrace --\n\n" << trace.join("\n") if trace

        str
end
GetBValue(rgb) click to toggle source
# File lib/windows_gui/gdi.rb, line 25
def GetBValue(rgb)
        LOBYTE(rgb >> 16)
end
GetGValue(rgb) click to toggle source
# File lib/windows_gui/gdi.rb, line 21
def GetGValue(rgb)
        LOBYTE(rgb >> 8)
end
GetRValue(rgb) click to toggle source
# File lib/windows_gui/gdi.rb, line 17
def GetRValue(rgb)
        LOBYTE(rgb)
end
HIBYTE(word) click to toggle source
# File lib/windows_gui/common.rb, line 98
def HIBYTE(word)
        (word >> 8) & 0xff
end
HISHORT(long) click to toggle source
# File lib/windows_gui/common.rb, line 118
def HISHORT(long)
        ((hishort = HIWORD(long)) > 0x7fff) ? hishort - 0x1_0000 : hishort
end
HIWORD(long) click to toggle source
# File lib/windows_gui/common.rb, line 110
def HIWORD(long)
        (long >> 16) & 0xffff
end
Id2RefTrack(obj) click to toggle source
# File lib/windows_gui/common.rb, line 22
def Id2RefTrack(obj)
        Id2Ref[oid = obj.object_id] = WeakRef.new(obj)

        STDERR.puts "Object id #{oid} of #{obj} stored in Id2Ref track hash" if $DEBUG

        ObjectSpace.define_finalizer(obj, -> id {
                Id2Ref.delete(id)

                STDERR.puts "Object id #{id} deleted from Id2Ref track hash" if $DEBUG
        })

        oid
end
L(str) click to toggle source
# File lib/windows_gui/common.rb, line 132
def L(str)
        (str << "\0").encode!('utf-16le')
end
LOBYTE(word) click to toggle source
# File lib/windows_gui/common.rb, line 94
def LOBYTE(word)
        word & 0xff
end
LOSHORT(long) click to toggle source
# File lib/windows_gui/common.rb, line 114
def LOSHORT(long)
        ((loshort = LOWORD(long)) > 0x7fff) ? loshort - 0x1_0000 : loshort
end
LOWORD(long) click to toggle source
# File lib/windows_gui/common.rb, line 106
def LOWORD(long)
        long & 0xffff
end
MAKELONG(loword, hiword) click to toggle source
# File lib/windows_gui/common.rb, line 102
def MAKELONG(loword, hiword)
        (loword & 0xffff) | ((hiword & 0xffff) << 16)
end
MAKEWORD(lobyte, hibyte) click to toggle source
# File lib/windows_gui/common.rb, line 90
def MAKEWORD(lobyte, hibyte)
        (lobyte & 0xff) | ((hibyte & 0xff) << 8)
end
NormalizeRect(rect) click to toggle source
# File lib/windows_gui/user.rb, line 69
def NormalizeRect(rect)
        rect[:left], rect[:right] = rect[:right], rect[:left] if
                rect[:left] > rect[:right]
        rect[:top], rect[:bottom] = rect[:bottom], rect[:top] if
                rect[:top] > rect[:bottom]
end
PWSTR(wstr) click to toggle source
# File lib/windows_gui/common.rb, line 136
def PWSTR(wstr)
        raise 'Invalid Unicode string' unless
                wstr.encoding == Encoding::UTF_16LE && wstr[-1] == L('')

        FFI::MemoryPointer.new(:ushort, wstr.length).
                put_bytes(0, wstr)
end
RGB(r, g, b) click to toggle source
# File lib/windows_gui/gdi.rb, line 13
def RGB(r, g, b)
        r | (g << 8) | (b << 16)
end
TARGETVER(version, message) click to toggle source
# File lib/windows_gui/kernel.rb, line 119
def TARGETVER(version, message)
        version = MAKELONG(0x0000, version) if version < 0xffff

        exit(-1) if NTDDI_VERSION < version &&
                MessageBox(nil,
                        message,
                        APPNAME,
                        MB_YESNO | MB_ICONERROR | MB_DEFBUTTON2
                ) == IDNO
end
UsingDC(hwnd) { |hdc| ... } click to toggle source
# File lib/windows_gui/user.rb, line 176
def UsingDC(hwnd)
        hdc = DetonateLastError(FFI::Pointer::NULL, :GetDC,
                hwnd
        )

        begin
                yield hdc
        ensure
                ReleaseDC(hwnd, hdc)
        end
end
UsingFFIMemoryPointers(*ptrs) { |*ptrs| ... } click to toggle source
# File lib/windows_gui/common.rb, line 46
def UsingFFIMemoryPointers(*ptrs)
        yield(*ptrs)
ensure
        ptrs.each { |ptr|
                ptr.free

                STDERR.puts "#{ptr} freed" if $DEBUG
        }
end
UsingFFIStructs(*structs) { |*structs| ... } click to toggle source
# File lib/windows_gui/common.rb, line 36
def UsingFFIStructs(*structs)
        yield(*structs)
ensure
        structs.each { |struct|
                struct.pointer.free

                STDERR.puts "#{struct} freed" if $DEBUG
        }
end
UsingGDIObjects(hdc, *hgdiobjs) { |*hgdiobjs| ... } click to toggle source
# File lib/windows_gui/gdi.rb, line 370
def UsingGDIObjects(hdc, *hgdiobjs)
        holds = []

        hgdiobjs.each { |hgdiobj|
                holds << DetonateLastError([FFI::Pointer::NULL, HGDI_ERROR], :SelectObject,
                        hdc, hgdiobj
                )
        }

        yield(*hgdiobjs)
ensure
        holds.each { |hgdiobj|
                SelectObject(hdc, hgdiobj)
        }
end
UsingWindowDC(hwnd) { |hdc| ... } click to toggle source
# File lib/windows_gui/user.rb, line 164
def UsingWindowDC(hwnd)
        hdc = DetonateLastError(FFI::Pointer::NULL, :GetWindowDC,
                hwnd
        )

        begin
                yield hdc
        ensure
                ReleaseDC(hwnd, hdc)
        end
end

Private Instance Methods

DPIAwareFontHeight(pointSize) click to toggle source
# File lib/windows_gui/gdi.rb, line 57
def DPIAwareFontHeight(pointSize)
        -MulDiv(pointSize, DPIY, 72)
end
DPIAwareX(x) click to toggle source
# File lib/windows_gui/user.rb, line 197
def DPIAwareX(x)
        MulDiv(x, DPIX, 96)
end
DPIAwareXY(*args) click to toggle source
# File lib/windows_gui/user.rb, line 205
def DPIAwareXY(*args)
        raise ArgumentError, 'Expected two or more, even count arguments' if
                args.length < 2 || args.length.odd?

        args.each_with_index { |arg, i|
                args[i] = (i.even?) ? DPIAwareX(arg) : DPIAwareY(arg)
        }
end
DPIAwareY(y) click to toggle source
# File lib/windows_gui/user.rb, line 201
def DPIAwareY(y)
        MulDiv(y, DPIY, 96)
end
DeclareDPIAware() click to toggle source
# File lib/windows_gui/user.rb, line 138
def DeclareDPIAware
        return unless WINVER >= WINVISTA

        Detonate(0, :SetProcessDPIAware)

        STDERR.puts "DPI aware init" if $DEBUG
end
Detonate(on, name, *args) { |result| ... } click to toggle source
# File lib/windows_gui/common.rb, line 56
def Detonate(on, name, *args)
        result = send(name, *args)
        failed = [*on].include?(result)

        raise "#{name} failed (result: #{result})" if failed

        result
ensure
        yield result if failed && block_given?
end
DetonateLastError(on, name, *args) { |result, last_error| ... } click to toggle source

TODO: GetLastError always returns 0

# File lib/windows_gui/common.rb, line 68
def DetonateLastError(on, name, *args)
        result = send(name, *args)
        failed = [*on].include?(result)
        last_error = 0

        raise "#{name} failed (last error: #{last_error = GetLastError()})" if failed

        result
ensure
        yield result, last_error if failed && block_given?
end
DoPaint(hwnd) { |ps| ... } click to toggle source
# File lib/windows_gui/user.rb, line 1061
def DoPaint(hwnd)
        return unless GetUpdateRect(hwnd, nil, 0) != 0

        UsingFFIStructs(PAINTSTRUCT.new) { |ps|
                DetonateLastError(FFI::Pointer::NULL, :BeginPaint,
                        hwnd, ps
                )

                begin
                        yield ps
                ensure
                        EndPaint(hwnd, ps)
                end
        }
end
DoPrintClient(hwnd, wParam) { |ps| ... } click to toggle source
# File lib/windows_gui/user.rb, line 1077
def DoPrintClient(hwnd, wParam)
        UsingFFIStructs(PAINTSTRUCT.new) { |ps|
                ps[:hdc] = FFI::Pointer.new(wParam)
                ps[:fErase] = 1
                GetClientRect(hwnd, ps[:rcPaint])

                yield ps
        }
end
EnableVisualStyles() click to toggle source
# File lib/windows_gui/kernel.rb, line 199
        def EnableVisualStyles
                return unless WINVER >= WINXP

                raise 'Visual styles already enabled' if
                        COMMON_CONTROLS_ACTCTX[:activated]

                manifest = "#{ENV['TEMP']}/windows_gui.manifest"

                File.open(manifest, 'w:utf-8') { |file|
                        file << <<-XML

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
        <dependency>
                <dependentAssembly>
<assemblyIdentity
        type='Win32'
        name='Microsoft.Windows.Common-Controls'
        version='6.0.0.0'
        processorArchitecture='*'
        publicKeyToken='6595b64144ccf1df'
        language='*'
/>
                </dependentAssembly>
        </dependency>
</assembly>
                        XML
                }

                UsingFFIStructs(ACTCTX.new) { |ac|
                        ac[:cbSize] = ac.size

                        UsingFFIMemoryPointers(PWSTR(L(manifest))) { |source|
                                ac[:lpSource] = source

                                COMMON_CONTROLS_ACTCTX[:handle] =
                                        DetonateLastError(INVALID_HANDLE_VALUE, :CreateActCtx,
                                                ac
                                        )
                        }
                }

                DetonateLastError(0, :ActivateActCtx,
                        COMMON_CONTROLS_ACTCTX[:handle], COMMON_CONTROLS_ACTCTX[:cookie]
                ) {
                        ReleaseActCtx(COMMON_CONTROLS_ACTCTX[:handle])
                        COMMON_CONTROLS_ACTCTX[:handle] = INVALID_HANDLE_VALUE
                }

                COMMON_CONTROLS_ACTCTX[:activated] = true

                STDERR.puts "Visual styles init (COMMON_CONTROLS_ACTCTX: #{COMMON_CONTROLS_ACTCTX})" if $DEBUG
        end
FormatException(ex) click to toggle source
# File lib/windows_gui/common.rb, line 12
def FormatException(ex)
        str, trace = ex.to_s, ex.backtrace

        str << "\n\n-- backtrace --\n\n" << trace.join("\n") if trace

        str
end
GetBValue(rgb) click to toggle source
# File lib/windows_gui/gdi.rb, line 25
def GetBValue(rgb)
        LOBYTE(rgb >> 16)
end
GetGValue(rgb) click to toggle source
# File lib/windows_gui/gdi.rb, line 21
def GetGValue(rgb)
        LOBYTE(rgb >> 8)
end
GetRValue(rgb) click to toggle source
# File lib/windows_gui/gdi.rb, line 17
def GetRValue(rgb)
        LOBYTE(rgb)
end
HIBYTE(word) click to toggle source
# File lib/windows_gui/common.rb, line 98
def HIBYTE(word)
        (word >> 8) & 0xff
end
HISHORT(long) click to toggle source
# File lib/windows_gui/common.rb, line 118
def HISHORT(long)
        ((hishort = HIWORD(long)) > 0x7fff) ? hishort - 0x1_0000 : hishort
end
HIWORD(long) click to toggle source
# File lib/windows_gui/common.rb, line 110
def HIWORD(long)
        (long >> 16) & 0xffff
end
Id2RefTrack(obj) click to toggle source
# File lib/windows_gui/common.rb, line 22
def Id2RefTrack(obj)
        Id2Ref[oid = obj.object_id] = WeakRef.new(obj)

        STDERR.puts "Object id #{oid} of #{obj} stored in Id2Ref track hash" if $DEBUG

        ObjectSpace.define_finalizer(obj, -> id {
                Id2Ref.delete(id)

                STDERR.puts "Object id #{id} deleted from Id2Ref track hash" if $DEBUG
        })

        oid
end
L(str) click to toggle source
# File lib/windows_gui/common.rb, line 132
def L(str)
        (str << "\0").encode!('utf-16le')
end
LOBYTE(word) click to toggle source
# File lib/windows_gui/common.rb, line 94
def LOBYTE(word)
        word & 0xff
end
LOSHORT(long) click to toggle source
# File lib/windows_gui/common.rb, line 114
def LOSHORT(long)
        ((loshort = LOWORD(long)) > 0x7fff) ? loshort - 0x1_0000 : loshort
end
LOWORD(long) click to toggle source
# File lib/windows_gui/common.rb, line 106
def LOWORD(long)
        long & 0xffff
end
MAKELONG(loword, hiword) click to toggle source
# File lib/windows_gui/common.rb, line 102
def MAKELONG(loword, hiword)
        (loword & 0xffff) | ((hiword & 0xffff) << 16)
end
MAKEWORD(lobyte, hibyte) click to toggle source
# File lib/windows_gui/common.rb, line 90
def MAKEWORD(lobyte, hibyte)
        (lobyte & 0xff) | ((hibyte & 0xff) << 8)
end
NormalizeRect(rect) click to toggle source
# File lib/windows_gui/user.rb, line 69
def NormalizeRect(rect)
        rect[:left], rect[:right] = rect[:right], rect[:left] if
                rect[:left] > rect[:right]
        rect[:top], rect[:bottom] = rect[:bottom], rect[:top] if
                rect[:top] > rect[:bottom]
end
PWSTR(wstr) click to toggle source
# File lib/windows_gui/common.rb, line 136
def PWSTR(wstr)
        raise 'Invalid Unicode string' unless
                wstr.encoding == Encoding::UTF_16LE && wstr[-1] == L('')

        FFI::MemoryPointer.new(:ushort, wstr.length).
                put_bytes(0, wstr)
end
RGB(r, g, b) click to toggle source
# File lib/windows_gui/gdi.rb, line 13
def RGB(r, g, b)
        r | (g << 8) | (b << 16)
end
TARGETVER(version, message) click to toggle source
# File lib/windows_gui/kernel.rb, line 119
def TARGETVER(version, message)
        version = MAKELONG(0x0000, version) if version < 0xffff

        exit(-1) if NTDDI_VERSION < version &&
                MessageBox(nil,
                        message,
                        APPNAME,
                        MB_YESNO | MB_ICONERROR | MB_DEFBUTTON2
                ) == IDNO
end
UsingDC(hwnd) { |hdc| ... } click to toggle source
# File lib/windows_gui/user.rb, line 176
def UsingDC(hwnd)
        hdc = DetonateLastError(FFI::Pointer::NULL, :GetDC,
                hwnd
        )

        begin
                yield hdc
        ensure
                ReleaseDC(hwnd, hdc)
        end
end
UsingFFIMemoryPointers(*ptrs) { |*ptrs| ... } click to toggle source
# File lib/windows_gui/common.rb, line 46
def UsingFFIMemoryPointers(*ptrs)
        yield(*ptrs)
ensure
        ptrs.each { |ptr|
                ptr.free

                STDERR.puts "#{ptr} freed" if $DEBUG
        }
end
UsingFFIStructs(*structs) { |*structs| ... } click to toggle source
# File lib/windows_gui/common.rb, line 36
def UsingFFIStructs(*structs)
        yield(*structs)
ensure
        structs.each { |struct|
                struct.pointer.free

                STDERR.puts "#{struct} freed" if $DEBUG
        }
end
UsingGDIObjects(hdc, *hgdiobjs) { |*hgdiobjs| ... } click to toggle source
# File lib/windows_gui/gdi.rb, line 370
def UsingGDIObjects(hdc, *hgdiobjs)
        holds = []

        hgdiobjs.each { |hgdiobj|
                holds << DetonateLastError([FFI::Pointer::NULL, HGDI_ERROR], :SelectObject,
                        hdc, hgdiobj
                )
        }

        yield(*hgdiobjs)
ensure
        holds.each { |hgdiobj|
                SelectObject(hdc, hgdiobj)
        }
end
UsingWindowDC(hwnd) { |hdc| ... } click to toggle source
# File lib/windows_gui/user.rb, line 164
def UsingWindowDC(hwnd)
        hdc = DetonateLastError(FFI::Pointer::NULL, :GetWindowDC,
                hwnd
        )

        begin
                yield hdc
        ensure
                ReleaseDC(hwnd, hdc)
        end
end