diff --git a/libtinyfiledialogs/tinyfiledialogs.c b/libtinyfiledialogs/tinyfiledialogs.c
index 30865fe..b7662fd 100644
@@ -182,6 +182,14 @@ char tinyfd_needs[] = "\
#pragma warning(disable:4706) /* allows usage of strncpy, strcpy, strcat, sprintf, fopen */
#endif
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+#include <ShellScalingApi.h>
+
+#pragma comment(linker,"\"/manifestdependency:type='win32' \
+name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
+processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#endif // USE_WINDOWS_HIDPI
+
static int getenvDISPLAY(void)
{
return tinyfd_assumeGraphicDisplay || getenv("DISPLAY");
@@ -1060,6 +1068,9 @@ int tinyfd_messageBoxW(
wchar_t const * aIconType, /* "info" "warning" "error" "question" */
int aDefaultButton) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
int lBoxReturnValue;
UINT aCode;
@@ -1130,6 +1141,9 @@ int tinyfd_notifyPopupW(
wchar_t const * aMessage, /* NULL or L"" may contain \n \t */
wchar_t const * aIconType) /* L"info" L"warning" L"error" */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
wchar_t * lDialogString;
size_t lTitleLen;
size_t lMessageLen;
@@ -1202,6 +1216,9 @@ wchar_t * tinyfd_inputBoxW(
wchar_t const * aMessage, /* NULL or L"" (\n and \t have no effect) */
wchar_t const * aDefaultInput) /* L"" , if NULL it's a passwordBox */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
static wchar_t lBuff[MAX_PATH_OR_CMD];
wchar_t * lDialogString;
FILE * lIn;
@@ -1273,6 +1290,7 @@ wchar_t * tinyfd_inputBoxW(
wcscat(lDialogString, L"tinyfiledialogsTopWindow");
wcscat(lDialogString, L"</title>\n\
+<META HTTP-EQUIV=\"MSThemeCompatible\" CONTENT=\"yes\">\n\
<HTA:APPLICATION\n\
ID = 'tinyfdHTA'\n\
APPLICATIONNAME = 'tinyfd_inputBox'\n\
@@ -1479,6 +1497,9 @@ wchar_t * tinyfd_saveFileDialogW(
wchar_t const * const * aFilterPatterns, /* NULL or {"*.jpg","*.png"} */
wchar_t const * aSingleFilterDescription) /* NULL or "image files" */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
static wchar_t lBuff[MAX_PATH_OR_CMD];
wchar_t lDirname[MAX_PATH_OR_CMD];
wchar_t lDialogString[MAX_PATH_OR_CMD];
@@ -1582,6 +1603,9 @@ wchar_t * tinyfd_openFileDialogW(
wchar_t const * aSingleFilterDescription, /* NULL or "image files" */
int aAllowMultipleSelects) /* 0 or 1 ; -1 to free allocated memory and return */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
size_t lLengths[MAX_MULTIPLE_FILES];
wchar_t lDirname[MAX_PATH_OR_CMD];
wchar_t lFilterPatterns[MAX_PATH_OR_CMD] = L"";
@@ -1769,6 +1793,9 @@ wchar_t * tinyfd_selectFolderDialogW(
wchar_t const * aTitle, /* NULL or "" */
wchar_t const * aDefaultPath) /* NULL or "" */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
static wchar_t lBuff[MAX_PATH_OR_CMD];
wchar_t * lRetval;
@@ -1820,6 +1847,9 @@ wchar_t * tinyfd_colorChooserW(
unsigned char const aDefaultRGB[3], /* { 0 , 255 , 255 } */
unsigned char aoResultRGB[3]) /* { 0 , 0 , 0 } */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
static wchar_t lResultHexRGB[8];
CHOOSECOLORW cc;
COLORREF crCustColors[16];
@@ -1886,6 +1916,9 @@ static int messageBoxWinGui(
char const * aIconType, /* "info" "warning" "error" "question" */
int aDefaultButton) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
int lIntRetVal;
wchar_t lTitle[128] = L"";
wchar_t * lMessage = NULL;
@@ -1932,6 +1965,9 @@ static int notifyWinGui(
char const * aMessage, /* NULL or "" may NOT contain \n nor \t */
char const * aIconType)
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
wchar_t lTitle[128] = L"";
wchar_t * lMessage = NULL;
wchar_t lIconType[16] = L"";
@@ -1971,6 +2007,9 @@ static int inputBoxWinGui(
char const * aMessage, /* NULL or "" may NOT contain \n nor \t */
char const * aDefaultInput) /* "" , if NULL it's a passwordBox */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
wchar_t lTitle[128] = L"";
wchar_t * lMessage = NULL;
wchar_t lDefaultInput[MAX_PATH_OR_CMD] = L"";
@@ -2024,6 +2063,9 @@ static char * saveFileDialogWinGui(
char const * const * aFilterPatterns, /* NULL or {"*.jpg","*.png"} */
char const * aSingleFilterDescription) /* NULL or "image files" */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
wchar_t lTitle[128] = L"";
wchar_t lDefaultPathAndFile[MAX_PATH_OR_CMD] = L"";
wchar_t lSingleFilterDescription[128] = L"";
@@ -2096,6 +2138,9 @@ static char * openFileDialogWinGui(
char const * aSingleFilterDescription, /* NULL or "image files" */
int aAllowMultipleSelects) /* 0 or 1 */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
wchar_t lTitle[128] = L"";
wchar_t lDefaultPathAndFile[MAX_PATH_OR_CMD] = L"";
wchar_t lSingleFilterDescription[128] = L"";
@@ -2161,6 +2206,9 @@ static char * selectFolderDialogWinGui(
char const * aTitle, /* NULL or "" */
char const * aDefaultPath) /* NULL or "" */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
wchar_t lTitle[128] = L"";
wchar_t lDefaultPath[MAX_PATH_OR_CMD] = L"";
wchar_t * lTmpWChar;
@@ -2202,6 +2250,9 @@ static char * colorChooserWinGui(
unsigned char const aDefaultRGB[3], /* { 0 , 255 , 255 } */
unsigned char aoResultRGB[3]) /* { 0 , 0 , 0 } */
{
+#if defined(USE_WINDOWS_HIDPI) && defined(_WIN64)
+ SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
+#endif
static char lResultHexRGB[8];
wchar_t lTitle[128];