digitalmars.D.learn - How do I enable visual styles?
- Jack (7/7) Jan 18 2021 Currently I'm using dmd but the release binaries I'll be usind
- Adam D. Ruppe (4/4) Jan 18 2021 I haven't played with the pragma yet but I've done it before both
Currently I'm using dmd but the release binaries I'll be usind ldc. Is this how I can enable visual styles on dmd? and how is this done on ldc? pragma(linkerDirective, "\"/manifestdependency:type='win32' " ~ "name='Microsoft.Windows.Common-Controls' version='6.0.0.0'" ~ "processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"");
Jan 18 2021
I haven't played with the pragma yet but I've done it before both with the file.exe.manifest XML file sitting alongside it and with the resource compiler before (you can use the same resource compilers for D as you use for C btw)
Jan 18 2021
On Monday, 18 January 2021 at 19:50:18 UTC, Adam D. Ruppe wrote:I haven't played with the pragma yet but I've done it before both with the file.exe.manifest XML file sitting alongside it and with the resource compiler before (you can use the same resource compilers for D as you use for C btw)I have done that before with the XML manifest file but now I'd to do it without that external dependence, now I'm trying with the linker, if possible. It seems SetWindowTheme(hwnd, L"Explorer", NULL) do the same, I'm researching into that
Jan 18 2021
if someone happens to be looking to do that in the future: I didn't find a way to do this with a linker but managed to find a way to do this with code only. The code goes like this: // source: https://stackoverflow.com/a/10444161/800123 #include <windows.h> // NOTE: It is recommended that you delay-load ComCtl32.dll (/DelayLoad:ComCtl32.dll) // and that you ensure this code runs before GUI components are loaded. // Otherwise, you may get weird issues, like black backgrounds in icons in image lists. ULONG_PTR EnableVisualStyles(VOID) { TCHAR dir[MAX_PATH]; ULONG_PTR ulpActivationCookie = FALSE; ACTCTX actCtx = { sizeof(actCtx), ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT | ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID, TEXT("shell32.dll"), 0, 0, dir, (LPCTSTR)124 }; UINT cch = GetSystemDirectory(dir, sizeof(dir) / sizeof(*dir)); if (cch >= sizeof(dir) / sizeof(*dir)) { return FALSE; /*shouldn't happen*/ } dir[cch] = TEXT('\0'); ActivateActCtx(CreateActCtx(&actCtx), &ulpActivationCookie); return ulpActivationCookie; } it's C as code but can be translated to D easy.
Feb 18 2021