Added LoadAndSetImage instruction

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7078 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2019-02-03 20:53:13 +00:00
parent b9c8d57bb2
commit 797e745de5
8 changed files with 76 additions and 29 deletions

View file

@ -831,28 +831,17 @@ static int NSISCALL ExecuteEntry(entry *entry_)
SetWindowLongPtr(GetHwndFromParm(0), GWLP_USERDATA, (LONG_PTR) c);
}
break;
case EW_SETBRANDINGIMAGE:
case EW_LOADANDSETIMAGE:
{
RECT r;
HANDLE hImage;
HWND hwImage=GetDlgItem(g_hwnd, parm1);
GetClientRect(hwImage, &r);
hImage=LoadImage(
0,
GetStringFromParm(0x00),
IMAGE_BITMAP,
parm2*r.right,
parm2*r.bottom,
LR_LOADFROMFILE
);
hImage = (HANDLE)SendMessage(
hwImage,
STM_SETIMAGE,
IMAGE_BITMAP,
(LPARAM)hImage
);
// delete old image
if (hImage) DeleteObject(hImage);
HWND hCtl=(parm2 & LASIF_HWND) ? GetHwndFromParm(1) : GetDlgItem(g_hwnd, parm1);
UINT it=parm2 & LASIM_IMAGE, exeres=parm2 & LASIF_EXERES, fitw=(UINT)parm2 >> LASIS_FITCTLW, fith=(parm2 & LASIF_FITCTLH) != 0;
LPCTSTR imgname = (parm2 & LASIF_STRID) ? GetStringFromParm(0x00) : MAKEINTRESOURCE(parm0);
GetClientRect(hCtl, &r);
hImage=LoadImage(exeres ? g_hInstance : NULL, imgname, it, fitw*r.right, fith*r.bottom, parm2 & LASIM_LR);
hImage=(HANDLE)SendMessage(hCtl, STM_SETIMAGE, it, (LPARAM)hImage);
if (hImage && IMAGE_BITMAP == it) DeleteObject(hImage); // Delete the old image
}
break;
case EW_CREATEFONT:

View file

@ -174,6 +174,8 @@ const TCHAR * NSISCALL loadHeaders(int cl_flags)
#ifdef C_ASSERT
{C_ASSERT(sizeof(firstheader) == sizeof(int) * 7);}
{C_ASSERT(sizeof(struct block_header) == sizeof(UINT_PTR) + sizeof(int));}
{C_ASSERT(LASIF_FITCTLW >> LASIS_FITCTLW == 1);}
{C_ASSERT(LASIF_LR_LOADFROMFILE == LR_LOADFROMFILE);}
#endif
#ifdef NSIS_CONFIG_CRC_SUPPORT

View file

@ -112,7 +112,7 @@ enum
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
EW_GETDLGITEM, // GetDlgItem: 3: [outputvar, dialog, item_id]
EW_SETCTLCOLORS, // SerCtlColors: 3: [hwnd, pointer to struct colors]
EW_SETBRANDINGIMAGE, // SetBrandingImage: 1: [Bitmap file]
EW_LOADANDSETIMAGE, // SetBrandingImage/LoadAndSetImage: 3: [imgid ctl flags]
EW_CREATEFONT, // CreateFont: 5: [handle output, face name, height, weight, flags]
EW_SHOWWINDOW, // ShowWindow: 2: [hwnd, show state]
#endif
@ -467,6 +467,19 @@ typedef struct
int parms[5];
} page;
// EW_LOADANDSETIMAGE flags, masks and shifts
#define LASIS_FITCTLW 31 // Top bit because it MUST shift to a value of 0 or 1
#define LASIF_FITCTLW ( (unsigned int)1 << LASIS_FITCTLW )
#define LASIF_FITCTLH ( (unsigned int)1 << 30 )
#define LASIM_IMAGE 0x00000003 // IMAGE_*
#define LASIF_EXERES 0x00000004 // GetModuleHandle(NULL).
#define LASIF_HWND 0x00000100 // Don't call GetDlgItem.
#define LASIF_STRID 0x00010000
#define LASIM_LR ( 0x0000fff0 & ~(LASIM_IMAGE|LASIF_EXERES|LASIF_HWND|LASIF_STRID) )
#define LASIF_LR_LOADFROMFILE 0x00000010
// ctlcolors text/bg color flags
#define CC_TEXT 1
#define CC_TEXT_SYS 2