From 5642b70dd58cfbe6422f6c629727463434cf3acc Mon Sep 17 00:00:00 2001 From: anders_k Date: Tue, 6 Nov 2018 21:04:37 +0000 Subject: [PATCH] MakeNSISW is now System DPI aware (16x16, 24x24 and 32x32 toolbar images) git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7042 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/Makensisw/Readme.txt | 2 + Contrib/Makensisw/SConscript | 13 ++-- Contrib/Makensisw/logo.bmp | Bin 7334 -> 0 bytes Contrib/Makensisw/logo.psp | 1 - Contrib/Makensisw/makensisw.cpp | 92 +++++++++++++++-------------- Contrib/Makensisw/makensisw.h | 5 +- Contrib/Makensisw/makensisw.xml | 1 + Contrib/Makensisw/resource.h | 21 ++++--- Contrib/Makensisw/resource.rc | 15 +++-- Contrib/Makensisw/toolbar.bmp | Bin 5176 -> 4662 bytes Contrib/Makensisw/toolbar.cpp | 76 ++++++++++++++---------- Contrib/Makensisw/toolbar.h | 23 +++----- Contrib/Makensisw/toolbar16d24.bmp | Bin 0 -> 10806 bytes Contrib/Makensisw/toolbar16h24.bmp | Bin 0 -> 4662 bytes Contrib/Makensisw/toolbar16n24.bmp | Bin 0 -> 4662 bytes Contrib/Makensisw/toolbar24.bmp | Bin 12342 -> 0 bytes Contrib/Makensisw/toolbar24d.bmp | Bin 12344 -> 0 bytes Contrib/Makensisw/toolbar24d24.bmp | Bin 0 -> 24246 bytes Contrib/Makensisw/toolbar24h.bmp | Bin 12344 -> 0 bytes Contrib/Makensisw/toolbar24h24.bmp | Bin 0 -> 24246 bytes Contrib/Makensisw/toolbar24n24.bmp | Bin 0 -> 24246 bytes Contrib/Makensisw/toolbar32d24.bmp | Bin 0 -> 43062 bytes Contrib/Makensisw/toolbar32h24.bmp | Bin 0 -> 43062 bytes Contrib/Makensisw/toolbar32n24.bmp | Bin 0 -> 43062 bytes Contrib/Makensisw/utils.cpp | 5 +- Contrib/Makensisw/utils.h | 5 +- 26 files changed, 146 insertions(+), 113 deletions(-) delete mode 100644 Contrib/Makensisw/logo.bmp delete mode 100644 Contrib/Makensisw/logo.psp create mode 100644 Contrib/Makensisw/toolbar16d24.bmp create mode 100644 Contrib/Makensisw/toolbar16h24.bmp create mode 100644 Contrib/Makensisw/toolbar16n24.bmp delete mode 100644 Contrib/Makensisw/toolbar24.bmp delete mode 100644 Contrib/Makensisw/toolbar24d.bmp create mode 100644 Contrib/Makensisw/toolbar24d24.bmp delete mode 100644 Contrib/Makensisw/toolbar24h.bmp create mode 100644 Contrib/Makensisw/toolbar24h24.bmp create mode 100644 Contrib/Makensisw/toolbar24n24.bmp create mode 100644 Contrib/Makensisw/toolbar32d24.bmp create mode 100644 Contrib/Makensisw/toolbar32h24.bmp create mode 100644 Contrib/Makensisw/toolbar32n24.bmp diff --git a/Contrib/Makensisw/Readme.txt b/Contrib/Makensisw/Readme.txt index 93c83ff8..7193292c 100644 --- a/Contrib/Makensisw/Readme.txt +++ b/Contrib/Makensisw/Readme.txt @@ -201,6 +201,8 @@ Version History 2.3.4 - Added Window Info/Spy feature +- System DPI aware +- New toolbar images Copyright Information diff --git a/Contrib/Makensisw/SConscript b/Contrib/Makensisw/SConscript index ca3fc062..5bb1d0e7 100644 --- a/Contrib/Makensisw/SConscript +++ b/Contrib/Makensisw/SConscript @@ -18,11 +18,16 @@ resources = Split(""" assoc_nsi.ico assoc_nsh.ico makensisw.xml - logo.bmp toolbar.bmp - toolbar24.bmp - toolbar24d.bmp - toolbar24h.bmp + toolbar16n24.bmp + toolbar16d24.bmp + toolbar16h24.bmp + toolbar24n24.bmp + toolbar24d24.bmp + toolbar24h24.bmp + toolbar32n24.bmp + toolbar32d24.bmp + toolbar32h24.bmp """) libs = Split(""" diff --git a/Contrib/Makensisw/logo.bmp b/Contrib/Makensisw/logo.bmp deleted file mode 100644 index e224592113dd82e2551bdc8a584d5cb9140d3e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7334 zcmeI0y^9k;7{;G`Y_XSQh-jgrN3hc7i2pzkEo?Mwqs?8?d0b^Bcm4-nC2J{iA%$Ea z7$S&;NQ{Mr93HuVg>tuSzJz@2)7YH~zOy;OGEK+|^Dr|znJnR#U*5csT)(}00bw>} zy)3gF1Fpz5hGcl2m*-EXrZX!idcL}Q7O&SX;qAs%ynk>5A0FPs-s5|SZyW%t$H4t# ze0%Al^X@sme|m%9>mGg#4)Ocf&+s+3XUo>C*<7D%FdOdnqgi>k=8C%>IyQ?jUX8(z&s3ixlAh_;1-_^l#g;1JMVIVm)+Ad1R7&KB9L4pfG14P-L|Btx?$`1d&{D(G3FE0f1!k3?1VzeI}pEN|CLG^ zqUKt3wEe~B2#}%kk6$4p&Ut~O{MZh^z{|&(O9a#VqOzuRn=mm3i~(c77%&Em0b{@z I_#X}Y0sO~|X#fBK diff --git a/Contrib/Makensisw/logo.psp b/Contrib/Makensisw/logo.psp deleted file mode 100644 index 3ad05dce..00000000 --- a/Contrib/Makensisw/logo.psp +++ /dev/null @@ -1 +0,0 @@ -Paint Shop Pro Image File diff --git a/Contrib/Makensisw/makensisw.cpp b/Contrib/Makensisw/makensisw.cpp index 635f3e02..e1e6d099 100644 --- a/Contrib/Makensisw/makensisw.cpp +++ b/Contrib/Makensisw/makensisw.cpp @@ -192,6 +192,44 @@ DWORD CALLBACK SaveFileStreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb return (*pcb = (LONG) cbio, !wop); } +static void ToolBarSizeChanged(HWND hDlg) +{ + RECT r; + HWND hEd = GetDlgItem(hDlg, IDC_LOGWIN); + GetWindowRect(g_toolbar.hwnd, &r); + LONG tbh = RectH(r); + GetWindowRect(hEd, &r); + LONG oldh = RectH(r), margin = DlgUnitToPixelY(hDlg, 7), top = tbh + margin; + POINT pt = { r.left, r.top }; + ScreenToClient(hDlg, &pt); + SetWindowPos(hEd, 0, pt.x, top, RectW(r), oldh + (pt.y - top), SWP_NOZORDER|SWP_NOACTIVATE); // Update IDC_LOGWIN position and size +} + +static BOOL CALLBACK DialogResize(HWND hWnd, LPARAM /* unused */) +{ + RECT r, r2; + GetWindowRect(hWnd, &r); + ScreenToClient(g_sdata.hwnd, ((LPPOINT)&r)+0), ScreenToClient(g_sdata.hwnd, ((LPPOINT)&r)+1); + switch (GetDlgCtrlID(hWnd)) + { + case IDC_TOOLBAR: + GetWindowRect(hWnd, &r2); + SetWindowPos(hWnd, 0, 0, 0, RectW(r) + g_resize.dx, RectH(r2), SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE); + break; + case IDC_LOGWIN: + SetWindowPos(hWnd, 0, r.left, r.top, RectW(r) + g_resize.dx, RectH(r) + g_resize.dy, SWP_NOZORDER|SWP_NOMOVE|SWP_NOACTIVATE); + break; + case IDC_TEST: + case IDCANCEL: + SetWindowPos(hWnd, 0, r.left + g_resize.dx, r.top + g_resize.dy, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE); + break; + default: + SetWindowPos(hWnd, 0, r.left, r.top + g_resize.dy, RectW(r) + g_resize.dx, RectH(r), SWP_NOZORDER|SWP_NOACTIVATE); + break; + } + RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE); + return TRUE; +} INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { @@ -219,6 +257,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam SetScript(_T("")); g_sdata.compressor = COMPRESSOR_NONE_SELECTED; g_sdata.userSelectCompressor = FALSE; + ToolBarSizeChanged(hwndDlg); ProcessCommandLine(); @@ -227,7 +266,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam } if(g_sdata.userSelectCompressor) { - if (DialogBox(g_sdata.hInstance,MAKEINTRESOURCE(DLG_COMPRESSOR),g_sdata.hwnd,(DLGPROC)CompressorProc)) { + if (DialogBox(g_sdata.hInstance,MAKEINTRESOURCE(DLG_COMPRESSOR),g_sdata.hwnd,API_cast(CompressorProc))) { EnableItems(g_sdata.hwnd); return TRUE; } @@ -295,16 +334,12 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam } case WM_SIZE: { - if ((wParam == SIZE_MAXHIDE)||(wParam == SIZE_MAXSHOW)) return TRUE; - RECT rSize; - if (hwndDlg == g_sdata.hwnd) { - GetClientRect(g_sdata.hwnd, &rSize); - if (((rSize.right==0)&&(rSize.bottom==0))||((g_resize.resizeRect.right==0)&&(g_resize.resizeRect.bottom==0))) return TRUE; - g_resize.dx = rSize.right - g_resize.resizeRect.right; - g_resize.dy = rSize.bottom - g_resize.resizeRect.bottom; - EnumChildWindows(g_sdata.hwnd, DialogResize, (LPARAM)0); - g_resize.resizeRect = rSize; - } + if (wParam == SIZE_MAXHIDE || wParam == SIZE_MAXSHOW) return TRUE; + const LONG oldW = g_resize.resizeRect.right, oldH = g_resize.resizeRect.bottom; + GetClientRect(hwndDlg, &g_resize.resizeRect); + g_resize.dx = g_resize.resizeRect.right - oldW; + g_resize.dy = g_resize.resizeRect.bottom - oldH; + EnumChildWindows(g_sdata.hwnd, DialogResize, (LPARAM) 0); return TRUE; } case WM_SIZING: @@ -317,7 +352,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam { RECT r = g_resize.griprect; MapWindowPoints(hwndDlg, 0, (POINT*)&r, 2); - POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}; + POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; if (PtInRect(&r, pt)) { SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, HTBOTTOMRIGHT); @@ -590,7 +625,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam } case IDM_SETTINGS: { - DialogBox(g_sdata.hInstance,MAKEINTRESOURCE(DLG_SETTINGS),g_sdata.hwnd,(DLGPROC)SettingsProc); + DialogBox(g_sdata.hInstance,MAKEINTRESOURCE(DLG_SETTINGS),g_sdata.hwnd,API_cast(SettingsProc)); return TRUE; } case IDM_WNDSPY: @@ -788,35 +823,6 @@ logappendfinal: return 0; } -BOOL CALLBACK DialogResize(HWND hWnd, LPARAM /* unused */) -{ - RECT r; - GetWindowRect(hWnd, &r); - ScreenToClient(g_sdata.hwnd, (LPPOINT)&r); - ScreenToClient(g_sdata.hwnd, ((LPPOINT)&r)+1); - if(hWnd != g_toolbar.hwnd) { - switch (GetDlgCtrlID(hWnd)) { - case IDC_LOGWIN: - SetWindowPos(hWnd, 0, r.left, r.top,r.right - r.left + g_resize.dx, r.bottom - r.top + g_resize.dy, SWP_NOZORDER|SWP_NOMOVE); - break; - case IDC_TEST: - case IDCANCEL: - SetWindowPos(hWnd, 0, r.left + g_resize.dx, r.top + g_resize.dy, 0, 0, SWP_NOZORDER|SWP_NOSIZE); - break; - default: - SetWindowPos(hWnd, 0, r.left, r.top + g_resize.dy, r.right - r.left + g_resize.dx, r.bottom - r.top, SWP_NOZORDER); - break; - } - } - else { - RECT r2; - GetWindowRect(g_toolbar.hwnd, &r2); - SetWindowPos(hWnd, 0, 0, 0, r.right - r.left + g_resize.dx, r2.bottom-r2.top, SWP_NOMOVE|SWP_NOZORDER); - } - RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE); - return TRUE; -} - static INT_PTR CALLBACK AboutProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { ABOUTDLGDATA &dd = *(ABOUTDLGDATA*) g_ModalDlgData; switch(msg) { @@ -828,7 +834,7 @@ static INT_PTR CALLBACK AboutProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM const TCHAR txt[] = TEXT("MakeNSISW"); INT dt = DT_NOCLIP|DT_NOPREFIX|DT_SINGLELINE|DT_VCENTER, cch = COUNTOF(txt) - 1, line = DpiScaleY(dis.hwndItem, 2), shadow = 1; GetClientRect(dis.hwndItem, &r); - if (!dd.FinalHeaderPos) + if (!dd.hHeaderFont) dd.hHeaderFont = CreateFont(0, CFF_RAWSIZE, r.bottom / 2, FW_BOLD, DEFAULT_PITCH|FF_DONTCARE, ANSI_CHARSET, _T("Trebuchet MS")); // IE4.01SP2+ HGDIOBJ hOrgFont = SelectObject(dis.hDC, dd.hHeaderFont); DrawHorzGradient(dis.hDC, r.left, r.top, r.right, r.bottom - line, RGB(22, 77, 160), RGB(29, 100, 207)); diff --git a/Contrib/Makensisw/makensisw.h b/Contrib/Makensisw/makensisw.h index f363c7b1..af0d5aad 100644 --- a/Contrib/Makensisw/makensisw.h +++ b/Contrib/Makensisw/makensisw.h @@ -64,8 +64,8 @@ #define EXENAME _T("makensis.exe") #define MAX_STRING 256 #define TIMEOUT 100 -#define MINWIDTH 350 -#define MINHEIGHT 180 +#define MINWIDTH 400 +#define MINHEIGHT 220 #define COMPRESSOR_MESSAGE _T("\n\nThe %s compressor created the smallest installer (%d bytes).") #define RESTORED_COMPRESSOR_MESSAGE _T("\n\nThe %s compressor created the smallest installer (%d bytes).") #define EXE_HEADER_COMPRESSOR_STAT _T("EXE header size:") @@ -164,7 +164,6 @@ extern void* g_ModalDlgData; DWORD WINAPI MakeNSISProc(LPVOID TreadParam); INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); -BOOL CALLBACK DialogResize(HWND hWnd, LPARAM /* unused*/); typedef struct { enum { TID_HEADER = 1 }; diff --git a/Contrib/Makensisw/makensisw.xml b/Contrib/Makensisw/makensisw.xml index 0eefac85..d3b2799f 100644 --- a/Contrib/Makensisw/makensisw.xml +++ b/Contrib/Makensisw/makensisw.xml @@ -8,6 +8,7 @@ +true diff --git a/Contrib/Makensisw/resource.h b/Contrib/Makensisw/resource.h index b207f362..b2301557 100644 --- a/Contrib/Makensisw/resource.h +++ b/Contrib/Makensisw/resource.h @@ -36,17 +36,24 @@ #define IDI_ASSOC_NSH 113 #define IDB_LOGO 115 #define DLG_SETTINGS 116 +#define DLG_WNDSPY 117 #define IDB_TOOLBAR 122 #define DLG_COMPRESSOR 124 #define DLG_SYMBOLSET 125 -#define IDB_TOOLBAR24 129 -#define IDB_TOOLBAR24D 130 -#define IDB_TOOLBAR24H 131 -#define DLG_WNDSPY 133 +#define IDB_TOOLBAR16N24 129 +#define IDB_TOOLBAR16D24 130 +#define IDB_TOOLBAR16H24 131 +#define IDB_TOOLBAR24N24 132 +#define IDB_TOOLBAR24D24 133 +#define IDB_TOOLBAR24H24 134 +#define IDB_TOOLBAR32N24 135 +#define IDB_TOOLBAR32D24 136 +#define IDB_TOOLBAR32H24 137 #define IDC_VERSION 200 -#define IDC_LOGWIN 201 -#define IDC_TEST 202 +#define IDC_TOOLBAR 201 +#define IDC_LOGWIN 202 +#define IDC_TEST 203 #define IDC_ABOUTVERSION 220 #define IDC_ABOUTCOPY 221 #define IDC_ABOUTPORTIONS 222 @@ -119,7 +126,7 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 134 +#define _APS_NEXT_RESOURCE_VALUE 138 #define _APS_NEXT_COMMAND_VALUE 537 #define _APS_NEXT_CONTROL_VALUE 241 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/Contrib/Makensisw/resource.rc b/Contrib/Makensisw/resource.rc index ae9dc4e1..6e92dcdf 100644 --- a/Contrib/Makensisw/resource.rc +++ b/Contrib/Makensisw/resource.rc @@ -166,7 +166,7 @@ FONT 8, "MS Shell Dlg" BEGIN CONTROL "",IDC_LOGWIN,RICHEDIT_CLASS,ES_MULTILINE | ES_AUTOVSCROLL | ES_NOHIDESEL | ES_READONLY | ES_SAVESEL | - WS_TABSTOP | WS_BORDER | WS_VSCROLL,7,22,345,186 + WS_TABSTOP | WS_BORDER | WS_VSCROLL,7,22,348,190 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,220,346,1 LTEXT "",IDC_VERSION,7,230,200,12,WS_DISABLED DEFPUSHBUTTON "Test &Installer",IDC_TEST,230,226,60,15,WS_DISABLED | WS_TABSTOP @@ -327,11 +327,16 @@ END // Bitmap // -//IDB_LOGO BITMAP "logo.bmp" IDB_TOOLBAR BITMAP "toolbar.bmp" -IDB_TOOLBAR24 BITMAP "toolbar24.bmp" -IDB_TOOLBAR24D BITMAP "toolbar24d.bmp" -IDB_TOOLBAR24H BITMAP "toolbar24h.bmp" +IDB_TOOLBAR16N24 BITMAP "toolbar16n24.bmp" +IDB_TOOLBAR16D24 BITMAP "toolbar16d24.bmp" // Note: This image should NEVER be <= 256 colors because then Windows will create its own disabled effect +IDB_TOOLBAR16H24 BITMAP "toolbar16h24.bmp" +IDB_TOOLBAR24N24 BITMAP "toolbar24n24.bmp" +IDB_TOOLBAR24D24 BITMAP "toolbar24d24.bmp" // Note: This image should NEVER be <= 256 colors because then Windows will create its own disabled effect +IDB_TOOLBAR24H24 BITMAP "toolbar24h24.bmp" +IDB_TOOLBAR32N24 BITMAP "toolbar32n24.bmp" +IDB_TOOLBAR32D24 BITMAP "toolbar32d24.bmp" // Note: This image should NEVER be <= 256 colors because then Windows will create its own disabled effect +IDB_TOOLBAR32H24 BITMAP "toolbar32h24.bmp" ///////////////////////////////////////////////////////////////////////////// // diff --git a/Contrib/Makensisw/toolbar.bmp b/Contrib/Makensisw/toolbar.bmp index f4ecbdfed17af61acdcfe56cb9b8a6aae5ce0443..d5b6b6b47df0f13467e1a75ad670a10b4ae209cd 100644 GIT binary patch delta 133 zcmdm?u}#Iq$=6JX0SwGo7#K8wtOr0W0K|+896%BX_!tVc>xRi1jS5P&x!$LtV(5`u_?JX^6QmD5B(ji98Wz4D0Y@(_q8FcQ*rh`TPFlxD*V z(C?ML(&i+@ZRpM}hw-k&NS4Q*PoF(@^Yq8b*{ioN9~FH(-z$ofob43FK|huK{;n(@ z?hm8iD6Y=F?A@BBWUmfC*vF&K$1{kKQiA_+xtdP>%zhpHev*J=j0-iH5A`l!WR4J$ z{djw=q%5nrAX-400dyUsUpkLbfC&Ujr2rhcA!1GU`{mQw(;&ME- z>x_)an9Ssk%6DS%PM8hjG9y3teWkQ{W;BiSrOUC(mtA>L2pagCo!|9UeQJ!+y=QTx z01#1X7?4+pH}=y#Uy(i)LW^f|MEOzkqo61S3Si&g4^;Qag(lSl(lm?5BXYL|`{uzf wRcm7|Ug)7L4(zglaU;2{57x&5kk)nf53$8=({1g};h#}WP?P-c`EF7C1CN&PrT_o{ diff --git a/Contrib/Makensisw/toolbar.cpp b/Contrib/Makensisw/toolbar.cpp index 152a507a..452795ff 100644 --- a/Contrib/Makensisw/toolbar.cpp +++ b/Contrib/Makensisw/toolbar.cpp @@ -51,21 +51,27 @@ static const TBBTNDESC g_TBBtnsDesc[BUTTONCOUNT] = { /*TBB_TEST */ { MKNAMEDTBBTNDESC(TEST, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON ) }, /*TBB_COMPRESSOR*/ { MKNAMEDTBBTNDESC(COMPRESSOR, TBSTATE_ENABLED, TBSTYLE_DROPDOWN) }, /*TBB_EDITSCRIPT*/ { MKNAMEDTBBTNDESC(EDITSCRIPT, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON ) }, -/*TBB_BROWSESCR */ { MKNAMEDTBBTNDESC(BROWSESCR, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON ) }, -/*TBB_SEP3 */ { TBSTYLE_SEP }, -/*TBB_NSISHOME */ { MKNAMEDTBBTNDESC(NSISHOME, TBSTATE_ENABLED, TBSTYLE_BUTTON ) }, -/*TBB_DOCS */ { MKNAMEDTBBTNDESC(DOCS, TBSTATE_ENABLED, TBSTYLE_BUTTON ) } +/*TBB_BROWSESCR */ { MKNAMEDTBBTNDESC(BROWSESCR, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON ) } }; +static const BYTE g_TBIL[] = { +/* 16 */ IDB_TOOLBAR16N24, IDB_TOOLBAR16D24, IDB_TOOLBAR16H24, +/* 24 */ IDB_TOOLBAR24N24, IDB_TOOLBAR24D24, IDB_TOOLBAR24H24, +/* 32 */ IDB_TOOLBAR32N24, IDB_TOOLBAR32D24, IDB_TOOLBAR32H24 +}; + +static void LoadToolBarImages(); + void CreateToolBar() { g_toolbar.hwnd = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_TRANSPARENT | TBSTYLE_FLAT, - 0, 0, 0, 30, g_sdata.hwnd, NULL, g_sdata.hInstance, NULL); + 0, 0, 0, 0, g_sdata.hwnd, (HMENU) IDC_TOOLBAR, g_sdata.hInstance, NULL); TBBUTTON tbbs[BUTTONCOUNT]; SendMessage(g_toolbar.hwnd, TB_BUTTONSTRUCTSIZE, sizeof(tbbs[0]), 0); - for (UINT i = 0; i < BUTTONCOUNT; ++i) { + for (UINT i = 0; i < BUTTONCOUNT; ++i) + { tbbs[i].iBitmap = g_TBBtnsDesc[i].ImgIdx; tbbs[i].idCommand = g_TBBtnsDesc[i].CmdId; tbbs[i].fsState = g_TBBtnsDesc[i].State; @@ -73,47 +79,55 @@ void CreateToolBar() tbbs[i].dwData = 0, tbbs[i].iString = 0; } SendMessage(g_toolbar.hwnd, TB_ADDBUTTONS, BUTTONCOUNT, (LPARAM) &tbbs); + LoadToolBarImages(); +} - // For Comctl32.dll version detection - #ifndef _WIN64 +static void LoadToolBarImages() +{ + HWND hTB = g_toolbar.hwnd; + // Comctl32.dll version detection +#ifndef _WIN64 HMODULE hMod = GetModuleHandle(_T("comctl32.dll")); - const FARPROC hasCC4_70 = sizeof(TCHAR) > 1 ? (FARPROC) TRUE : GetProcAddress(hMod, "InitCommonControlsEx"); // NT4 shipped with v4.70 + const FARPROC hasCC4_70 = (SupportsW95()) ? GetProcAddress(hMod, "InitCommonControlsEx") : (FARPROC) TRUE; // NT4 shipped with v4.70 const FARPROC hasCC4_71 = (SupportsWNT4() || SupportsW95()) ? GetProcAddress(hMod, "DllGetVersion") : (FARPROC) TRUE; // IE4 shipped with v4.71 - #else +#else const bool hasCC4_70 = true, hasCC4_71 = true; - #endif +#endif - if (hasCC4_70) { // Version 4.70 - // Modern toolbar, 24-bit bitmaps + UINT iltypecount = 3, s16 = DpiScaleY(hTB, 16), imgsize, iloffs; // 144dpi(150%)=24 120dpi(125%)=20 + if (s16 > 24) + imgsize = 32, iloffs = 2 * iltypecount; + else if (s16 > 16) + imgsize = 24, iloffs = 1 * iltypecount; + else + imgsize = 16, iloffs = 0 * iltypecount; - g_toolbar.imagelist = ImageList_LoadImage(g_sdata.hInstance, MAKEINTRESOURCE(IDB_TOOLBAR24), 16, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); - g_toolbar.imagelistd = ImageList_LoadImage(g_sdata.hInstance, MAKEINTRESOURCE(IDB_TOOLBAR24D), 16, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); - g_toolbar.imagelisth = ImageList_LoadImage(g_sdata.hInstance, MAKEINTRESOURCE(IDB_TOOLBAR24H), 16, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); - - SendMessage(g_toolbar.hwnd, TB_SETIMAGELIST, 0, (LPARAM) g_toolbar.imagelist); - SendMessage(g_toolbar.hwnd, TB_SETDISABLEDIMAGELIST, 0, (LPARAM) g_toolbar.imagelistd); - SendMessage(g_toolbar.hwnd, TB_SETHOTIMAGELIST, 0, (LPARAM) g_toolbar.imagelisth); - - if (hasCC4_71) { // Version 4.71 - SendMessage(g_toolbar.hwnd, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS); - } + if (hasCC4_70) + { + // Version 4.70 => Modern toolbar, 24-bit bitmaps + g_toolbar.imagelist = ImageList_LoadImage(g_sdata.hInstance, MAKEINTRESOURCE(g_TBIL[iloffs+0]), imgsize, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); + g_toolbar.imagelistd = ImageList_LoadImage(g_sdata.hInstance, MAKEINTRESOURCE(g_TBIL[iloffs+1]), imgsize, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); + g_toolbar.imagelisth = ImageList_LoadImage(g_sdata.hInstance, MAKEINTRESOURCE(g_TBIL[iloffs+2]), imgsize, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); + SendMessage(hTB, TB_SETIMAGELIST, 0, (LPARAM) g_toolbar.imagelist); + SendMessage(hTB, TB_SETDISABLEDIMAGELIST, 0, (LPARAM) g_toolbar.imagelistd); + SendMessage(hTB, TB_SETHOTIMAGELIST, 0, (LPARAM) g_toolbar.imagelisth); + if (hasCC4_71) + SendMessage(hTB, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS); } - else { - // Old Windows 95 toolbar, 256 color bitmap with system palette - + else + { + // Version 4.00 => Old Windows 95 toolbar, 256 color bitmap with system palette TBADDBITMAP tbBitmap; - tbBitmap.hInst = g_sdata.hInstance; tbBitmap.nID = IDB_TOOLBAR; - SendMessage(g_toolbar.hwnd, TB_ADDBITMAP, IMAGECOUNT, (LPARAM) &tbBitmap); + SendMessage(hTB, TB_ADDBITMAP, IMAGECOUNT, (LPARAM) &tbBitmap); } } void UpdateToolBarCompressorButton() { - int iBitmap; - int iString; + int iBitmap, iString; TCHAR szBuffer[124]; // increased to 124 for good measure, also. TCHAR temp[64]; // increased to 64. Hit limit 08/20/2007 -- Jim Park. diff --git a/Contrib/Makensisw/toolbar.h b/Contrib/Makensisw/toolbar.h index e6beeac3..c0a6d806 100644 --- a/Contrib/Makensisw/toolbar.h +++ b/Contrib/Makensisw/toolbar.h @@ -24,8 +24,6 @@ #define TOOLBAR_H #include -#define BUTTONCOUNT 15 - #define TBB_LOADSCRIPT 0 #define TBB_SAVE 1 #define TBB_SEP1 2 @@ -38,11 +36,7 @@ #define TBB_COMPRESSOR 9 #define TBB_EDITSCRIPT 10 #define TBB_BROWSESCR 11 -#define TBB_SEP3 12 -#define TBB_NSISHOME 13 -#define TBB_DOCS 14 - -#define IMAGECOUNT 16 +#define BUTTONCOUNT 12 #define IDB_LOADSCRIPT 0 #define IDB_SAVE 1 @@ -53,14 +47,13 @@ #define IDB_EDITSCRIPT 6 #define IDB_BROWSESCR 7 #define IDB_CLEARLOG 8 -#define IDB_NSISHOME 9 -#define IDB_DOCS 10 -#define IDB_COMPRESSOR 11 -#define IDB_COMPRESSOR_SCRIPT 11 -#define IDB_COMPRESSOR_BZIP2 12 -#define IDB_COMPRESSOR_ZLIB 13 -#define IDB_COMPRESSOR_BEST 14 -#define IDB_COMPRESSOR_LZMA 15 +#define IDB_COMPRESSOR_SCRIPT 9 +#define IDB_COMPRESSOR_BZIP2 10 +#define IDB_COMPRESSOR_ZLIB 11 +#define IDB_COMPRESSOR_BEST 12 +#define IDB_COMPRESSOR_LZMA 13 +#define IMAGECOUNT 14 +#define IDB_COMPRESSOR IDB_COMPRESSOR_SCRIPT typedef struct ToolBarStruct { HWND hwnd; diff --git a/Contrib/Makensisw/toolbar16d24.bmp b/Contrib/Makensisw/toolbar16d24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2db72f2a89e239b0ea48402266607db4cb41f705 GIT binary patch literal 10806 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 G2L1&>aDN;C literal 0 HcmV?d00001 diff --git a/Contrib/Makensisw/toolbar16h24.bmp b/Contrib/Makensisw/toolbar16h24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c1eeb2d5a2b44484969215cc78885c4dc39e96f6 GIT binary patch literal 4662 zcmb`K3tUav9>;%$9=Dkx8i!FLn#vlhE3t^*5)}T`>G=VkD(Vl!K+8oge_H^tC+opZc!N>(J z&HDpxPMAS`W|_5zta)4bS+>C#IN%%VJGE&?%z_=f(G`nmn-5oDavNZV6!38a{0E?E zvytd!<$=!lj;`$k*eu4tc0)0|{g+s5!JH z@md6*DXXyLdw(qXApo1(eT0qeEU~4-$JlA#8i(yoaPm_l#B?#n2}d)W?FO8bet=jP zApSGpjMNFGr+Klwz~- z5NvBU451byu=kU15#4DD6!uebs_S%|bDD<4ZZnbWG7A@a&Ow6fY$WtufOP3xoE+ni zcn@Ff_gRP|ix(hurU%mI3`K_b5GZGiM4I<#Twh3=&sf}AHV)~&laV2tgmnKY$Xq!I zkoN-)&~Fwp1lTp#ILZyroi7NSM&3YZlyMpBRrmqV80_WF6q zUOOGiEizo?Rv>Se3=fXV@a*(blq+PYjP-+&(OK9#o&|ivfaQDfh3_T!%?v_-_j;^Y z8BEz|VH1#!)w9-O_3U5-E#8FiAe3Ugbq1d)29Q*b~;zY@*@H6L3B{ z4oNW=5f_(;w4G~kV^1)YJ3^4YX9KQBY{LD$Yv{Ngs;CXPeJ~Umk$X@Oy&FYQ8&Q$O zp(XJC3un`&m$HJMm76npdx?pFS-qR){r*M@vgL zUY3@u*22QDjpN!iYufDHUs1lRPNsb4n>XJ*hdC!f`iA%RasyGGcHfLHv$FbE#k1^I zUy6W=*O!wnUW{E-Niz4>E}#@C}n^aZD!UZUC#dF=sFp^!7a5ihK) zN-HYveK3sjJHw<<3;9(OUs296C!Vj03dHwWZ)wi~lYX2wc@QN?0a|>*^e!Rs*@%y7 zYARP97RC5@JauLr3-!b;LE^w}gqPPI(n%uM@m0PkD}7#m@8ho+ADem#javPhMM!*A z=S4m$7;`=P_USWSLwYooC1}Z6%o1csXuCUXhYpY?pIj9siuiPR83{VTx_1w)f5g{F zFRwkKlf+vR8cO+%89jE~xUr+W#*Xx4e6Jrrek|r!qu{!{%s+da<=5e5{<-7EoU^;T zyXJw%fG>LW>`j2gH(OL4p-pbM2uPE!0lv(P&g8AU!U{T> zX30SJe_j*$=GIA1xGp?AY&&~=db#YEt3*Yy@mZ)=XJ#g+CjZO>2Il=Di1AQ<%Owvvn&05}#-78=V9`mLKEO{O9dk1-GUXn|DUtIGX!@W4Q@@K_rfI;K!wLXLc~>xE_g# zKV)g1Jo&dqlO^!Y(@P&8$LRxPgH!%i6(u+2!{hmvC0&a3PmYOUfPr}j1?lrT7<`cZ z)p=_F-=13a{dIgaNF@vB^5fIq`4oS2p9ceOC< zfktyv;G3_L0UaM;7#|=%`6xTns5(Aw{K^%}<6?fhoyqtFMe6g)qx|yn3_M?9=;@4L zLr>lH{YAc7xn#aXE~n3z`uWkwyug2-1u;C1bIdtP3xp$$(k9IID=bX$oALc%jneIN zetlTL>m54kMgbPEw|%|I$F4vc@9!7)+Z~#Q!uutViB<_V|JbXg5uWbI4@bFV&KwE5 zm0kV(_^DTR{|swnI%aKdV$Q91u%VyDA0NksI9OA|F@Dd^aqfTR){QH&A+9Z%vuKcx_yPjjGd}in3SZUC z)ag4No=_tMSl8M(Z$MXfNuhLseV?6C7~s|KLEgo+pQ~&01{w^jZ2smyV}|E6zWgVo Cl%V4P literal 0 HcmV?d00001 diff --git a/Contrib/Makensisw/toolbar16n24.bmp b/Contrib/Makensisw/toolbar16n24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ce050cb7f6c04641bbaa7ff1b5c41db6410446e GIT binary patch literal 4662 zcmchb3tUav9>;&pD9pr=VPxi>L04&VO)^Y|A(Gc%j<-SHnewj2x5N@N?7zeh4g;{+&K!%zeTxADmceoG6bzoW0uCd-!=gzJ zSR%E}Y_5IjxX5&j3m%;HvWn zNO5k3D@!`z)~b(jZG|b4SDE7a^6t3q+7-%mJ#fRV7w))O;iQ8D&Wss@vr{HPwqzze zmd=H@>jHSKcEK-e7eV2^9NuoO)Q2My=g&uq(;{4RalwscOL5!D2^r4LNLjTKmp871 zG1nRGxA#RyUt5?43_`bPTXYQ>4)cgHu!B%3t@NJ z2_tSUgI%^W#^-7yxK ze&dkoE5*HilaZmAiL5;{kl{ZIxq-7#5-<@D4$Vi-;l;Rh$Q8Fk)*>x*HB?8}Aw6sp zawFHGFl;4?qc`AL!a7u5c16{-^{}^(!0b5@G#+^2^PWNh?B9>&ia1Oy@WS+mKV#lg z1*QjFfy41s3=K~M67n(U>Q&53PR7_+3oktE$CKMO8^I>dJGFotKXX1%VO3Q<>82LAPPR8&-;uKFe3yr}{A-zZq8=39Sc$<%yZGo^-l zYNq;sT_i4Ynv~j~hj#*HeGNM60Hxc}L=TEO5p5n;!UZQMwFdkjcz zsaI!hrkk~h*Qbv)v(R|Lq$Y$M*P(;%F)1UjyrY$mA*)ELtxaX;rs~qAamm}oa{jJH zK61u4c4VnU^77S-`+w8pdsD+KB)(zi_73f6K>c<;Kp7*BBRp%8z{miNCr+H$l(56k z`hfDv46Ot{!ut!LFq&4c*73c4Ea$bIW%xiY@Ks49C9hsR_>}R9Gp|X@m=k6aN z@I9jp@%`P}y0`7p6)TqxB1FbFNl+sXiO)p)sD_5}%1o^opMY1ZT&Hco&QOZd4(xY` z8~CJhEnihh$%_{cB!d|r^DVf(zLplF8pikRnwF0;MqH1+Ha4qx(&K+J3qRtFr-;(` zu){9je`x?|^2sZ+wIV(ZUSgOAu!T;*YU0y{^wRVev7FcbmeLtgA0P5>^r+F}$B!BH z-RO~{8Q+^HPo4zVi~iLFa}KYIE(S9HK6zb~5NO1i_51p3{?WhzUwzq|@mX@lQ?+U! zG|5qE0cr9z=1XRyQ<)ff_1Cq`IoU5-wICP4V%m;bnJ(58=whMv-_`5*r1QOJOBvsg z?~laA#fOKVzaa9FZ^1lI4%WUQK4;TU+O=tA)S8`I8-2i;I}IGj|MX3No9n&V93;N! z4blMk3aoWI%ntbB^Aa=~^Q)#Xp-Lm;$Pz*UJQ>Tg2`lU`I|EQ=TPD|5| zSzbS;>shF6&&m0FBq?dz97-6UM%4lzn|h3o=M^N58zziPBRh6#!*M-Mxi7!LmzBNd z`4rK=Svu+L<2apxY;el!D(}e+vzd8$l+`~O6=r94w)ajyhex-Y*vu{I8_5V4h zT3ve$A48n?gD^fvR~Lv9`FM?g#K#|^$JuAvsZC3R)m5fhRmd-CV`KMOv#X^C8Ojmg6$JAWc zUdzYJrH)d$oL*m=_{TBRXof zL#4`Rt9_Hn$L>IK*}Q4f@5C1=t}iks+9lZhV@u0B#MGlO_~g=Q)1<5`tET=DUww6H zp6=Dmzf+r5ZMeO|I#Eh8JN@)glwST5^h6B!->G3WHQ_jiqjo3iyq$dG}TwW95h z6PK1?z5$O}M-~1;%C0f{N0d?-wPujT7c4SvmX7#5J=-%r_H!Dta}&8}@Wf)#z=kI8 m7VFV9+)~VmQ%}#mrVUtZPXDY}bZ@RkuZ;e@(To0H**^i2Wz8`F literal 0 HcmV?d00001 diff --git a/Contrib/Makensisw/toolbar24.bmp b/Contrib/Makensisw/toolbar24.bmp deleted file mode 100644 index 91d123a048ea52d863931760c300aa923b844d95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12342 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 diff --git a/Contrib/Makensisw/toolbar24d24.bmp b/Contrib/Makensisw/toolbar24d24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..81322abf05362b1fed5a6f856a4d14b8623a93a3 GIT binary patch literal 24246 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 S?gH`w$=;a*N;owT^!yLocef${ literal 0 HcmV?d00001 diff --git a/Contrib/Makensisw/toolbar24h.bmp b/Contrib/Makensisw/toolbar24h.bmp deleted file mode 100644 index e9fc7d5134ca06b2e70dc32cab4e3c452f594846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12344 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 X7|vr~Sd{!acI;n$7Qf;EDC)leW#iX- diff --git a/Contrib/Makensisw/toolbar24h24.bmp b/Contrib/Makensisw/toolbar24h24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bff0b81e640ff9c85b14c58649cd5780cd8cb5b5 GIT binary patch literal 24246 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 F{vY&iEI0rF literal 0 HcmV?d00001 diff --git a/Contrib/Makensisw/toolbar24n24.bmp b/Contrib/Makensisw/toolbar24n24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..658220e437d34665df66d44ab70ac492713a1d83 GIT binary patch literal 24246 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 literal 0 HcmV?d00001 diff --git a/Contrib/Makensisw/toolbar32d24.bmp b/Contrib/Makensisw/toolbar32d24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fb43260a80694442cb180d8b77db49598e4dc06c GIT binary patch literal 43062 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%0ADtg^i??cCC$4yA?i^k9 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 literal 0 HcmV?d00001 diff --git a/Contrib/Makensisw/utils.cpp b/Contrib/Makensisw/utils.cpp index b585b508..3794e287 100644 --- a/Contrib/Makensisw/utils.cpp +++ b/Contrib/Makensisw/utils.cpp @@ -1034,7 +1034,7 @@ int DpiScaleY(HWND hWnd, int Val) HFONT CreateFontHelper(INT_PTR Data, int Height, DWORD p1, LPCTSTR Face) { - UINT16 w = LOBYTE(p1)<<2, flags = HIBYTE(p1), cs = HIWORD(LOBYTE(p1)), paf = HIWORD(HIBYTE(p1)); + WORD w = LOBYTE(p1)<<2, flags = HIBYTE(p1), cs = HIWORD(LOBYTE(p1)), paf = HIWORD(HIBYTE(p1)); if (flags & CFF_DPIPT) { UINT dpi = (flags & CFF_DPIFROMHWND) ? DpiGetForWindow((HWND) Data) : (UINT) Data; @@ -1065,10 +1065,11 @@ static BOOL DrawHorzGradient(HDC hDC, const RECT&rect, COLOR16 r1, COLOR16 g1, C BOOL DrawHorzGradient(HDC hDC, LONG l, LONG t, LONG r, LONG b, COLORREF c1, COLORREF c2) { RECT rect = { l, t, r, b }; - return DrawHorzGradient(hDC, rect, (UINT16)GetRValue(c1)<<8, (UINT16)GetGValue(c1)<<8, (UINT16)GetBValue(c1)<<8, (UINT16)GetRValue(c2)<<8, (UINT16)GetGValue(c2)<<8, (UINT16)GetBValue(c2)<<8); + return DrawHorzGradient(hDC, rect, (WORD)GetRValue(c1)<<8, (WORD)GetGValue(c1)<<8, (WORD)GetBValue(c1)<<8, (WORD)GetRValue(c2)<<8, (WORD)GetGValue(c2)<<8, (WORD)GetBValue(c2)<<8); } long DlgUnitToPixelX(HWND hDlg, long x) { RECT r = { x, 0, 0, 0 }; MapDialogRect(hDlg, &r); return r.left; } +long DlgUnitToPixelY(HWND hDlg, long y) { RECT r = { 0, y, 0, 0 }; MapDialogRect(hDlg, &r); return r.top; } #ifndef SP_GRIPPER #ifndef HTHEME diff --git a/Contrib/Makensisw/utils.h b/Contrib/Makensisw/utils.h index 2f09a7c6..aa46dcff 100644 --- a/Contrib/Makensisw/utils.h +++ b/Contrib/Makensisw/utils.h @@ -88,12 +88,12 @@ HMENU FindSubMenu(HMENU hMenu, UINT uId); typedef enum { CFF_RAWSIZE = 0x00, CFF_DPIPT = 0x01, CFF_DPIFROMHWND = 0x02 } CREATEFONTFLAGS; HFONT CreateFontHelper(INT_PTR Data, int Height, DWORD p1, LPCTSTR Face); -inline HFONT CreateFont(INT_PTR Data, UINT16 Flags, int Height, UINT16 Weight, BYTE PitchAndFamily, BYTE CharSet, LPCTSTR Face) +inline HFONT CreateFont(INT_PTR Data, WORD Flags, int Height, WORD Weight, BYTE PitchAndFamily, BYTE CharSet, LPCTSTR Face) { DWORD packed = MAKELONG(MAKEWORD(Weight>>2, Flags), MAKEWORD(CharSet, PitchAndFamily)); return CreateFontHelper(Data, Height, packed, Face); } -inline HFONT CreateFontPt(HWND hWndDPI, int Height, UINT16 Weight, BYTE PitchAndFamily, BYTE CharSet, LPCTSTR Face) +inline HFONT CreateFontPt(HWND hWndDPI, int Height, WORD Weight, BYTE PitchAndFamily, BYTE CharSet, LPCTSTR Face) { return CreateFont((INT_PTR) hWndDPI, CFF_DPIFROMHWND|CFF_DPIPT, Height, Weight, PitchAndFamily, CharSet, Face); } @@ -101,6 +101,7 @@ BOOL DrawHorzGradient(HDC hDC, LONG l, LONG t, LONG r, LONG b, COLORREF c1, COLO inline long RectW(const RECT&r) { return r.right - r.left; } inline long RectH(const RECT&r) { return r.bottom - r.top; } long DlgUnitToPixelX(HWND hDlg, long x); +long DlgUnitToPixelY(HWND hDlg, long y); UINT DpiGetForWindow(HWND hWnd); int DpiScaleY(HWND hWnd, int Val);