diff options
Diffstat (limited to 'src/nigui/private/windows/windows.nim')
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 452 |
1 files changed, 452 insertions, 0 deletions
diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim new file mode 100755 index 0000000..543985a --- /dev/null +++ b/src/nigui/private/windows/windows.nim @@ -0,0 +1,452 @@ +# NiGui - minimal Win32 binding + +# Some functions requires Windows XP or newer. +# Windows type names are replaced with basic types. + +# Type aliases for int16: +# ATOM, SHORT, USHORT, LANGID + +# Type aliases for int32: +# int, UINT, WINUINT, DWORD, LONG, COLORREF + +# Type aliases for int: +# WPARAM, LPARAM, ULONG + +# Type aliases for pointer: +# WNDPROC, HINSTANCE, HICON, HCURSOR, HBRUSH, HWND, LPMSG, LRESULT, PACTCTX, HMODULE, HDC, HGDIOBJ, HFONT, HMONITOR, HGDIOBJ + +# Type aliases for cstring: +# LPCTSTR, LPCWSTR + +{.pragma: libUser32, stdcall, dynlib: "User32.dll".} +{.pragma: libKernel32, stdcall, dynlib: "Kernel32.dll".} +{.pragma: libGdi32, stdcall, dynlib: "Gdi32.dll".} +{.pragma: libShell32, stdcall, dynlib: "Shell32.dll".} +{.pragma: libGdiplus, stdcall, dynlib: "Gdiplus.dll".} +{.pragma: libComdlg32, stdcall, dynlib: "Comdlg32.dll".} + + +# ---------------------------------------------------------------------------------------- +# Constants +# ---------------------------------------------------------------------------------------- + +const + ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID* = 4 + ACTCTX_FLAG_RESOURCE_NAME_VALID* = 8 + ACTCTX_FLAG_SET_PROCESS_DEFAULT* = 16 + BN_CLICKED* = 0 + BM_SETIMAGE* = 247 + BS_GROUPBOX* = 0x00000007 + COLOR_BTNFACE* = 15 + COLOR_WINDOWTEXT* = 8 + CP_UTF8* = 65001 + CS_HREDRAW* = 2 + CS_VREDRAW* = 1 + CW_USEDEFAULT* = 0x80000000.int + DEFAULT_GUI_FONT* = 17 + EM_SCROLLCARET* = 183 + EM_SETSEL* = 177 + EN_CHANGE* = 768 + ES_MULTILINE* = 4 + GCLP_HBRBACKGROUND* = -10 + GWL_EXSTYLE* = -20 + GWL_HINSTANCE* = -6 + GWL_HWNDPARENT* = -8 + GWL_STYLE* = -16 + GWLP_USERDATA* = -21 + GWLP_WNDPROC* = -4 + ICON_SMALL* = 0 + ICON_BIG* = 1 + IDC_ARROW* = 32512 + INVALID_HANDLE_VALUE* = cast[pointer](-1) + IMAGE_BITMAP* = 0 + IMAGE_ICON* = 1 + # LR_LOADFROMFILE* = 16 + OBJ_BRUSH* = 2 + PM_REMOVE* = 1 + SB_HORZ* = 0 + SB_THUMBPOSITION* = 4 + SB_THUMBTRACK* = 5 + SB_VERT* = 1 + SB_LINELEFT* = 0 + SB_LINERIGHT* = 1 + SB_PAGELEFT* = 2 + SB_PAGERIGHT* = 3 + SIF_ALL* = 23 + SM_CXVSCROLL* = 2 + SPI_GETWORKAREA* = 0x0030 + SPI_SETKEYBOARDCUES* = 0x100B + SS_CENTERIMAGE* = 0x00000200 + SW_HIDE* = 0 + SW_SHOW* = 5 + SWP_NOMOVE* = 2 + SWP_NOSIZE* = 1 + VK_CONTROL* = 17 + VK_MENU* = 18 + WM_ACTIVATE* = 0x0006 + WM_CHANGEUISTATE* = 0x0127 + WM_CHAR* = 258 + WM_CLOSE* = 16 + WM_COMMAND* = 273 + WM_DROPFILES* = 563 + WM_ERASEBKGND* = 20 + WM_HSCROLL* = 276 + WM_KEYDOWN* = 256 + WM_KEYUP* = 257 + WM_LBUTTONDOWN* = 0x0201 + WM_LBUTTONUP* = 0x0202 + WM_MBUTTONDOWN* = 0x0207 + WM_MBUTTONUP* = 0x0208 + # WM_NCLBUTTONDOWN* = 161 + # WM_NCLBUTTONUP* = 162 + WM_MOUSEWHEEL* = 0x020A + WM_MOVE* = 3 + WM_NEXTDLGCTL* = 0x0028 + WM_PAINT* = 15 + WM_RBUTTONDOWN* = 0x0204 + WM_RBUTTONUP* = 0x0205 + WM_SETFOCUS* = 0x0007 + WM_SETFONT* = 48 + WM_SIZE* = 5 + WM_VSCROLL* = 277 + WM_SETICON* = 128 + WM_SYSKEYDOWN* = 260 + WM_SYSCOMMAND* = 274 + WM_CTLCOLOREDIT* = 307 + WS_CLIPCHILDREN* = 0x02000000 + WS_CAPTION* = 0x00C00000 + WS_CHILD* = 0x40000000 + WS_EX_CLIENTEDGE* = 0x00000200 + WS_GROUP* = 0x00020000 + WS_HSCROLL* = 0x00100000 + WS_OVERLAPPEDWINDOW* = 0x00CF0000 + WS_SYSMENU* = 0x00080000 + WS_TABSTOP* = 0x00010000 + WS_THICKFRAME* = 0x00040000 + WS_VSCROLL* = 0x00200000 + # DT_CALCRECT* = 1024 + # OBJ_FONT* = 6 + # SM_XVIRTUALSCREEN* = 76 + # WC_LISTVIEWW* = "SysListView32" + # WC_TABCONTROLW* = "SysTabControl32" + # WC_TREEVIEWW* = "SysTreeView32" + # WM_CTLCOLORSTATIC* = 312 + # WS_EX_TOOLWINDOW* = 0x00000080 + OPAQUE* = 2 + TRANSPARENT* = 1 + PS_SOLID* = 0 + PS_DASH* = 1 + PS_DOT* = 2 + PS_DASHDOT* = 3 + PS_DASHDOTDOT* = 4 + PS_NULL* = 5 + PS_USERSTYLE* = 7 + PS_INSIDEFRAME* = 6 + OFN_ALLOWMULTISELECT* = 0x00000200 + OFN_EXPLORER* = 0x00080000 + OFN_FILEMUSTEXIST* = 0x00001000 + OFN_OVERWRITEPROMPT* = 0x00000002 + # UnitWorld* = 0 + # UnitDisplay* = 1 + UnitPixel* = 2 + # UnitPoint* = 3 + # UnitInch* = 4 + # UnitDocument* = 5 + # UnitMillimeter* = 6 + +# ---------------------------------------------------------------------------------------- +# Types +# ---------------------------------------------------------------------------------------- + +type + WndClassEx* = object + cbSize*: int32 + style*: int32 + lpfnWndProc*: pointer + cbClsExtra*: int32 + cbWndExtra*: int32 + hInstance*: pointer + hIcon*: pointer + hCursor*: pointer + hbrBackground*: pointer + lpszMenuName*: cstring + lpszClassName*: cstring + hIconSm*: pointer + + Point* = object + x*: int32 + y*: int32 + + Size* = object + cx*: int32 + cy*: int32 + + Rect* = object + left*: int32 + top*: int32 + right*: int32 + bottom*: int32 + + RectF* = object + x*: cfloat + y*: cfloat + width*: cfloat + height*: cfloat + + RGB32* = object + red*: byte + green*: byte + blue*: byte + unused: byte + + ARGB* = object + blue*: byte + green*: byte + red*: byte + alpha*: byte + + Msg* = object + hwnd*: pointer + message*: int32 + wParam*: int + lParam*: int + time*: int32 + pt*: Point + + ActCtx* = object + cbSize*: int32 + dwFlags*: int32 + lpSource*: cstring + wProcessorArchitecture*: int16 + wLangId*: int16 + lpAssemblyDirectory*: cstring + lpResourceName*: cstring + lpApplicationName*: cstring + hModule*: pointer + + ScrollInfo* = object + cbSize*: int32 + fMask*: int32 + nMin*: int32 + nMax*: int32 + nPage*: int32 + nPos*: int32 + nTrackPos*: int32 + + MonitorInfo * = object + cbSize*: int32 + rcMonitor*: Rect + rcWork*: Rect + dwFlags*: int32 + + PaintStruct* = array[68, byte] + + KeyState* = array[256, byte] + + GdiplusStartupInput* = object + GdiplusVersion*: int32 + DebugEventCallback*: pointer + SuppressBackgroundThread*: bool + SuppressExternalCodecs*: bool + + OpenFileName* = object + lStructSize*: int32 + hwndOwner*: pointer + hInstance*: pointer + lpstrFilter*: cstring + lpstrCustomFilter*: cstring + nMaxCustFilter*: int32 + nFilterIndex*: int32 + lpstrFile*: cstring + nMaxFile*: int32 + lpstrFileTitle*: cstring + nMaxFileTitle*: int32 + lpstrInitialDir*: cstring + lpstrTitle*: cstring + Flags*: int32 + nFileOffset*: int16 + nFileExtension*: int16 + lpstrDefExt*: cstring + lCustData*: pointer + lpfnHook*: pointer + lpTemplateName*: cstring + # pvReserved: pointer + # dwReserved: int32 + # FlagsEx*: int32 + + GUID * = object + Data1*: int32 + Data2*: int32 + Data3*: int32 + Data4*: int32 + + +# ---------------------------------------------------------------------------------------- +# Replacement for Windows Macros +# ---------------------------------------------------------------------------------------- + +import math + +proc loWord*(param: pointer): int = cast[int](param) and 0x0000FFFF + +proc hiWord*(param: pointer): int = + result = (cast[int](param) shr 16) and 0xFFFF + if result > 2^15: + result = result - 2^16 + + +# ---------------------------------------------------------------------------------------- +# Kernel32 Procs +# ---------------------------------------------------------------------------------------- + +proc LoadLibraryA*(lpFileName: cstring): pointer {.importc: "LoadLibraryA", libKernel32.} +# proc GetModuleHandleA*(lpModuleName: cstring): pointer {.importc: "GetModuleHandleA", libKernel32.} +proc GetLastError*(): int {.importc: "GetLastError", libKernel32.} +proc CreateActCtxA*(pActCtx: pointer): pointer {.importc: "CreateActCtxA", libKernel32.} +proc ActivateActCtx*(pActCtx, lpCookie: pointer): bool {.importc: "ActivateActCtx", libKernel32.} +proc GetSystemDirectoryA*(lpBuffer: pointer, uSize: int32): int32 {.importc: "GetSystemDirectoryA", libKernel32.} +proc MultiByteToWideChar*(CodePage, dwFlags: int32, lpMultiByteStr: cstring, cbMultiByte: int32, lpWideCharStr: cstring, cchWideChar: int32): int32 {.importc: "MultiByteToWideChar", libKernel32.} +proc WideCharToMultiByte*(CodePage, dwFlags: int32, lpWideCharStr: cstring, cchWideChar: int32, lpMultiByteStr: cstring, cbMultiByte: int32, lpDefaultChar: cstring, lpUsedDefaultChar: pointer): int32 {.importc: "WideCharToMultiByte", libKernel32.} + +proc MessageBoxA*(hWnd: pointer, lpText, lpCaption: cstring, uType: int) {.importc: "MessageBoxA", libUser32.} +proc MessageBoxW*(hWnd: pointer, lpText, lpCaption: cstring, uType: int) {.importc: "MessageBoxW", libUser32.} + +proc RegisterClassExA*(lpwcx: var WndClassEx): int16 {.importc: "RegisterClassExA", libUser32.} +proc CreateWindowExA*(dwExStyle: int32, lpClassName, lpWindowName: cstring, dwStyle: int32, x, y, nWidth, nHeight: int, hWndParent, hMenu, hInstance, lpParam: pointer): pointer {.importc: "CreateWindowExA", libUser32.} +proc DestroyWindow*(hWnd: pointer): bool {.importc: "DestroyWindow", libUser32.} +proc ShowWindow*(hWnd: pointer, nCmdShow: int32): bool {.importc: "ShowWindow", libUser32.} +proc EnableWindow*(hWnd: pointer, bEnable: bool): bool {.importc: "EnableWindow", libUser32.} +proc DefWindowProcA*(hWnd: pointer, uMsg: int, wParam, lParam: pointer): pointer {.importc: "DefWindowProcA", libUser32.} +proc GetMessageA*(lpMsg, hWnd: pointer, wMsgFilterMin, wMsgFilterMax: int32): bool {.importc: "GetMessageA", libUser32.} +proc PeekMessageA*(lpMsg, hWnd: pointer, wMsgFilterMin, wMsgFilterMax, wRemoveMsg: int32): bool {.importc: "PeekMessageA", libUser32.} +proc TranslateMessage*(lpMsg: pointer): bool {.importc: "TranslateMessage", libUser32.} +proc DispatchMessageA*(lpMsg: pointer): pointer {.importc: "DispatchMessageA", libUser32.} +proc SetParent*(hWndChild, hWndNewParent: pointer): pointer {.importc: "SetParent", libUser32.} +proc SetWindowLongA*(hWnd: pointer, nIndex, dwNewLong: int32): int32 {.importc: "SetWindowLongA", libUser32.} +proc GetWindowLongA*(hWnd: pointer, nIndex: int32): int32 {.importc: "GetWindowLongA", libUser32.} +proc SetWindowLongPtrW*(hWnd: pointer, nIndex: int32, dwNewLong: pointer): pointer {.importc: "SetWindowLongPtrW", libUser32.} +proc GetWindowLongPtrW*(hWnd: pointer, nIndex: int32): pointer {.importc: "GetWindowLongPtrW", libUser32.} +proc SetWindowTextA*(hWnd: pointer, lpString: cstring): bool {.importc: "SetWindowTextA", libUser32.} +proc SetWindowTextW*(hWnd: pointer, lpString: cstring): bool {.importc: "SetWindowTextW", libUser32.} +# proc GetWindowTextA*(hWnd: pointer, lpString: cstring, nMaxCount: int32): int32 {.importc: "GetWindowTextA", libUser32.} +proc GetWindowTextW*(hWnd: pointer, lpString: cstring, nMaxCount: int32): int32 {.importc: "GetWindowTextW", libUser32.} +# proc GetWindowTextLengthA*(hWnd: pointer): int32 {.importc: "GetWindowTextLengthA", libUser32.} +proc GetWindowTextLengthW*(hWnd: pointer): int32 {.importc: "GetWindowTextLengthW", libUser32.} +proc UpdateWindow*(hWnd: pointer): bool {.importc: "UpdateWindow", libUser32.} +proc SetWindowPos*(wnd, hWndInsertAfter: pointer, x, y, cx, cy: int32, uFlags: int): bool {.importc: "SetWindowPos", libUser32.} +proc MoveWindow*(wnd: pointer, x, y, nWidth, nHeight: int32, bRepaint: bool): bool {.importc: "MoveWindow", libUser32.} +proc SetFocus*(hWnd: pointer): pointer {.importc: "SetFocus", libUser32.} +proc GetWindowRect*(wnd: pointer, lpRect: var Rect): bool {.importc: "GetWindowRect", libUser32.} +proc GetClientRect*(wnd: pointer, lpRect: var Rect): bool {.importc: "GetClientRect", libUser32.} +proc BeginPaint*(hWnd: pointer, lpPaint: var PaintStruct): pointer {.importc: "BeginPaint", libUser32.} +proc EndPaint*(hWnd: pointer, lpPaint: var PaintStruct): bool {.importc: "EndPaint", libUser32.} +proc SendMessageA*(hWnd: pointer, msg: int32, wParam, lParam: pointer): pointer {.importc: "SendMessageA", libUser32.} +# proc SendMessageW*(hWnd: pointer, msg: int32, wParam, lParam: pointer): pointer {.importc: "SendMessageW", libUser32.} +proc PostMessageA*(hWnd: pointer, msg: int32, wParam, lParam: pointer): pointer {.importc: "PostMessageA", libUser32.} +proc GetSysColor*(nIndex: int32): RGB32 {.importc: "GetSysColor", libUser32.} +proc SetClassLongPtrA*(hWnd: pointer, nIndex: int32, dwNewLong: pointer): pointer {.importc: "SetClassLongPtrA", libUser32.} +proc InvalidateRect*(hWnd: pointer, lpRect: ref Rect, bErase: bool): bool {.importc: "InvalidateRect", libUser32.} +proc PostQuitMessage*(nExitCode: int32) {.importc: "PostQuitMessage", libUser32.} +proc GetDesktopWindow*(): pointer {.importc: "GetDesktopWindow", libUser32.} +proc SystemParametersInfoA*(uiAction, uiParam: int32, pvParam: pointer, fWinIni: int32): bool {.importc: "SystemParametersInfoA", libUser32.} +proc ClientToScreen*(hWnd: pointer, lpPoint: var Point): bool {.importc: "ClientToScreen", libUser32.} +proc AdjustWindowRect*(lpRect: var Rect, dwStyle: int32, bMenu: bool): bool {.importc: "AdjustWindowRect", libUser32.} +proc LoadCursorA*(hInstance: pointer, lpCursorName: cstring): pointer {.importc: "LoadCursorA", libUser32.} +proc SetScrollInfo*(hWnd: pointer, fnBar: int32, lpsi: var ScrollInfo, fRedraw: bool): int32 {.importc: "SetScrollInfo", libUser32.} +proc GetMonitorInfoA*(hMonitor: pointer, lpmi: var MonitorInfo): bool {.importc: "GetMonitorInfoA", libUser32.} +proc MonitorFromRect*(lprc: var Rect, dwFlags: int32): pointer {.importc: "MonitorFromRect", libUser32.} +proc GetSystemMetrics*(nIndex: int32): int32 {.importc: "GetSystemMetrics", libUser32.} +proc CallWindowProcW*(lpPrevWndFunc, hWnd: pointer, uMsg: int32, wParam, lParam: pointer): pointer {.importc: "CallWindowProcW", libUser32.} +proc IsDialogMessageW*(hDlg, lpMsg: pointer): bool {.importc: "IsDialogMessageW", libUser32.} +proc GetNextDlgTabItem*(hDlg, hCtl: pointer, bPrevious: bool): pointer {.importc: "GetNextDlgTabItem", libUser32.} +proc GetParent*(hWnd: pointer): pointer {.importc: "GetParent", libUser32.} +proc GetDC*(hWnd: pointer): pointer {.importc: "GetDC", libUser32.} +# proc DrawTextW*(hdc: pointer, lpchText: cstring, nCount: int32, lpRect: var Rect, uFormat: int32): int32 {.importc: "DrawTextW", libUser32.} +proc GetKeyboardState*(lpKeyState: var KeyState): bool {.importc: "GetKeyboardState", libUser32.} +proc ToUnicode*(wVirtKey, wScanCode: int32, lpKeyState: var KeyState, pwszBuff: cstring, cchBuff, wFlags: int32): int32 {.importc: "ToUnicode", libUser32.} +proc ShowScrollBar*(hWnd: pointer, wBar: int32, bShow: bool): bool {.importc: "ShowScrollBar", libUser32.} +proc LoadImageW*(hinst: pointer, lpszName: cstring, uType, cxDesired, cyDesired, fuLoad: int32): int32 {.importc: "LoadImageW", libUser32.} +proc SetTimer*(hWnd, nIDEvent: pointer, uElapse: int32, lpTimerFunc: pointer): pointer {.importc: "SetTimer", libUser32.} +proc KillTimer*(hWnd, nIDEvent: pointer): bool {.importc: "KillTimer", libUser32.} +proc FillRect*(hDC: pointer, lprc: var Rect, hbr: pointer): int32 {.importc: "FillRect", libUser32.} +proc FrameRect*(hDC: pointer, lprc: var Rect, hbr: pointer): int32 {.importc: "FrameRect", libUser32.} +proc GetKeyState*(nVirtKey: int32): int16 {.importc: "GetKeyState", libUser32.} + + +# ---------------------------------------------------------------------------------------- +# GDI Procs +# ---------------------------------------------------------------------------------------- + +proc DeleteDC*(hdc: pointer): bool {.importc: "DeleteDC", libGdi32.} +proc DeleteObject*(hObject: pointer): bool {.importc: "DeleteObject", libGdi32.} +proc GetCurrentObject*(hdc: pointer, uObjectType: int32): pointer {.importc: "GetCurrentObject", libGdi32.} +proc SelectObject*(hdc, hgdiobj: pointer): pointer {.importc: "SelectObject", libGdi32.} +proc TextOutW*(hdc: pointer, nXStart, nYStart: int32, lpString: cstring, cchString: int32): bool {.importc: "TextOutW", libGdi32.} +proc CreateSolidBrush*(crColor: RGB32): pointer {.importc: "CreateSolidBrush", libGdi32.} +proc CreatePen*(fnPenStyle, nWidth: int32, crColor: RGB32): pointer {.importc: "CreatePen", libGdi32.} +# proc GetStockObject*(fnObject: int32): pointer {.importc: "GetStockObject", libGdi32.} +proc CreateFontA*(nHeight, nWidth, nEscapement, nOrientation, fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily: int32, lpszFace: cstring): pointer {.importc: "CreateFontA", libGdi32.} +proc GetTextExtentPoint32W*(hdc: pointer, lpString: cstring, c: int32, lpSize: var Size): bool {.importc: "GetTextExtentPoint32W", libGdi32.} +proc SetBkMode*(hdc: pointer, iBkMode: int32): int32 {.importc: "SetBkMode", libGdi32.} +proc SetTextColor*(hdc: pointer, crColor: RGB32): RGB32 {.importc: "SetTextColor", libGdi32.} +proc SetBkColor*(hdc: pointer, crColor: RGB32): RGB32 {.importc: "SetBkColor", libGdi32.} +proc MoveToEx*(hdc: pointer, x, y: int32, lpPoint: pointer): bool {.importc: "MoveToEx", libGdi32.} +proc LineTo*(hdc: pointer, nXEnd, nYEnd: int): bool {.importc: "LineTo", libGdi32.} +proc CreateCompatibleDC*(hdc: pointer): pointer {.importc: "CreateCompatibleDC", libGdi32.} +proc SetPixel*(hdc: pointer, x, y: int32, crColor: RGB32): int32 {.importc: "SetPixel", libGdi32.} +# proc BitBlt*(hdcDest: pointer, nXDest, nYDest, nWidth, nHeight: int32, hdcSrc: pointer, nXSrc, nYSrc, dwRop: int32): bool {.importc: "BitBlt", libGdi32.} + + +# ---------------------------------------------------------------------------------------- +# GDI+ Procs +# ---------------------------------------------------------------------------------------- + +proc GdiplusStartup*(token: var pointer, input: var GdiplusStartupInput, output: pointer): int32 {.importc: "GdiplusStartup", libGdiplus.} +proc GdipCreateBitmapFromFile*(filename: cstring, bitmap: var pointer): int32 {.importc: "GdipCreateBitmapFromFile", libGdiplus.} +# proc GdipLoadImageFromFile*(filename: cstring, image: var pointer): int32 {.importc: "GdipLoadImageFromFile", libGdiplus.} +proc GdipGetHicon*(bitmap: pointer, hicon: var pointer): int32 {.importc: "GdipCreateHICONFromBitmap", libGdiplus.} +proc GdipCreateFromHDC*(hdc: pointer, graphics: var pointer): int32 {.importc: "GdipCreateFromHDC", libGdiplus.} +proc GdipDeleteGraphics*(graphics: pointer): int32 {.importc: "GdipDeleteGraphics", libGdiplus.} +proc GdipDrawImageRectI*(graphics, image: pointer, x, y, width, height: int32): int32 {.importc: "GdipDrawImageRectI", libGdiplus.} +proc GdipGetImageWidth*(image: pointer, width: var int32): int32 {.importc: "GdipGetImageWidth", libGdiplus.} +proc GdipGetImageHeight*(image: pointer, height: var int32): int32 {.importc: "GdipGetImageHeight", libGdiplus.} +# proc GdipGetImageDimension*(image: pointer, width, height: var float): int32 {.importc: "GdipGetImageDimension", libGdiplus.} +proc GdipCreateBitmapFromGraphics*(width, height: int32, target: pointer, bitmap: var pointer): int32 {.importc: "GdipCreateBitmapFromGraphics", libGdiplus.} +proc GdipBitmapSetPixel*(bitmap: pointer, x, y: int32, color: ARGB): int32 {.importc: "GdipBitmapSetPixel", libGdiplus.} +proc GdipSaveImageToFile*(image: pointer, filename: cstring, clsidEncoder, encoderParams: pointer): int32 {.importc: "GdipSaveImageToFile", libGdiplus.} +# proc GdipGetImageEncodersSize*(numEncoders, size: var int32): int32 {.importc: "GdipGetImageEncodersSize", libGdiplus.} +# proc GdipGetImageEncoders*(numEncoders, size: int32, encoders: pointer): int32 {.importc: "GdipGetImageEncoders", libGdiplus.} +proc GdipGetImageGraphicsContext*(image: pointer, graphics: var pointer): int32 {.importc: "GdipGetImageGraphicsContext", libGdiplus.} # does not exist +proc GdipDisposeImage*(image: pointer): int32 {.importc: "GdipDisposeImage", libGdiplus.} +proc GdipFillRectangleI*(graphics, brush: pointer, x, y, width, height: int32): int32 {.importc: "GdipFillRectangleI", libGdiplus.} +proc GdipDrawRectangleI*(graphics, pen: pointer, x, y, width, height: int32): int32 {.importc: "GdipDrawRectangleI", libGdiplus.} +proc GdipDrawLineI*(graphics, pen: pointer, x1, y1, x2, y2: int32): int32 {.importc: "GdipDrawLineI", libGdiplus.} +proc GdipCreateSolidFill*(color: ARGB, brush: var pointer): int32 {.importc: "GdipCreateSolidFill", libGdiplus.} +proc GdipDeleteBrush*(brush: pointer): int32 {.importc: "GdipDeleteBrush", libGdiplus.} +proc GdipCreatePen1*(color: ARGB, width: float, unit: int32, pen: var pointer): int32 {.importc: "GdipCreatePen1", libGdiplus.} +proc GdipDeletePen*(pen: pointer): int32 {.importc: "GdipDeletePen", libGdiplus.} +proc GdipDrawString*(graphics: pointer, `string`: cstring, length: int32, font: pointer, layoutRect: var RectF, stringFormat, brush: pointer): int32 {.importc: "GdipDrawString", libGdiplus.} +proc GdipMeasureString*(graphics: pointer, `string`: cstring, length: int32, font: pointer, layoutRect: var RectF, stringFormat: pointer, boundingBox: var RectF, codepointsFitted, linesFilled: pointer): int32 {.importc: "GdipMeasureString", libGdiplus.} +proc GdipCreateFont*(fontFamily: pointer, emSize: cfloat, style, unit: int32, font: var pointer): int32 {.importc: "GdipCreateFont", libGdiplus.} +proc GdipDeleteFont*(font: pointer): int32 {.importc: "GdipDeleteFont", libGdiplus.} +proc GdipCreateFontFamilyFromName*(name: cstring, fontCollection: pointer, fontFamily: var pointer): int32 {.importc: "GdipCreateFontFamilyFromName", libGdiplus.} +proc GdipDeleteFontFamily*(fontFamily: pointer): int32 {.importc: "GdipDeleteFontFamily", libGdiplus.} + + +# ---------------------------------------------------------------------------------------- +# Shell32 Procs +# ---------------------------------------------------------------------------------------- + +proc DragAcceptFiles*(hWnd: pointer, fAccept: bool) {.importc: "DragAcceptFiles", libShell32.} +proc DragQueryFileW*(hDrop: pointer, iFile: uint32, lpszFile: cstring, cch: int32): int32 {.importc: "DragQueryFileW", libShell32.} +proc DragFinish*(hDrop: pointer) {.importc: "DragFinish", libShell32.} + + +# ---------------------------------------------------------------------------------------- +# Comdlg32 Procs +# ---------------------------------------------------------------------------------------- + +proc CommDlgExtendedError*(): int32 {.importc: "CommDlgExtendedError", libComdlg32.} +proc GetOpenFileNameW*(lpofn: var OpenFileName): bool {.importc: "GetOpenFileNameW", libComdlg32.} +proc GetSaveFileNameW*(lpofn: var OpenFileName): bool {.importc: "GetSaveFileNameW", libComdlg32.} + |
