summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrustable-code <krauter.simon@arcor.de>2019-11-25 18:46:38 +0100
committertrustable-code <krauter.simon@arcor.de>2019-11-25 18:46:38 +0100
commit1345ae301276ececb98576bae79736cb3e5c4942 (patch)
tree260623c5c703efefbc62c20d1ded374b63689a4f
parente27e7739535586a859a50fd0d10a9740baa2019a (diff)
downloadNiGui-1345ae301276ececb98576bae79736cb3e5c4942.tar.gz
NiGui-1345ae301276ececb98576bae79736cb3e5c4942.zip
Enable visual styles via manifest file instead of calling CreateActCtxA()
Fixes #75
-rw-r--r--src/nigui/private/windows/manifest_x64.resbin0 -> 644 bytes
-rw-r--r--src/nigui/private/windows/manifest_x86.resbin0 -> 640 bytes
-rwxr-xr-xsrc/nigui/private/windows/platform_impl.nim21
-rwxr-xr-xsrc/nigui/private/windows/windows.nim10
4 files changed, 11 insertions, 20 deletions
diff --git a/src/nigui/private/windows/manifest_x64.res b/src/nigui/private/windows/manifest_x64.res
new file mode 100644
index 0000000..f302b88
--- /dev/null
+++ b/src/nigui/private/windows/manifest_x64.res
Binary files differ
diff --git a/src/nigui/private/windows/manifest_x86.res b/src/nigui/private/windows/manifest_x86.res
new file mode 100644
index 0000000..96c6519
--- /dev/null
+++ b/src/nigui/private/windows/manifest_x86.res
Binary files differ
diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim
index 1e184b4..28759ca 100755
--- a/src/nigui/private/windows/platform_impl.nim
+++ b/src/nigui/private/windows/platform_impl.nim
@@ -10,6 +10,12 @@ import windows
import tables
import dynlib
+# Link resource file to enable visual styles (without this, controls have Windows 95 look):
+when defined(cpu64):
+ {.link: currentSourcePath().parentDir() / "manifest_x64.res".}
+else:
+ {.link: currentSourcePath().parentDir() / "manifest_x86.res".}
+
# ----------------------------------------------------------------------------------------
# Internal Things
@@ -145,20 +151,6 @@ proc pCreateWindowExWithUserdata(lpClassName: string, dwStyle, dwExStyle: int32,
# Set window proc:
# discard pSetWindowLongPtr(result, GWLP_WNDPROC, pCommonWndProc)
-proc pEnableVisualStyles() =
- # Without this, controls have style of Windows 95
- const MaxLength = 500
- var dir = newString(MaxLength)
- if GetSystemDirectoryA(dir[0].addr, MaxLength) == 0: pRaiseLastOSError()
- var actCtx: ActCtx
- actCtx.cbSize = ActCtx.sizeof.int32
- actCtx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID or ACTCTX_FLAG_SET_PROCESS_DEFAULT or ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID
- actCtx.lpSource = "shell32.dll"
- actCtx.lpAssemblyDirectory = dir
- actCtx.lpResourceName = cast[cstring](124)
- var context = CreateActCtxA(actCtx)
- if context == INVALID_HANDLE_VALUE: pRaiseLastOSError()
-
proc pRegisterWindowClass(className: string, wndProc: pointer, style: int32 = 0) =
var class: WndClassEx
class.cbSize = WndClassEx.sizeof.int32
@@ -399,7 +391,6 @@ proc init(app: App) =
if pDefaultParentWindow != nil:
raiseError("'app.init()' must not be called a second time.")
pInitGdiplus()
- pEnableVisualStyles()
pRegisterWindowClass(pTopLevelWindowClass, pWindowWndProc)
pRegisterWindowClass(pCustomControlWindowClass, pCustomControlWndProc, CS_HREDRAW or CS_VREDRAW)
pRegisterWindowClass(pContainerWindowClass, pContainerWndProc)
diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim
index d3a4d8c..cc0ad71 100755
--- a/src/nigui/private/windows/windows.nim
+++ b/src/nigui/private/windows/windows.nim
@@ -31,9 +31,9 @@
# ----------------------------------------------------------------------------------------
const
- ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID* = 4
- ACTCTX_FLAG_RESOURCE_NAME_VALID* = 8
- ACTCTX_FLAG_SET_PROCESS_DEFAULT* = 16
+ # ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID* = 4
+ # ACTCTX_FLAG_RESOURCE_NAME_VALID* = 8
+ # ACTCTX_FLAG_SET_PROCESS_DEFAULT* = 16
BIF_RETURNONLYFSDIRS* = 0x00000001
BIF_NEWDIALOGSTYLE* = 0x00000040
BN_CLICKED* = 0
@@ -385,8 +385,8 @@ proc hiWord*(param: pointer): int =
proc LoadLibraryA*(lpFileName: cstring): pointer {.importc, libKernel32.}
# proc GetModuleHandleA*(lpModuleName: cstring): pointer {.importc, libKernel32.}
proc GetLastError*(): int {.importc, libKernel32.}
-proc CreateActCtxA*(pActCtx: var ActCtx): pointer {.importc, libKernel32.}
-proc GetSystemDirectoryA*(lpBuffer: pointer, uSize: int32): int32 {.importc, libKernel32.}
+# proc CreateActCtxA*(pActCtx: var ActCtx): pointer {.importc, libKernel32.}
+# proc GetSystemDirectoryA*(lpBuffer: pointer, uSize: int32): int32 {.importc, libKernel32.}
proc MultiByteToWideChar*(CodePage, dwFlags: int32, lpMultiByteStr: cstring, cbMultiByte: int32, lpWideCharStr: cstring, cchWideChar: int32): int32 {.importc, libKernel32.}
proc WideCharToMultiByte*(CodePage, dwFlags: int32, lpWideCharStr: cstring, cchWideChar: int32, lpMultiByteStr: cstring, cbMultiByte: int32, lpDefaultChar: cstring, lpUsedDefaultChar: pointer): int32 {.importc, libKernel32.}
proc GlobalLock*(hMem: pointer): pointer {.importc, libKernel32.}