mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-22 10:55:19 -04:00
[ui] fix display of icons for RTL languages
* Ensure that the 'Save', 'Hash' and 'World' icons are not mirrored for RTL * Also call DestroyIcon() where required and clean up code
This commit is contained in:
parent
c709d3c030
commit
070e28aa5a
4 changed files with 85 additions and 30 deletions
46
src/rufus.c
46
src/rufus.c
|
@ -78,7 +78,6 @@ static HFONT hInfoFont;
|
||||||
static WNDPROC progress_original_proc = NULL;
|
static WNDPROC progress_original_proc = NULL;
|
||||||
static HANDLE format_thid = NULL, dialog_handle = NULL;
|
static HANDLE format_thid = NULL, dialog_handle = NULL;
|
||||||
static HWND hSelectImage = NULL, hStart = NULL;
|
static HWND hSelectImage = NULL, hStart = NULL;
|
||||||
static HICON hIconSave, hIconHash, hIconDown, hIconUp;
|
|
||||||
static char szTimer[12] = "00:00:00";
|
static char szTimer[12] = "00:00:00";
|
||||||
static wchar_t wtbtext[2][128];
|
static wchar_t wtbtext[2][128];
|
||||||
static unsigned int timer;
|
static unsigned int timer;
|
||||||
|
@ -99,7 +98,6 @@ OPENED_LIBRARIES_VARS;
|
||||||
HINSTANCE hMainInstance;
|
HINSTANCE hMainInstance;
|
||||||
HWND hMainDialog, hMultiToolbar, hSaveToolbar, hHashToolbar, hAdvancedDeviceToolbar, hAdvancedFormatToolbar, hUpdatesDlg = NULL;
|
HWND hMainDialog, hMultiToolbar, hSaveToolbar, hHashToolbar, hAdvancedDeviceToolbar, hAdvancedFormatToolbar, hUpdatesDlg = NULL;
|
||||||
HIMAGELIST hUpImageList, hDownImageList;
|
HIMAGELIST hUpImageList, hDownImageList;
|
||||||
BUTTON_IMAGELIST bi_iso = { 0 }, bi_up = { 0 }, bi_down = { 0 }, bi_save = { 0 };
|
|
||||||
char szFolderPath[MAX_PATH], app_dir[MAX_PATH], system_dir[MAX_PATH], temp_dir[MAX_PATH], sysnative_dir[MAX_PATH];
|
char szFolderPath[MAX_PATH], app_dir[MAX_PATH], system_dir[MAX_PATH], temp_dir[MAX_PATH], sysnative_dir[MAX_PATH];
|
||||||
char *image_path = NULL, *short_image_path;
|
char *image_path = NULL, *short_image_path;
|
||||||
float fScale = 1.0f;
|
float fScale = 1.0f;
|
||||||
|
@ -1915,6 +1913,7 @@ static INT_PTR CALLBACK ProgressCallback(HWND hCtrl, UINT message, WPARAM wParam
|
||||||
static void CreateSmallButtons(HWND hDlg)
|
static void CreateSmallButtons(HWND hDlg)
|
||||||
{
|
{
|
||||||
HIMAGELIST hImageList;
|
HIMAGELIST hImageList;
|
||||||
|
HICON hIconSave, hIconHash;
|
||||||
int icon_offset = 0, i16 = GetSystemMetrics(SM_CXSMICON);
|
int icon_offset = 0, i16 = GetSystemMetrics(SM_CXSMICON);
|
||||||
TBBUTTON tbToolbarButtons[1];
|
TBBUTTON tbToolbarButtons[1];
|
||||||
unsigned char* buffer;
|
unsigned char* buffer;
|
||||||
|
@ -1925,17 +1924,15 @@ static void CreateSmallButtons(HWND hDlg)
|
||||||
else if (i16 >= 20)
|
else if (i16 >= 20)
|
||||||
icon_offset = 10;
|
icon_offset = 10;
|
||||||
|
|
||||||
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(IDI_SAVE_16 + icon_offset), _RT_RCDATA, "save icon", &bufsize, FALSE);
|
|
||||||
hIconSave = CreateIconFromResourceEx(buffer, bufsize, TRUE, 0x30000, 0, 0, 0);
|
|
||||||
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(IDI_HASH_16 + icon_offset), _RT_RCDATA, "hash icon", &bufsize, FALSE);
|
|
||||||
hIconHash = CreateIconFromResourceEx(buffer, bufsize, TRUE, 0x30000, 0, 0, 0);
|
|
||||||
|
|
||||||
hSaveToolbar = CreateWindowExW(0, TOOLBARCLASSNAME, NULL,
|
hSaveToolbar = CreateWindowExW(0, TOOLBARCLASSNAME, NULL,
|
||||||
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NOPARENTALIGN |
|
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NOPARENTALIGN |
|
||||||
CCS_NODIVIDER | TBSTYLE_BUTTON | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE,
|
CCS_NODIVIDER | TBSTYLE_BUTTON | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE,
|
||||||
0, 0, 0, 0, hMainDialog, (HMENU)IDC_SAVE_TOOLBAR, hMainInstance, NULL);
|
0, 0, 0, 0, hMainDialog, (HMENU)IDC_SAVE_TOOLBAR, hMainInstance, NULL);
|
||||||
hImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
hImageList = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_HIGHQUALITYSCALE | ILC_MIRROR, 1, 0);
|
||||||
|
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(IDI_SAVE_16 + icon_offset), _RT_RCDATA, "save icon", &bufsize, FALSE);
|
||||||
|
hIconSave = CreateIconFromResourceEx(buffer, bufsize, TRUE, 0x30000, 0, 0, 0);
|
||||||
ImageList_AddIcon(hImageList, hIconSave);
|
ImageList_AddIcon(hImageList, hIconSave);
|
||||||
|
DestroyIcon(hIconSave);
|
||||||
SendMessage(hSaveToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hImageList);
|
SendMessage(hSaveToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hImageList);
|
||||||
SendMessage(hSaveToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
SendMessage(hSaveToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
||||||
memset(tbToolbarButtons, 0, sizeof(TBBUTTON));
|
memset(tbToolbarButtons, 0, sizeof(TBBUTTON));
|
||||||
|
@ -1949,8 +1946,11 @@ static void CreateSmallButtons(HWND hDlg)
|
||||||
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NOPARENTALIGN |
|
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NOPARENTALIGN |
|
||||||
CCS_NODIVIDER | TBSTYLE_BUTTON | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE,
|
CCS_NODIVIDER | TBSTYLE_BUTTON | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE,
|
||||||
0, 0, 0, 0, hMainDialog, (HMENU)IDC_HASH_TOOLBAR, hMainInstance, NULL);
|
0, 0, 0, 0, hMainDialog, (HMENU)IDC_HASH_TOOLBAR, hMainInstance, NULL);
|
||||||
hImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
hImageList = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_HIGHQUALITYSCALE | ILC_MIRROR, 1, 0);
|
||||||
|
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(IDI_HASH_16 + icon_offset), _RT_RCDATA, "hash icon", &bufsize, FALSE);
|
||||||
|
hIconHash = CreateIconFromResourceEx(buffer, bufsize, TRUE, 0x30000, 0, 0, 0);
|
||||||
ImageList_AddIcon(hImageList, hIconHash);
|
ImageList_AddIcon(hImageList, hIconHash);
|
||||||
|
DestroyIcon(hIconHash);
|
||||||
SendMessage(hHashToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hImageList);
|
SendMessage(hHashToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hImageList);
|
||||||
SendMessage(hHashToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
SendMessage(hHashToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
||||||
memset(tbToolbarButtons, 0, sizeof(TBBUTTON));
|
memset(tbToolbarButtons, 0, sizeof(TBBUTTON));
|
||||||
|
@ -1965,6 +1965,7 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
{
|
{
|
||||||
HINSTANCE hDll;
|
HINSTANCE hDll;
|
||||||
HIMAGELIST hToolbarImageList;
|
HIMAGELIST hToolbarImageList;
|
||||||
|
HICON hIcon, hIconUp, hIconDown;
|
||||||
RECT rc;
|
RECT rc;
|
||||||
SIZE sz;
|
SIZE sz;
|
||||||
int icon_offset = 0, i, i16, s16, toolbar_dx = -4 - ((fScale > 1.49f) ? 1 : 0) - ((fScale > 1.99f) ? 1 : 0);
|
int icon_offset = 0, i, i16, s16, toolbar_dx = -4 - ((fScale > 1.49f) ? 1 : 0) - ((fScale > 1.99f) ? 1 : 0);
|
||||||
|
@ -1996,8 +1997,8 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
hIconUp = (HICON)LoadImage(hDll, MAKEINTRESOURCE(16749), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
hIconUp = (HICON)LoadImage(hDll, MAKEINTRESOURCE(16749), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
if (hIconDown == NULL)
|
if (hIconDown == NULL)
|
||||||
hIconDown = (HICON)LoadImage(hDll, MAKEINTRESOURCE(16750), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
hIconDown = (HICON)LoadImage(hDll, MAKEINTRESOURCE(16750), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
hUpImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
hUpImageList = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_HIGHQUALITYSCALE, 1, 0);
|
||||||
hDownImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
hDownImageList = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_HIGHQUALITYSCALE, 1, 0);
|
||||||
ImageList_AddIcon(hUpImageList, hIconUp);
|
ImageList_AddIcon(hUpImageList, hIconUp);
|
||||||
ImageList_AddIcon(hDownImageList, hIconDown);
|
ImageList_AddIcon(hDownImageList, hIconDown);
|
||||||
|
|
||||||
|
@ -2053,10 +2054,16 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NOPARENTALIGN |
|
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NOPARENTALIGN |
|
||||||
CCS_NODIVIDER | TBSTYLE_FLAT | TBSTYLE_LIST | TBSTYLE_TRANSPARENT | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE,
|
CCS_NODIVIDER | TBSTYLE_FLAT | TBSTYLE_LIST | TBSTYLE_TRANSPARENT | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE,
|
||||||
0, 0, 0, 0, hMainDialog, (HMENU)IDC_MULTI_TOOLBAR, hMainInstance, NULL);
|
0, 0, 0, 0, hMainDialog, (HMENU)IDC_MULTI_TOOLBAR, hMainInstance, NULL);
|
||||||
hToolbarImageList = ImageList_Create(i16, i16, ILC_COLOR32, 8, 0);
|
hToolbarImageList = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_HIGHQUALITYSCALE, 8, 0);
|
||||||
for (i = 0; i < ARRAYSIZE(multitoolbar_icons); i++) {
|
for (i = 0; i < ARRAYSIZE(multitoolbar_icons); i++) {
|
||||||
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(multitoolbar_icons[i] + icon_offset), _RT_RCDATA, "toolbar icon", &bufsize, FALSE);
|
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(multitoolbar_icons[i] + icon_offset),
|
||||||
ImageList_AddIcon(hToolbarImageList, CreateIconFromResourceEx(buffer, bufsize, TRUE, 0x30000, 0, 0, 0));
|
_RT_RCDATA, "toolbar icon", &bufsize, FALSE);
|
||||||
|
hIcon = CreateIconFromResourceEx(buffer, bufsize, TRUE, 0x30000, 0, 0, 0);
|
||||||
|
// Mirror the "world" icon on RTL since we can't use an ImageList mirroring flag for that...
|
||||||
|
if (right_to_left_mode && (i == 0))
|
||||||
|
hIcon = CreateMirroredIcon(hIcon);
|
||||||
|
ImageList_AddIcon(hToolbarImageList, hIcon);
|
||||||
|
DestroyIcon(hIcon);
|
||||||
}
|
}
|
||||||
SendMessage(hMultiToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hToolbarImageList);
|
SendMessage(hMultiToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hToolbarImageList);
|
||||||
SendMessage(hMultiToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
SendMessage(hMultiToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
||||||
|
@ -2091,17 +2098,6 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
tbToolbarButtons[6].iBitmap = 3;
|
tbToolbarButtons[6].iBitmap = 3;
|
||||||
SendMessage(hMultiToolbar, TB_ADDBUTTONS, (WPARAM)7, (LPARAM)&tbToolbarButtons);
|
SendMessage(hMultiToolbar, TB_ADDBUTTONS, (WPARAM)7, (LPARAM)&tbToolbarButtons);
|
||||||
SendMessage(hMultiToolbar, TB_SETBUTTONSIZE, 0, MAKELPARAM(0, ddbh));
|
SendMessage(hMultiToolbar, TB_SETBUTTONSIZE, 0, MAKELPARAM(0, ddbh));
|
||||||
|
|
||||||
// Set the icons on the the buttons
|
|
||||||
bi_save.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
|
||||||
bi_down.himl = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0);
|
|
||||||
ImageList_ReplaceIcon(bi_down.himl, -1, hIconDown);
|
|
||||||
SetRect(&bi_down.margin, 0, 0, 0, 0);
|
|
||||||
bi_down.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
|
||||||
bi_up.himl = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0);
|
|
||||||
ImageList_ReplaceIcon(bi_up.himl, -1, hIconUp);
|
|
||||||
SetRect(&bi_up.margin, 0, 0, 0, 0);
|
|
||||||
bi_up.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://stackoverflow.com/a/20926332/1069307
|
// https://stackoverflow.com/a/20926332/1069307
|
||||||
|
|
|
@ -515,6 +515,7 @@ extern BYTE SearchProcess(char* HandleName, DWORD dwTimeout, BOOL bPartialMatch,
|
||||||
extern BOOL EnablePrivileges(void);
|
extern BOOL EnablePrivileges(void);
|
||||||
extern void FlashTaskbar(HANDLE handle);
|
extern void FlashTaskbar(HANDLE handle);
|
||||||
extern DWORD WaitForSingleObjectWithMessages(HANDLE hHandle, DWORD dwMilliseconds);
|
extern DWORD WaitForSingleObjectWithMessages(HANDLE hHandle, DWORD dwMilliseconds);
|
||||||
|
extern HICON CreateMirroredIcon(HICON hiconOrg);
|
||||||
#define GetTextWidth(hDlg, id) GetTextSize(GetDlgItem(hDlg, id), NULL).cx
|
#define GetTextWidth(hDlg, id) GetTextSize(GetDlgItem(hDlg, id), NULL).cx
|
||||||
|
|
||||||
DWORD WINAPI FormatThread(void* param);
|
DWORD WINAPI FormatThread(void* param);
|
||||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_ACCEPTFILES
|
EXSTYLE WS_EX_ACCEPTFILES
|
||||||
CAPTION "Rufus 3.0.1271"
|
CAPTION "Rufus 3.0.1272"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||||
|
@ -389,8 +389,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 3,0,1271,0
|
FILEVERSION 3,0,1272,0
|
||||||
PRODUCTVERSION 3,0,1271,0
|
PRODUCTVERSION 3,0,1272,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -407,13 +407,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "3.0.1271"
|
VALUE "FileVersion", "3.0.1272"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "3.0.1271"
|
VALUE "ProductVersion", "3.0.1272"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
58
src/stdlg.c
58
src/stdlg.c
|
@ -1922,6 +1922,64 @@ void FlashTaskbar(HANDLE handle)
|
||||||
FlashWindowEx(&pf);
|
FlashWindowEx(&pf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://docs.microsoft.com/en-us/globalization/localizability/mirroring-in-win32
|
||||||
|
// Note: This function *destroys* the original icon
|
||||||
|
HICON CreateMirroredIcon(HICON hiconOrg)
|
||||||
|
{
|
||||||
|
HDC hdcScreen, hdcBitmap, hdcMask = NULL;
|
||||||
|
HBITMAP hbm, hbmMask, hbmOld, hbmOldMask;
|
||||||
|
BITMAP bm;
|
||||||
|
ICONINFO ii;
|
||||||
|
HICON hicon = NULL;
|
||||||
|
hdcBitmap = CreateCompatibleDC(NULL);
|
||||||
|
if (hdcBitmap) {
|
||||||
|
hdcMask = CreateCompatibleDC(NULL);
|
||||||
|
if (hdcMask) {
|
||||||
|
SetLayout(hdcBitmap, LAYOUT_RTL);
|
||||||
|
SetLayout(hdcMask, LAYOUT_RTL);
|
||||||
|
} else {
|
||||||
|
DeleteDC(hdcBitmap);
|
||||||
|
hdcBitmap = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hdcScreen = GetDC(NULL);
|
||||||
|
if (hdcScreen) {
|
||||||
|
if (hdcBitmap && hdcMask) {
|
||||||
|
if (hiconOrg) {
|
||||||
|
if (GetIconInfo(hiconOrg, &ii) && GetObject(ii.hbmColor, sizeof(BITMAP), &bm)) {
|
||||||
|
// Do the cleanup for the bitmaps.
|
||||||
|
DeleteObject(ii.hbmMask);
|
||||||
|
DeleteObject(ii.hbmColor);
|
||||||
|
ii.hbmMask = ii.hbmColor = NULL;
|
||||||
|
hbm = CreateCompatibleBitmap(hdcScreen, bm.bmWidth, bm.bmHeight);
|
||||||
|
hbmMask = CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL);
|
||||||
|
hbmOld = (HBITMAP)SelectObject(hdcBitmap, hbm);
|
||||||
|
hbmOldMask = (HBITMAP)SelectObject(hdcMask, hbmMask);
|
||||||
|
DrawIconEx(hdcBitmap, 0, 0, hiconOrg, bm.bmWidth, bm.bmHeight, 0, NULL, DI_IMAGE);
|
||||||
|
DrawIconEx(hdcMask, 0, 0, hiconOrg, bm.bmWidth, bm.bmHeight, 0, NULL, DI_MASK);
|
||||||
|
SelectObject(hdcBitmap, hbmOld);
|
||||||
|
SelectObject(hdcMask, hbmOldMask);
|
||||||
|
|
||||||
|
// Create the new mirrored icon and delete bitmaps
|
||||||
|
ii.hbmMask = hbmMask;
|
||||||
|
ii.hbmColor = hbm;
|
||||||
|
hicon = CreateIconIndirect(&ii);
|
||||||
|
DeleteObject(hbm);
|
||||||
|
DeleteObject(hbmMask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ReleaseDC(NULL, hdcScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hdcBitmap)
|
||||||
|
DeleteDC(hdcBitmap);
|
||||||
|
if (hdcMask)
|
||||||
|
DeleteDC(hdcMask);
|
||||||
|
DestroyIcon(hiconOrg);
|
||||||
|
return hicon;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef RUFUS_TEST
|
#ifdef RUFUS_TEST
|
||||||
static __inline LPWORD lpwAlign(LPWORD addr)
|
static __inline LPWORD lpwAlign(LPWORD addr)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue