mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[internal] UI redesign, part 4
* Wish I had my DeLorean to go back in time, coz this is depressing...
This commit is contained in:
parent
88d9c2de41
commit
4f6dbbbdd4
8 changed files with 337 additions and 230 deletions
|
@ -101,6 +101,7 @@ t IDS_DEVICE_SETTINGS_TXT "Device Settings"
|
||||||
t IDS_DEVICE_TXT "Device"
|
t IDS_DEVICE_TXT "Device"
|
||||||
# TODO: use MSG_278 for translations
|
# TODO: use MSG_278 for translations
|
||||||
t IDS_BOOT_TYPE_TXT "Boot type"
|
t IDS_BOOT_TYPE_TXT "Boot type"
|
||||||
|
t IDC_SELECT_IMAGE "SELECT"
|
||||||
t IDS_IMAGE_OPTION_TXT "Image Option"
|
t IDS_IMAGE_OPTION_TXT "Image Option"
|
||||||
t IDS_PARTITION_TYPE_TXT "Partition scheme"
|
t IDS_PARTITION_TYPE_TXT "Partition scheme"
|
||||||
t IDS_TARGET_SYSTEM_TXT "Target system"
|
t IDS_TARGET_SYSTEM_TXT "Target system"
|
||||||
|
@ -124,10 +125,9 @@ t IDC_EXTENDED_LABEL "Create extended label and icon files"
|
||||||
t IDS_STATUS_TXT "Status"
|
t IDS_STATUS_TXT "Status"
|
||||||
t IDC_ABOUT "About..."
|
t IDC_ABOUT "About..."
|
||||||
t IDC_LOG "Log"
|
t IDC_LOG "Log"
|
||||||
t IDCANCEL "Close"
|
t IDCANCEL "CLOSE"
|
||||||
t IDC_START "Start"
|
t IDC_START "START"
|
||||||
t IDS_ADVANCED_OPTIONS_GRP "Advanced Options"
|
t IDS_ADVANCED_OPTIONS_GRP "Advanced Options"
|
||||||
t IDC_SHOW_ADVANCED_OPTIONS "Show Advanced Options ⌵"
|
|
||||||
|
|
||||||
# About dialog
|
# About dialog
|
||||||
g IDD_ABOUTBOX
|
g IDD_ABOUTBOX
|
||||||
|
@ -5218,6 +5218,7 @@ g IDD_DIALOG
|
||||||
t IDS_DEVICE_SETTINGS_TXT "Options de Périphérique"
|
t IDS_DEVICE_SETTINGS_TXT "Options de Périphérique"
|
||||||
t IDS_DEVICE_TXT "Périphérique"
|
t IDS_DEVICE_TXT "Périphérique"
|
||||||
t IDS_BOOT_TYPE_TXT "Type de démarrage"
|
t IDS_BOOT_TYPE_TXT "Type de démarrage"
|
||||||
|
t IDC_SELECT_IMAGE "SELECTION"
|
||||||
t IDS_IMAGE_OPTION_TXT "Option d'image"
|
t IDS_IMAGE_OPTION_TXT "Option d'image"
|
||||||
t IDS_PARTITION_TYPE_TXT "Schéma de partition"
|
t IDS_PARTITION_TYPE_TXT "Schéma de partition"
|
||||||
t IDC_ADVANCED_DEVICE_SETTINGS "Options de Périphérique Avancées"
|
t IDC_ADVANCED_DEVICE_SETTINGS "Options de Périphérique Avancées"
|
||||||
|
@ -5227,27 +5228,18 @@ t IDS_CLUSTERSIZE_TXT "Taille d'unité d'allocation"
|
||||||
t IDS_LABEL_TXT "Nom de volume"
|
t IDS_LABEL_TXT "Nom de volume"
|
||||||
t IDS_FORMAT_OPTIONS_TXT "Options de Formatage"
|
t IDS_FORMAT_OPTIONS_TXT "Options de Formatage"
|
||||||
t IDC_BADBLOCKS "Vérification de mauvais blocs"
|
t IDC_BADBLOCKS "Vérification de mauvais blocs"
|
||||||
m IDC_NBPASSES +5,0
|
|
||||||
s IDC_NBPASSES -2,0
|
|
||||||
t IDC_QUICKFORMAT "Formatage rapide"
|
t IDC_QUICKFORMAT "Formatage rapide"
|
||||||
t IDC_BOOT "Créer un disque de démarrage"
|
t IDC_BOOT "Créer un disque de démarrage"
|
||||||
s IDC_BOOT +5,0
|
|
||||||
t IDC_WINDOWS_INSTALL "Installation standard de Windows"
|
t IDC_WINDOWS_INSTALL "Installation standard de Windows"
|
||||||
t IDC_EXTENDED_LABEL "Ajouter un label étendu et une icône"
|
t IDC_EXTENDED_LABEL "Ajouter un label étendu et une icône"
|
||||||
t IDC_ADVANCED_FORMAT_OPTIONS "Options de Formatage Avancées"
|
t IDC_ADVANCED_FORMAT_OPTIONS "Options de Formatage Avancées"
|
||||||
t IDS_STATUS_TXT "Statut"
|
t IDS_STATUS_TXT "Statut"
|
||||||
t IDC_ABOUT "A propos..."
|
t IDC_ABOUT "A propos..."
|
||||||
t IDCANCEL "Fermer"
|
t IDCANCEL "FERMER"
|
||||||
t IDC_START "Démarrer"
|
t IDC_START "DEMARRER"
|
||||||
m IDC_START +5,0
|
|
||||||
s IDC_START -2,0
|
|
||||||
m IDCANCEL +2,0
|
|
||||||
s IDCANCEL -2,0
|
|
||||||
t IDC_LIST_USB_HDD "Lister les disques durs USB"
|
t IDC_LIST_USB_HDD "Lister les disques durs USB"
|
||||||
t IDC_OLD_BIOS_FIXES "Ajouter les options de compatibilité pour vieux BIOS"
|
t IDC_OLD_BIOS_FIXES "Ajouter les options de compatibilité pour vieux BIOS"
|
||||||
t IDC_RUFUS_MBR "Utiliser le MBR Rufus avec ID"
|
t IDC_RUFUS_MBR "Utiliser le MBR Rufus avec ID"
|
||||||
m IDC_DISK_ID +5,0
|
|
||||||
s IDC_DISK_ID -2,0
|
|
||||||
|
|
||||||
g IDD_ABOUTBOX
|
g IDD_ABOUTBOX
|
||||||
t IDD_ABOUTBOX "A propos de Rufus"
|
t IDD_ABOUTBOX "A propos de Rufus"
|
||||||
|
@ -5336,7 +5328,7 @@ t MSG_034 "%d passe"
|
||||||
t MSG_035 "%d passes"
|
t MSG_035 "%d passes"
|
||||||
t MSG_036 "Image ISO"
|
t MSG_036 "Image ISO"
|
||||||
t MSG_037 "Application"
|
t MSG_037 "Application"
|
||||||
t MSG_038 "Annuler"
|
t MSG_038 "ANNULER"
|
||||||
t MSG_039 "Lancer"
|
t MSG_039 "Lancer"
|
||||||
t MSG_040 "Télécharger"
|
t MSG_040 "Télécharger"
|
||||||
t MSG_041 "Opération annulée par l'utilisateur"
|
t MSG_041 "Opération annulée par l'utilisateur"
|
||||||
|
@ -5646,6 +5638,9 @@ t MSG_298 "Le fichier ISO que vous avez sélectionné ne fait pas la bonne taill
|
||||||
"Si vous avez obtenu ce fichier depuis Internet, vous devriez essayer de le télécharger à nouveau et verifier que "
|
"Si vous avez obtenu ce fichier depuis Internet, vous devriez essayer de le télécharger à nouveau et verifier que "
|
||||||
"le MD5 ou SHA correspond aux valeurs officielles.\n\nNotez que vous pouvez calculer le MD5 ou SHA depuis Rufus en "
|
"le MD5 ou SHA correspond aux valeurs officielles.\n\nNotez que vous pouvez calculer le MD5 ou SHA depuis Rufus en "
|
||||||
"cliquant le bouton '#'."
|
"cliquant le bouton '#'."
|
||||||
|
t MSG_303 "Image disque ou ISO"
|
||||||
|
t MSG_304 "%s (Veuillez sélectionner)"
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
l "de-DE" "German (Deutsch)" 0x0407, 0x0807, 0x0c07, 0x1007, 0x1407
|
l "de-DE" "German (Deutsch)" 0x0407, 0x0807, 0x0c07, 0x1007, 0x1407
|
||||||
|
|
|
@ -57,6 +57,7 @@ const GUID PARTITION_SYSTEM_GUID =
|
||||||
* Globals
|
* Globals
|
||||||
*/
|
*/
|
||||||
RUFUS_DRIVE_INFO SelectedDrive;
|
RUFUS_DRIVE_INFO SelectedDrive;
|
||||||
|
const char* sfd_name = "Super Floppy Disk";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following methods get or set the AutoMount setting (which is different from AutoRun)
|
* The following methods get or set the AutoMount setting (which is different from AutoRun)
|
||||||
|
@ -765,7 +766,7 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys
|
||||||
// Detect drives that are using the whole disk as a single partition
|
// Detect drives that are using the whole disk as a single partition
|
||||||
if ((DriveLayout->PartitionEntry[0].Mbr.PartitionType != PARTITION_ENTRY_UNUSED) &&
|
if ((DriveLayout->PartitionEntry[0].Mbr.PartitionType != PARTITION_ENTRY_UNUSED) &&
|
||||||
(DriveLayout->PartitionEntry[0].StartingOffset.QuadPart == 0LL)) {
|
(DriveLayout->PartitionEntry[0].StartingOffset.QuadPart == 0LL)) {
|
||||||
suprintf("Partition type: SFD (Super Floppy Disk) or Unpartitioned");
|
suprintf("Partition type: SFD (%s) or Unpartitioned", sfd_name);
|
||||||
super_floppy_disk = TRUE;
|
super_floppy_disk = TRUE;
|
||||||
} else {
|
} else {
|
||||||
suprintf("Partition type: MBR, NB Partitions: %d", SelectedDrive.nPartitions);
|
suprintf("Partition type: MBR, NB Partitions: %d", SelectedDrive.nPartitions);
|
||||||
|
|
|
@ -81,6 +81,8 @@ const loc_control_id control_id[] = {
|
||||||
LOC_CTRL(IDC_WINDOWS_INSTALL),
|
LOC_CTRL(IDC_WINDOWS_INSTALL),
|
||||||
LOC_CTRL(IDC_WINDOWS_TO_GO),
|
LOC_CTRL(IDC_WINDOWS_TO_GO),
|
||||||
LOC_CTRL(IDC_SHOW_ADVANCED_OPTIONS),
|
LOC_CTRL(IDC_SHOW_ADVANCED_OPTIONS),
|
||||||
|
LOC_CTRL(IDC_MULTI_TOOLBAR),
|
||||||
|
LOC_CTRL(IDC_SETTINGS),
|
||||||
LOC_CTRL(IDC_LOG_EDIT),
|
LOC_CTRL(IDC_LOG_EDIT),
|
||||||
LOC_CTRL(IDC_LOG_SAVE),
|
LOC_CTRL(IDC_LOG_SAVE),
|
||||||
LOC_CTRL(IDC_LOG_CLEAR),
|
LOC_CTRL(IDC_LOG_CLEAR),
|
||||||
|
|
|
@ -107,7 +107,7 @@
|
||||||
#define IDC_ABOUT_UPDATES 1032
|
#define IDC_ABOUT_UPDATES 1032
|
||||||
#define IDC_ABOUT_COPYRIGHTS 1033
|
#define IDC_ABOUT_COPYRIGHTS 1033
|
||||||
#define IDC_ABOUT_BLURB 1034
|
#define IDC_ABOUT_BLURB 1034
|
||||||
#define IDC_LICENSE_TEXT 1036
|
#define IDC_LICENSE_TEXT 1035
|
||||||
#define IDC_NOTIFICATION_ICON 1040
|
#define IDC_NOTIFICATION_ICON 1040
|
||||||
#define IDC_NOTIFICATION_TEXT 1041
|
#define IDC_NOTIFICATION_TEXT 1041
|
||||||
#define IDC_NOTIFICATION_LINE 1042
|
#define IDC_NOTIFICATION_LINE 1042
|
||||||
|
@ -117,9 +117,11 @@
|
||||||
#define IDC_WINDOWS_INSTALL 1047
|
#define IDC_WINDOWS_INSTALL 1047
|
||||||
#define IDC_WINDOWS_TO_GO 1048
|
#define IDC_WINDOWS_TO_GO 1048
|
||||||
#define IDC_SHOW_ADVANCED_OPTIONS 1049
|
#define IDC_SHOW_ADVANCED_OPTIONS 1049
|
||||||
#define IDC_LOG_EDIT 1050
|
#define IDC_MULTI_TOOLBAR 1050
|
||||||
#define IDC_LOG_SAVE 1051
|
#define IDC_SETTINGS 1051
|
||||||
#define IDC_LOG_CLEAR 1052
|
#define IDC_LOG_EDIT 1055
|
||||||
|
#define IDC_LOG_SAVE 1056
|
||||||
|
#define IDC_LOG_CLEAR 1057
|
||||||
#define IDC_MORE_INFO 1060
|
#define IDC_MORE_INFO 1060
|
||||||
#define IDC_POLICY 1061
|
#define IDC_POLICY 1061
|
||||||
#define IDC_UPDATE_FREQUENCY 1062
|
#define IDC_UPDATE_FREQUENCY 1062
|
||||||
|
|
437
src/rufus.c
437
src/rufus.c
|
@ -75,6 +75,7 @@ static int image_option_move_ids[] = {
|
||||||
IDC_INFO,
|
IDC_INFO,
|
||||||
IDC_ABOUT,
|
IDC_ABOUT,
|
||||||
IDC_LOG,
|
IDC_LOG,
|
||||||
|
IDC_MULTI_TOOLBAR,
|
||||||
IDC_TEST,
|
IDC_TEST,
|
||||||
IDC_START,
|
IDC_START,
|
||||||
IDCANCEL,
|
IDCANCEL,
|
||||||
|
@ -108,6 +109,7 @@ static int advanced_device_move_ids[] = {
|
||||||
IDC_INFO,
|
IDC_INFO,
|
||||||
IDC_ABOUT,
|
IDC_ABOUT,
|
||||||
IDC_LOG,
|
IDC_LOG,
|
||||||
|
IDC_MULTI_TOOLBAR,
|
||||||
IDC_TEST,
|
IDC_TEST,
|
||||||
IDC_START,
|
IDC_START,
|
||||||
IDCANCEL,
|
IDCANCEL,
|
||||||
|
@ -129,6 +131,7 @@ static int advanced_format_move_ids[] = {
|
||||||
IDC_INFO,
|
IDC_INFO,
|
||||||
IDC_ABOUT,
|
IDC_ABOUT,
|
||||||
IDC_LOG,
|
IDC_LOG,
|
||||||
|
IDC_MULTI_TOOLBAR,
|
||||||
IDC_TEST,
|
IDC_TEST,
|
||||||
IDC_START,
|
IDC_START,
|
||||||
IDCANCEL,
|
IDCANCEL,
|
||||||
|
@ -161,8 +164,9 @@ static BOOL app_changed_label = FALSE;
|
||||||
static BOOL allowed_filesystem[FS_MAX] = { 0 };
|
static BOOL allowed_filesystem[FS_MAX] = { 0 };
|
||||||
static int64_t last_iso_blocking_status;
|
static int64_t last_iso_blocking_status;
|
||||||
// TODO: rename 'selection_default' to something more explicit
|
// TODO: rename 'selection_default' to something more explicit
|
||||||
static int selection_default, row_height, advanced_device_section_height, advanced_format_section_height, image_settings_height, image_index;
|
static int selection_default, row_height, advanced_device_section_height, advanced_format_section_height, image_index;
|
||||||
static int device_vpos, format_vpos, status_vpos;
|
static int device_vpos, format_vpos, status_vpos;
|
||||||
|
static int cb_width, dd_width, sep_width, margin_width, half_width, full_width;
|
||||||
static UINT_PTR UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU;
|
static UINT_PTR UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU;
|
||||||
static RECT relaunch_rc = { -65536, -65536, 0, 0};
|
static RECT relaunch_rc = { -65536, -65536, 0, 0};
|
||||||
static UINT uQFChecked = BST_CHECKED, uMBRChecked = BST_UNCHECKED;
|
static UINT uQFChecked = BST_CHECKED, uMBRChecked = BST_UNCHECKED;
|
||||||
|
@ -171,7 +175,7 @@ static HBRUSH hInfoBrush;
|
||||||
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, hIconDown, hIconUp, hIconLang;
|
static HICON hIconSave, hIconDown, hIconUp, hIconLang, hIconAbout, hIconSettings, hIconLog;
|
||||||
static char szTimer[12] = "00:00:00";
|
static char szTimer[12] = "00:00:00";
|
||||||
static unsigned int timer;
|
static unsigned int timer;
|
||||||
|
|
||||||
|
@ -181,13 +185,14 @@ extern long grub2_len;
|
||||||
extern char* szStatusMessage;
|
extern char* szStatusMessage;
|
||||||
extern const char* old_c32_name[NB_OLD_C32];
|
extern const char* old_c32_name[NB_OLD_C32];
|
||||||
extern const char* cert_name[3];
|
extern const char* cert_name[3];
|
||||||
|
extern const char* sfd_name;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Globals
|
* Globals
|
||||||
*/
|
*/
|
||||||
OPENED_LIBRARIES_VARS;
|
OPENED_LIBRARIES_VARS;
|
||||||
HINSTANCE hMainInstance;
|
HINSTANCE hMainInstance;
|
||||||
HWND hMainDialog, hLangToolbar = NULL, hAdvancedDeviceToolBar, hAdvancedFormatToolBar, hUpdatesDlg = NULL;
|
HWND hMainDialog, hMultiToolbar = NULL, hAdvancedDeviceToolBar, hAdvancedFormatToolBar, hUpdatesDlg = NULL;
|
||||||
HIMAGELIST hUpImageList, hDownImageList;
|
HIMAGELIST hUpImageList, hDownImageList;
|
||||||
BUTTON_IMAGELIST bi_iso = { 0 }, bi_up = { 0 }, bi_down = { 0 }, bi_save = { 0 };
|
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];
|
||||||
|
@ -248,14 +253,14 @@ static void SetComboEntry(HWND hDlg, int data) {
|
||||||
// Fill in the cluster size names
|
// Fill in the cluster size names
|
||||||
static void SetClusterSizeLabels(void)
|
static void SetClusterSizeLabels(void)
|
||||||
{
|
{
|
||||||
unsigned int i, j, k;
|
unsigned int i, j, msg_id;
|
||||||
safe_sprintf(ClusterSizeLabel[0], 64, lmprintf(MSG_029));
|
safe_sprintf(ClusterSizeLabel[0], 64, lmprintf(MSG_029));
|
||||||
for (i=512, j=1, k=MSG_026; j<MAX_CLUSTER_SIZES; i<<=1, j++) {
|
for (i=512, j=1, msg_id=MSG_026; j<MAX_CLUSTER_SIZES; i<<=1, j++) {
|
||||||
if (i > 8192) {
|
if (i > 8192) {
|
||||||
i /= 1024;
|
i /= 1024;
|
||||||
k++;
|
msg_id++;
|
||||||
}
|
}
|
||||||
safe_sprintf(ClusterSizeLabel[j], 64, "%d %s", i, lmprintf(k));
|
safe_sprintf(ClusterSizeLabel[j], 64, "%d %s", i, lmprintf(msg_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,7 +271,6 @@ static void SetAllowedFileSystems(void)
|
||||||
memset(allowed_filesystem, 0, sizeof(allowed_filesystem));
|
memset(allowed_filesystem, 0, sizeof(allowed_filesystem));
|
||||||
switch (selection_default) {
|
switch (selection_default) {
|
||||||
case BT_NON_BOOTABLE:
|
case BT_NON_BOOTABLE:
|
||||||
// TODO: Disable target system control, add "Super Floppy" to the list
|
|
||||||
for (i = 0; i < FS_MAX; i++)
|
for (i = 0; i < FS_MAX; i++)
|
||||||
allowed_filesystem[i] = TRUE;
|
allowed_filesystem[i] = TRUE;
|
||||||
break;
|
break;
|
||||||
|
@ -410,7 +414,7 @@ static void SetPartitionSchemeAndTargetSystem(BOOL only_target)
|
||||||
ComboBox_AddStringU(hPartitionScheme, "GPT"), PARTITION_STYLE_GPT));
|
ComboBox_AddStringU(hPartitionScheme, "GPT"), PARTITION_STYLE_GPT));
|
||||||
if (allowed_partition_scheme[PARTITION_STYLE_SFD])
|
if (allowed_partition_scheme[PARTITION_STYLE_SFD])
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hPartitionScheme,
|
IGNORE_RETVAL(ComboBox_SetItemData(hPartitionScheme,
|
||||||
ComboBox_AddStringU(hPartitionScheme, "Super Floppy Disk"), PARTITION_STYLE_SFD));
|
ComboBox_AddStringU(hPartitionScheme, sfd_name), PARTITION_STYLE_SFD));
|
||||||
SetComboEntry(hPartitionScheme, prefer_gpt ? PARTITION_STYLE_GPT : PARTITION_STYLE_MBR);
|
SetComboEntry(hPartitionScheme, prefer_gpt ? PARTITION_STYLE_GPT : PARTITION_STYLE_MBR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1048,7 +1052,7 @@ static void EnableControls(BOOL bEnable)
|
||||||
EnableWindow(hNBPasses, bEnable);
|
EnableWindow(hNBPasses, bEnable);
|
||||||
EnableWindow(hAdvancedDeviceToolBar, bEnable);
|
EnableWindow(hAdvancedDeviceToolBar, bEnable);
|
||||||
EnableWindow(hAdvancedFormatToolBar, bEnable);
|
EnableWindow(hAdvancedFormatToolBar, bEnable);
|
||||||
EnableWindow(hLangToolbar, bEnable);
|
EnableWindow(hMultiToolbar, bEnable);
|
||||||
EnableWindow(hStatusToolbar, bEnable);
|
EnableWindow(hStatusToolbar, bEnable);
|
||||||
EnableWindow(GetDlgItem(hMainDialog, IDC_LIST_USB_HDD), bEnable);
|
EnableWindow(GetDlgItem(hMainDialog, IDC_LIST_USB_HDD), bEnable);
|
||||||
SetDlgItemTextU(hMainDialog, IDCANCEL, lmprintf(bEnable?MSG_006:MSG_007));
|
SetDlgItemTextU(hMainDialog, IDCANCEL, lmprintf(bEnable?MSG_006:MSG_007));
|
||||||
|
@ -1879,31 +1883,12 @@ static INT_PTR CALLBACK ProgressCallback(HWND hCtrl, UINT message, WPARAM wParam
|
||||||
|
|
||||||
static void CreateAdditionalControls(HWND hDlg)
|
static void CreateAdditionalControls(HWND hDlg)
|
||||||
{
|
{
|
||||||
HINSTANCE hShell32DllInst, hComDlg32DllInst, hUserLanguagesCplDllInst, hINetCplDllInst;
|
HINSTANCE hDll;
|
||||||
HIMAGELIST hToolbarImageList;
|
HIMAGELIST hToolbarImageList;
|
||||||
HWND hCtrl;
|
|
||||||
RECT rc;
|
RECT rc;
|
||||||
wchar_t wtmp[128];
|
|
||||||
static wchar_t wtbtext[2][128];
|
static wchar_t wtbtext[2][128];
|
||||||
int i16, s16, toolbar_fudge = -6;
|
int i16, s16, toolbar_fudge = -6;
|
||||||
TBBUTTON tbToolbarButtons[1];
|
TBBUTTON tbToolbarButtons[7];
|
||||||
|
|
||||||
// Add trailing space to the "Format Options" text
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_DEVICE_SETTINGS_TXT);
|
|
||||||
memset(wtmp, 0, sizeof(wtmp));
|
|
||||||
GetWindowTextW(hCtrl, wtmp, ARRAYSIZE(wtmp));
|
|
||||||
wtmp[wcslen(wtmp)] = ' ';
|
|
||||||
SetWindowTextW(hCtrl, wtmp);
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_FORMAT_OPTIONS_TXT);
|
|
||||||
memset(wtmp, 0, sizeof(wtmp));
|
|
||||||
GetWindowTextW(hCtrl, wtmp, ARRAYSIZE(wtmp));
|
|
||||||
wtmp[wcslen(wtmp)] = ' ';
|
|
||||||
SetWindowTextW(hCtrl, wtmp);
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_STATUS_TXT);
|
|
||||||
memset(wtmp, 0, sizeof(wtmp));
|
|
||||||
GetWindowTextW(hCtrl, wtmp, ARRAYSIZE(wtmp));
|
|
||||||
wtmp[wcslen(wtmp)] = ' ';
|
|
||||||
SetWindowTextW(hCtrl, wtmp);
|
|
||||||
|
|
||||||
// High DPI scaling
|
// High DPI scaling
|
||||||
i16 = GetSystemMetrics(SM_CXSMICON);
|
i16 = GetSystemMetrics(SM_CXSMICON);
|
||||||
|
@ -1919,25 +1904,30 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
s16 = 24;
|
s16 = 24;
|
||||||
|
|
||||||
// Load system icons (NB: Use the excellent http://www.nirsoft.net/utils/iconsext.html to find icon IDs)
|
// Load system icons (NB: Use the excellent http://www.nirsoft.net/utils/iconsext.html to find icon IDs)
|
||||||
hShell32DllInst = GetLibraryHandle("Shell32");
|
hDll = GetLibraryHandle("Shell32");
|
||||||
hIconSave = (HICON)LoadImage(hShell32DllInst, MAKEINTRESOURCE(16761), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
hIconSave = (HICON)LoadImage(hDll, MAKEINTRESOURCE(16761), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
|
hIconLog = (HICON)LoadImage(hDll, MAKEINTRESOURCE(281), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
|
hIconSettings = (HICON)LoadImage(hDll, MAKEINTRESOURCE(16826), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
|
|
||||||
|
hDll = GetLibraryHandle("User32");
|
||||||
|
hIconAbout = (HICON)LoadImage(hDll, MAKEINTRESOURCE(104), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
|
|
||||||
if (nWindowsVersion >= WINDOWS_8) {
|
if (nWindowsVersion >= WINDOWS_8) {
|
||||||
// Use the icon from the Windows 8+ 'Language' Control Panel
|
// Use the icon from the Windows 8+ 'Language' Control Panel
|
||||||
hUserLanguagesCplDllInst = GetLibraryHandle("UserLanguagesCpl");
|
hDll = GetLibraryHandle("UserLanguagesCpl");
|
||||||
hIconLang = (HICON)LoadImage(hUserLanguagesCplDllInst, MAKEINTRESOURCE(1), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
hIconLang = (HICON)LoadImage(hDll, MAKEINTRESOURCE(1), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
} else {
|
} else {
|
||||||
// Otherwise use the globe icon, from the Internet Options Control Panel
|
// Otherwise use the globe icon, from the Internet Options Control Panel
|
||||||
hINetCplDllInst = GetLibraryHandle("inetcpl.cpl");
|
hDll = GetLibraryHandle("inetcpl.cpl");
|
||||||
hIconLang = (HICON)LoadImage(hINetCplDllInst, MAKEINTRESOURCE(1313), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
hIconLang = (HICON)LoadImage(hDll, MAKEINTRESOURCE(1313), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the up and down expand icons for the advanced options toolbar
|
// Fetch the up and down expand icons for the advanced options toolbar
|
||||||
hComDlg32DllInst = GetLibraryHandle("ComDlg32");
|
hDll = GetLibraryHandle("ComDlg32");
|
||||||
hIconDown = (HICON)LoadImage(hComDlg32DllInst, MAKEINTRESOURCE(577), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
hIconDown = (HICON)LoadImage(hDll, MAKEINTRESOURCE(577), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
hDownImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
hDownImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
||||||
ImageList_AddIcon(hDownImageList, hIconDown);
|
ImageList_AddIcon(hDownImageList, hIconDown);
|
||||||
hIconUp = (HICON)LoadImage(hComDlg32DllInst, MAKEINTRESOURCE(578), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
hIconUp = (HICON)LoadImage(hDll, MAKEINTRESOURCE(578), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR | LR_SHARED);
|
||||||
hUpImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
hUpImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
||||||
ImageList_AddIcon(hUpImageList, hIconUp);
|
ImageList_AddIcon(hUpImageList, hIconUp);
|
||||||
|
|
||||||
|
@ -1954,16 +1944,12 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
tbToolbarButtons[0].fsState = TBSTATE_ENABLED;
|
tbToolbarButtons[0].fsState = TBSTATE_ENABLED;
|
||||||
tbToolbarButtons[0].iString = (INT_PTR)wtbtext[0];
|
tbToolbarButtons[0].iString = (INT_PTR)wtbtext[0];
|
||||||
tbToolbarButtons[0].iBitmap = 0;
|
tbToolbarButtons[0].iBitmap = 0;
|
||||||
SendMessage(hAdvancedDeviceToolBar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hUpImageList);
|
SendMessage(hAdvancedDeviceToolBar, TB_SETIMAGELIST, 0, (LPARAM)hUpImageList);
|
||||||
SendMessage(hAdvancedDeviceToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
SendMessage(hAdvancedDeviceToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
||||||
SendMessage(hAdvancedDeviceToolBar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbToolbarButtons);
|
SendMessage(hAdvancedDeviceToolBar, TB_ADDBUTTONS, 1, (LPARAM)&tbToolbarButtons);
|
||||||
// So, it turns out that, if you attempt to rely on TB_AUTOSIZE, you end up in a world of pain trying
|
|
||||||
// to figure why Windows fails to consistently report the width of your toolbar button depending on
|
|
||||||
// what prior system calls have been issued.
|
|
||||||
// If you don't want to lose your sanity, just set the width to max you can and ignore TB_AUTOSIZE.
|
|
||||||
GetWindowRect(GetDlgItem(hDlg, IDC_ADVANCED_DEVICE_SETTINGS), &rc);
|
GetWindowRect(GetDlgItem(hDlg, IDC_ADVANCED_DEVICE_SETTINGS), &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
SetWindowPos(hAdvancedDeviceToolBar, HWND_TOP, rc.left + toolbar_fudge, rc.top, rc.right, rc.bottom, 0);
|
SetWindowPos(hAdvancedDeviceToolBar, HWND_TOP, rc.left + toolbar_fudge, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0);
|
||||||
|
|
||||||
GetWindowTextW(GetDlgItem(hDlg, IDC_ADVANCED_FORMAT_OPTIONS), wtbtext[1], ARRAYSIZE(wtbtext[1]));
|
GetWindowTextW(GetDlgItem(hDlg, IDC_ADVANCED_FORMAT_OPTIONS), wtbtext[1], ARRAYSIZE(wtbtext[1]));
|
||||||
hAdvancedFormatToolBar = CreateWindowExW(0, TOOLBARCLASSNAME, NULL,
|
hAdvancedFormatToolBar = CreateWindowExW(0, TOOLBARCLASSNAME, NULL,
|
||||||
|
@ -1984,17 +1970,47 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
SetWindowPos(hAdvancedFormatToolBar, HWND_TOP, rc.left + toolbar_fudge, rc.top, rc.right, rc.bottom, 0);
|
SetWindowPos(hAdvancedFormatToolBar, HWND_TOP, rc.left + toolbar_fudge, rc.top, rc.right, rc.bottom, 0);
|
||||||
|
|
||||||
// Create the language toolbar
|
// Create the language toolbar
|
||||||
hLangToolbar = CreateWindowExW(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_TABSTOP | TBSTYLE_TRANSPARENT | CCS_NOPARENTALIGN |
|
hMultiToolbar = CreateWindowExW(0, TOOLBARCLASSNAME, NULL,
|
||||||
CCS_NORESIZE | CCS_NODIVIDER, 0, 0, 0, 0, hMainDialog, NULL, hMainInstance, NULL);
|
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NOPARENTALIGN | CCS_NODIVIDER | TBSTYLE_FLAT | TBSTYLE_LIST | TBSTYLE_TRANSPARENT | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE,
|
||||||
hToolbarImageList = ImageList_Create(i16, i16, ILC_COLOR32, 1, 0);
|
// WS_CHILD | WS_TABSTOP | TBSTYLE_TRANSPARENT | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_NODIVIDER,
|
||||||
|
0, 0, 0, 0, hMainDialog, (HMENU)IDC_MULTI_TOOLBAR, hMainInstance, NULL);
|
||||||
|
hToolbarImageList = ImageList_Create(i16, i16, ILC_COLOR32, 4, 0);
|
||||||
|
ImageList_AddIcon(hToolbarImageList, hIconAbout);
|
||||||
|
ImageList_AddIcon(hToolbarImageList, hIconSettings);
|
||||||
ImageList_AddIcon(hToolbarImageList, hIconLang);
|
ImageList_AddIcon(hToolbarImageList, hIconLang);
|
||||||
SendMessage(hLangToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hToolbarImageList);
|
ImageList_AddIcon(hToolbarImageList, hIconLog);
|
||||||
SendMessage(hLangToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
SendMessage(hMultiToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hToolbarImageList);
|
||||||
memset(tbToolbarButtons, 0, sizeof(TBBUTTON));
|
SendMessage(hMultiToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
||||||
tbToolbarButtons[0].idCommand = IDC_LANG;
|
memset(tbToolbarButtons, 0, sizeof(TBBUTTON) * ARRAYSIZE(tbToolbarButtons));
|
||||||
tbToolbarButtons[0].fsStyle = BTNS_WHOLEDROPDOWN;
|
tbToolbarButtons[0].idCommand = IDC_ABOUT;
|
||||||
|
tbToolbarButtons[0].fsStyle = BTNS_AUTOSIZE;
|
||||||
tbToolbarButtons[0].fsState = TBSTATE_ENABLED;
|
tbToolbarButtons[0].fsState = TBSTATE_ENABLED;
|
||||||
SendMessage(hLangToolbar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbToolbarButtons); // Add just the 1 button
|
tbToolbarButtons[0].iBitmap = 0;
|
||||||
|
tbToolbarButtons[1].fsStyle = BTNS_AUTOSIZE;
|
||||||
|
tbToolbarButtons[1].fsState = TBSTATE_INDETERMINATE;
|
||||||
|
tbToolbarButtons[1].iBitmap = I_IMAGENONE;
|
||||||
|
tbToolbarButtons[1].iString = (INT_PTR)L" ";
|
||||||
|
tbToolbarButtons[2].idCommand = IDC_SETTINGS;
|
||||||
|
tbToolbarButtons[2].fsStyle = BTNS_AUTOSIZE;
|
||||||
|
tbToolbarButtons[2].fsState = TBSTATE_ENABLED;
|
||||||
|
tbToolbarButtons[2].iBitmap = 1;
|
||||||
|
tbToolbarButtons[3].fsStyle = BTNS_AUTOSIZE;
|
||||||
|
tbToolbarButtons[3].fsState = TBSTATE_INDETERMINATE;
|
||||||
|
tbToolbarButtons[3].iBitmap = I_IMAGENONE;
|
||||||
|
tbToolbarButtons[3].iString = (INT_PTR)L" ";
|
||||||
|
tbToolbarButtons[4].idCommand = IDC_LANG;
|
||||||
|
tbToolbarButtons[4].fsStyle = BTNS_AUTOSIZE;
|
||||||
|
tbToolbarButtons[4].fsState = TBSTATE_ENABLED;
|
||||||
|
tbToolbarButtons[4].iBitmap = 2;
|
||||||
|
tbToolbarButtons[5].fsStyle = BTNS_AUTOSIZE;
|
||||||
|
tbToolbarButtons[5].fsState = TBSTATE_INDETERMINATE;
|
||||||
|
tbToolbarButtons[5].iBitmap = I_IMAGENONE;
|
||||||
|
tbToolbarButtons[5].iString = (INT_PTR)L" ";
|
||||||
|
tbToolbarButtons[6].idCommand = IDC_LOG;
|
||||||
|
tbToolbarButtons[6].fsStyle = BTNS_AUTOSIZE;
|
||||||
|
tbToolbarButtons[6].fsState = TBSTATE_ENABLED;
|
||||||
|
tbToolbarButtons[6].iBitmap = 3;
|
||||||
|
SendMessage(hMultiToolbar, TB_ADDBUTTONS, (WPARAM)7, (LPARAM)&tbToolbarButtons);
|
||||||
|
|
||||||
// Set the icons on the the buttons
|
// Set the icons on the the buttons
|
||||||
bi_save.himl = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0);
|
bi_save.himl = ImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0);
|
||||||
|
@ -2014,23 +2030,138 @@ static void CreateAdditionalControls(HWND hDlg)
|
||||||
SendMessage(GetDlgItem(hDlg, IDC_SAVE), BCM_SETIMAGELIST, 0, (LPARAM)&bi_save);
|
SendMessage(GetDlgItem(hDlg, IDC_SAVE), BCM_SETIMAGELIST, 0, (LPARAM)&bi_save);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int GetControlWidth(HWND hDlg, int id)
|
static inline int GetTextWidth(HWND hDlg, int id)
|
||||||
{
|
{
|
||||||
return GetTextSize(GetDlgItem(hDlg, id)).cx;
|
return GetTextSize(GetDlgItem(hDlg, id), NULL).cx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: START and right half-dropdowns should be aligned which means
|
||||||
|
// half dropdown size should set to 2 x button size + spacing
|
||||||
|
static void SetButtonWidth(HWND hDlg)
|
||||||
|
{
|
||||||
|
RECT rc;
|
||||||
|
// TODO: width should be set according to DPI
|
||||||
|
int i, width = 00, control[3] = { IDC_SELECT_IMAGE, IDC_START, IDCANCEL };
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAYSIZE(control); i++)
|
||||||
|
width = max(GetTextWidth(hDlg, control[i]), width);
|
||||||
|
// The 'CLOSE' button is also be used to display 'CANCEL' => measure that too
|
||||||
|
width = max(width, GetTextSize(GetDlgItem(hDlg, IDCANCEL), lmprintf(MSG_007)).cx);
|
||||||
|
// Use cb_width for how much border we should add
|
||||||
|
width += cb_width;
|
||||||
|
uprintf("MAX BUTTON = %d", width);
|
||||||
|
for (i = 0; i < ARRAYSIZE(control); i++) {
|
||||||
|
GetWindowRect(GetDlgItem(hDlg, control[i]), &rc);
|
||||||
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
SetWindowPos(GetDlgItem(hDlg, control[i]), HWND_TOP, rc.left, rc.top, width, rc.bottom - rc.top, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The following goes over the data that gets populated into the half-width dropdowns
|
||||||
|
// (Partition scheme, Target System, Disk ID, File system, Cluster size, Nb passes)
|
||||||
|
// to figure out the minimum width we should allocate.
|
||||||
|
static void GetHalfDropwdownWidth(HWND hDlg)
|
||||||
|
{
|
||||||
|
RECT rc;
|
||||||
|
unsigned int i, j, msg_id;
|
||||||
|
char tmp[256];
|
||||||
|
|
||||||
|
// Initialize half width to the UI's default size
|
||||||
|
// TODO: verify that this works if we just resized from a language with larger width?
|
||||||
|
GetWindowRect(GetDlgItem(hDlg, IDC_PARTITION_TYPE), &rc);
|
||||||
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
half_width = rc.right - rc.left - cb_width;
|
||||||
|
|
||||||
|
// "Super Floppy Disk" is the longuest entry in the Partition Scheme dropdown
|
||||||
|
half_width = max(half_width, GetTextSize(GetDlgItem(hDlg, IDC_PARTITION_TYPE), (char*)sfd_name).cx);
|
||||||
|
|
||||||
|
// This is basically the same as SetClusterSizeLabels() except we're adding (Default) to each entry
|
||||||
|
for (i = 512, j = 1, msg_id = MSG_026; j<MAX_CLUSTER_SIZES; i <<= 1, j++) {
|
||||||
|
if (i > 8192) {
|
||||||
|
i /= 1024;
|
||||||
|
msg_id++;
|
||||||
|
}
|
||||||
|
safe_sprintf(tmp, 64, "%d %s", i, lmprintf(msg_id));
|
||||||
|
half_width = max(half_width, GetTextSize(GetDlgItem(hDlg, IDC_CLUSTERSIZE), lmprintf(MSG_030, tmp)).cx);
|
||||||
|
}
|
||||||
|
// We don't go over file systems, because none of them will be longer than "Super Floppy Disk"
|
||||||
|
// We do however go over the BIOS vs UEFI entries, as some of these are translated
|
||||||
|
for (msg_id = MSG_031; msg_id <= MSG_033; msg_id++)
|
||||||
|
half_width = max(half_width, GetTextSize(GetDlgItem(hDlg, IDC_TARGET_SYSTEM), lmprintf(msg_id)).cx);
|
||||||
|
|
||||||
|
// Just in case, we also do the number of passes
|
||||||
|
for (i = 1; i <= 4; i++)
|
||||||
|
half_width = max(half_width, GetTextSize(GetDlgItem(hDlg, IDC_TARGET_SYSTEM),
|
||||||
|
lmprintf((i == 1) ? MSG_034 : MSG_035, i)).cx);
|
||||||
|
|
||||||
|
// Finally, we must ensure that we'll have enough space for the 2 checkbox controls
|
||||||
|
// that end up with a half dropdown
|
||||||
|
half_width = max(half_width, GetTextWidth(hDlg, IDC_RUFUS_MBR) - sep_width);
|
||||||
|
half_width = max(half_width, GetTextWidth(hDlg, IDC_BADBLOCKS) - sep_width);
|
||||||
|
|
||||||
|
// Add the width of a blank checkbox
|
||||||
|
half_width += cb_width;
|
||||||
|
|
||||||
|
uprintf("half_width = %d", half_width);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* | full_width |
|
||||||
|
* 8 ->|<- 96 ->|<- 24 ->|<- 96 ->|<- 8
|
||||||
|
* margin_width | half_width | sep_width | half_width | margin_width
|
||||||
|
*/
|
||||||
|
static void GetFullWidth(HWND hDlg)
|
||||||
|
{
|
||||||
|
RECT rc;
|
||||||
|
int i, control[] = { IDC_LIST_USB_HDD, IDC_OLD_BIOS_FIXES, IDC_QUICKFORMAT, IDC_EXTENDED_LABEL };
|
||||||
|
|
||||||
|
// Initialize full width to the UI's default size
|
||||||
|
GetWindowRect(GetDlgItem(hDlg, IDC_IMAGE_OPTION), &rc);
|
||||||
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
full_width = rc.right - rc.left - cb_width;
|
||||||
|
|
||||||
|
// Initialize the min width according to the longest message from the Boot Type drowpdown
|
||||||
|
full_width = max(full_width, GetTextSize(GetDlgItem(hDlg, IDC_BOOTTYPE), lmprintf(MSG_304, lmprintf(MSG_303))).cx);
|
||||||
|
|
||||||
|
// Go through the Image Options for Windows To Go
|
||||||
|
full_width = max(full_width, GetTextSize(GetDlgItem(hDlg, IDC_IMAGE_OPTION), lmprintf(MSG_301)).cx);
|
||||||
|
full_width = max(full_width, GetTextSize(GetDlgItem(hDlg, IDC_IMAGE_OPTION), lmprintf(MSG_302)).cx);
|
||||||
|
|
||||||
|
|
||||||
|
// Now deal with full length checkbox lines
|
||||||
|
for (i=0; i<ARRAYSIZE(control); i++)
|
||||||
|
full_width = max(full_width, GetTextWidth(hDlg, control[i]));
|
||||||
|
|
||||||
|
// All of the above is for text only, so we need to add cb space
|
||||||
|
full_width += cb_width;
|
||||||
|
|
||||||
|
// Our min also needs to be longer than 2 half length dropdowns + spacer
|
||||||
|
full_width = max(full_width, 2 * half_width + sep_width);
|
||||||
|
|
||||||
|
// TODO: Also pick a few choice messages from info/status
|
||||||
|
uprintf("full_width = %d", full_width);
|
||||||
|
|
||||||
|
//GetWindowRect(GetDlgItem(hDlg, IDC_RUFUS_MBR), &rc);
|
||||||
|
//MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
//full_width += rc.left;
|
||||||
|
//uprintf("rc.left = %d", rc.left);
|
||||||
|
|
||||||
|
// TESTING
|
||||||
|
GetWindowRect(GetDlgItem(hDlg, IDC_DISK_ID), &rc);
|
||||||
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
SetWindowPos(GetDlgItem(hDlg, IDC_DISK_ID), NULL, margin_width + half_width + sep_width, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// https://stackoverflow.com/a/20926332/1069307
|
// https://stackoverflow.com/a/20926332/1069307
|
||||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/bb226818.aspx
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/bb226818.aspx
|
||||||
static int GetMaxTextWidth(HWND hDlg)
|
static void GetEmptyControlsWidth(HWND hDlg)
|
||||||
{
|
{
|
||||||
int checkbox_internal_spacing = 12;
|
int checkbox_internal_spacing = 12;
|
||||||
// const int dluCheckboxHeight = 10; // 10 vertical dlus
|
// const int dluCheckboxHeight = 10; // 10 vertical dlus
|
||||||
RECT rc = { 0, 0, 4, 8 };
|
RECT rc = { 0, 0, 4, 8 };
|
||||||
SIZE bu;
|
SIZE bu;
|
||||||
|
|
||||||
// cb = checkbox, dd = dropdown, ib = image button
|
|
||||||
int width, cb_width, dd_width, ib_width, max_width = 100;
|
|
||||||
int top_half_start_x, bottom_half_start_x;
|
int top_half_start_x, bottom_half_start_x;
|
||||||
|
|
||||||
// Compute base unit sizes since GetDialogBaseUnits() returns garbage data.
|
// Compute base unit sizes since GetDialogBaseUnits() returns garbage data.
|
||||||
|
@ -2038,21 +2169,22 @@ static int GetMaxTextWidth(HWND hDlg)
|
||||||
MapDialogRect(hDlg, &rc);
|
MapDialogRect(hDlg, &rc);
|
||||||
bu.cx = rc.right;
|
bu.cx = rc.right;
|
||||||
bu.cy = rc.bottom;
|
bu.cy = rc.bottom;
|
||||||
uprintf("bu.cx = %d, bu.cy = %d", bu.cx, bu.cy);
|
// uprintf("bu.cx = %d, bu.cy = %d", bu.cx, bu.cy);
|
||||||
|
|
||||||
GetWindowRect(hSelectImage, &rc);
|
//GetWindowRect(hSelectImage, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
//MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
ib_width = rc.right - rc.left;
|
//ib_width = rc.right - rc.left;
|
||||||
uprintf("button.width = %d", ib_width);
|
//uprintf("button.width = %d", ib_width);
|
||||||
|
|
||||||
// TODO: figure out the specifics of each Windows version
|
// TODO: figure out the specifics of each Windows version
|
||||||
if (nWindowsVersion == WINDOWS_10)
|
if (nWindowsVersion == WINDOWS_10)
|
||||||
checkbox_internal_spacing = 10;
|
checkbox_internal_spacing = 10;
|
||||||
|
|
||||||
cb_width = MulDiv(checkbox_internal_spacing, bu.cx, 4);
|
cb_width = MulDiv(checkbox_internal_spacing, bu.cx, 4);
|
||||||
|
uprintf("BLANK CB WIDTH = %d", cb_width);
|
||||||
// Integer checkboxHeight = MulDiv(10, sz.cy, 8);
|
// Integer checkboxHeight = MulDiv(10, sz.cy, 8);
|
||||||
|
|
||||||
// Use Windows To Go checkbox and NB passed dropdown to
|
// Use Windows To Go checkbox and NB passes dropdown to
|
||||||
// compute the size of a blank checkbox and dropdown
|
// compute the size of a blank checkbox and dropdown
|
||||||
GetWindowRect(GetDlgItem(hDlg, IDC_WINDOWS_TO_GO), &rc);
|
GetWindowRect(GetDlgItem(hDlg, IDC_WINDOWS_TO_GO), &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
@ -2063,49 +2195,57 @@ static int GetMaxTextWidth(HWND hDlg)
|
||||||
GetWindowRect(GetDlgItem(hDlg, IDC_NBPASSES), &rc);
|
GetWindowRect(GetDlgItem(hDlg, IDC_NBPASSES), &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
dd_width = rc.right - rc.left;
|
dd_width = rc.right - rc.left;
|
||||||
|
uprintf("BLANK DD WIDTH = %d", dd_width);
|
||||||
|
|
||||||
// width = GetControlWidth(hDlg, IDS_PARTITION_TYPE_TXT);
|
// Also get the spacing width between half-length dropdowns
|
||||||
// max_text_width = max(max_text_width, width);
|
GetWindowRect(GetDlgItem(hDlg, IDC_TARGET_SYSTEM), &rc);
|
||||||
// uprintf("mw = %d", max_text_width);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
width = GetControlWidth(hDlg, IDC_OLD_BIOS_FIXES);
|
sep_width = rc.left;
|
||||||
max_width = max(max_width, width);
|
GetWindowRect(GetDlgItem(hDlg, IDC_PARTITION_TYPE), &rc);
|
||||||
uprintf("mw = %d", max_width);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
sep_width -= rc.right;
|
||||||
|
margin_width = rc.left;
|
||||||
|
uprintf("SEP WIDTH = %d, MARGIN WIDTH = %d", sep_width, rc.left);
|
||||||
|
|
||||||
return bottom_half_start_x + cb_width + max_width;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PositionControls(HWND hDlg)
|
static void SetSectionHeaders(HWND hDlg)
|
||||||
{
|
{
|
||||||
RECT rc, rcDeviceList, rcBootType, rcSelectedImage;
|
RECT rc;
|
||||||
HWND hCtrl;
|
HWND hCtrl;
|
||||||
SIZE sz;
|
SIZE sz;
|
||||||
HFONT hf;
|
HFONT hf;
|
||||||
int max_text_width = GetMaxTextWidth(hDlg);
|
wchar_t wtmp[128];
|
||||||
// TODO: dynamicize this
|
int i, control[3] = { IDS_DEVICE_SETTINGS_TXT, IDS_FORMAT_OPTIONS_TXT, IDS_STATUS_TXT };
|
||||||
int dialog_width = 770;
|
|
||||||
int dropdown_height, button_fudge = 2;
|
|
||||||
|
|
||||||
// Set the section header fonts and resize the static controls accordingly
|
// Set the section header fonts and resize the static controls accordingly
|
||||||
hf = CreateFontA(48, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
hf = CreateFontA(48, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
||||||
0, 0, PROOF_QUALITY, 0, "Segoe UI");
|
0, 0, PROOF_QUALITY, 0, "Segoe UI");
|
||||||
SendDlgItemMessageA(hDlg, IDS_DEVICE_SETTINGS_TXT, WM_SETFONT, (WPARAM)hf, TRUE);
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_DEVICE_SETTINGS_TXT);
|
for (i = 0; i < ARRAYSIZE(control); i++) {
|
||||||
|
SendDlgItemMessageA(hDlg, control[i], WM_SETFONT, (WPARAM)hf, TRUE);
|
||||||
|
hCtrl = GetDlgItem(hDlg, control[i]);
|
||||||
|
memset(wtmp, 0, sizeof(wtmp));
|
||||||
|
GetWindowTextW(hCtrl, wtmp, ARRAYSIZE(wtmp));
|
||||||
|
wtmp[wcslen(wtmp)] = ' ';
|
||||||
|
SetWindowTextW(hCtrl, wtmp);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
sz = GetTextSize(hCtrl);
|
sz = GetTextSize(hCtrl, NULL);
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rc.top, sz.cx, sz.cy, SWP_NOZORDER);
|
|
||||||
SendDlgItemMessageA(hDlg, IDS_FORMAT_OPTIONS_TXT, WM_SETFONT, (WPARAM)hf, TRUE);
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_FORMAT_OPTIONS_TXT);
|
|
||||||
GetWindowRect(hCtrl, &rc);
|
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
|
||||||
sz = GetTextSize(hCtrl);
|
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rc.top, sz.cx, sz.cy, SWP_NOZORDER);
|
|
||||||
SendDlgItemMessageA(hDlg, IDS_STATUS_TXT, WM_SETFONT, (WPARAM)hf, TRUE);
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_STATUS_TXT);
|
|
||||||
GetWindowRect(hCtrl, &rc);
|
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
|
||||||
sz = GetTextSize(hCtrl);
|
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rc.top, sz.cx, sz.cy, SWP_NOZORDER);
|
SetWindowPos(hCtrl, NULL, rc.left, rc.top, sz.cx, sz.cy, SWP_NOZORDER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PositionControls(HWND hDlg)
|
||||||
|
{
|
||||||
|
RECT rc, rcBootType, rcSelectedImage;
|
||||||
|
HWND hCtrl;
|
||||||
|
SIZE sz;
|
||||||
|
// TODO: dynamicize button_fudge
|
||||||
|
int dropdown_height, button_fudge = 2;
|
||||||
|
|
||||||
|
GetHalfDropwdownWidth(hDlg);
|
||||||
|
GetFullWidth(hDlg);
|
||||||
|
|
||||||
// Resize the height of the label and progress bar to the height of standard dropdowns
|
// Resize the height of the label and progress bar to the height of standard dropdowns
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_DEVICE);
|
hCtrl = GetDlgItem(hDlg, IDC_DEVICE);
|
||||||
|
@ -2153,42 +2293,25 @@ static void PositionControls(HWND hDlg)
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_DEVICE_SETTINGS_TXT);
|
hCtrl = GetDlgItem(hDlg, IDS_DEVICE_SETTINGS_TXT);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
sz = GetTextSize(hCtrl);
|
sz = GetTextSize(hCtrl, NULL);
|
||||||
device_vpos = rc.top + 2 * sz.cy / 3;
|
device_vpos = rc.top + 2 * sz.cy / 3;
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_FORMAT_OPTIONS_TXT);
|
hCtrl = GetDlgItem(hDlg, IDS_FORMAT_OPTIONS_TXT);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
sz = GetTextSize(hCtrl);
|
sz = GetTextSize(hCtrl, NULL);
|
||||||
format_vpos = rc.top + 2 * sz.cy / 3;
|
format_vpos = rc.top + 2 * sz.cy / 3;
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_STATUS_TXT);
|
hCtrl = GetDlgItem(hDlg, IDS_STATUS_TXT);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
sz = GetTextSize(hCtrl);
|
sz = GetTextSize(hCtrl, NULL);
|
||||||
status_vpos = rc.top + 2 * sz.cy / 3;
|
status_vpos = rc.top + 2 * sz.cy / 3;
|
||||||
|
|
||||||
// Make the toolbar window just big enough to hold the button
|
// Seriously, who designed this bullshit API call where you pass a SIZE
|
||||||
// Set the top margin to 4 DIPs and the right margin so that it's aligned with the Device List Combobox
|
// struct but can only retreive one of cx or cy at a time?!?
|
||||||
SendMessage(hLangToolbar, TB_GETRECT, IDC_LANG, (LPARAM)&rc);
|
SendMessage(hMultiToolbar, TB_GETIDEALSIZE, (WPARAM)FALSE, (LPARAM)&sz);
|
||||||
GetWindowRect(hDeviceList, &rcDeviceList);
|
GetWindowRect(GetDlgItem(hDlg, IDC_ABOUT), &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rcDeviceList, 2);
|
|
||||||
// TODO:
|
|
||||||
SetWindowPos(hLangToolbar, HWND_TOP, dialog_width - rc.right,
|
|
||||||
(int)(4.0f * fScale), rc.right, rc.bottom, 0);
|
|
||||||
ShowWindow(hLangToolbar, SW_SHOWNORMAL);
|
|
||||||
|
|
||||||
// TODO: TEST TEST TEST
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_DISK_ID);
|
|
||||||
GetWindowRect(hCtrl, &rc);
|
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
SetWindowPos(hCtrl, NULL, max_text_width, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0);
|
SetWindowPos(hMultiToolbar, HWND_TOP, rc.left, rc.top, sz.cx, dropdown_height, 0);
|
||||||
|
|
||||||
// Reposition and resize the Advanced button
|
|
||||||
//hCtrl = GetDlgItem(hDlg, IDS_FORMAT_OPTIONS_TXT);
|
|
||||||
//GetWindowRect(hCtrl, &rc);
|
|
||||||
//MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
|
||||||
//// TODO: remove hardcoded shift
|
|
||||||
//SetWindowPos(GetDlgItem(hDlg, IDC_ADVANCED), hCtrl, dialog_width - 40,
|
|
||||||
// rc.top, i16 + (int)(4.0f * fScale), i16 / 2 + (int)(8.0f * fScale), 0);
|
|
||||||
|
|
||||||
// Reposition and resize the SELECT and # buttons
|
// Reposition and resize the SELECT and # buttons
|
||||||
GetWindowRect(hBootType, &rcBootType);
|
GetWindowRect(hBootType, &rcBootType);
|
||||||
|
@ -2209,28 +2332,15 @@ static void PositionControls(HWND hDlg)
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rc.top,
|
SetWindowPos(hCtrl, NULL, rc.left, rc.top,
|
||||||
rc.right - rc.left, dropdown_height + button_fudge, SWP_NOZORDER);
|
rc.right - rc.left, dropdown_height + button_fudge, SWP_NOZORDER);
|
||||||
|
|
||||||
// TODO: remove this once we use icons
|
// TODO: Reposition
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_ABOUT);
|
hCtrl = GetDlgItem(hDlg, IDC_DEVICE);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rc.top,
|
sz.cy = rc.top;
|
||||||
rc.right - rc.left, dropdown_height + button_fudge, SWP_NOZORDER);
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_LOG);
|
|
||||||
GetWindowRect(hCtrl, &rc);
|
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rc.top,
|
|
||||||
rc.right - rc.left, dropdown_height + button_fudge, SWP_NOZORDER);
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_TEST);
|
|
||||||
GetWindowRect(hCtrl, &rc);
|
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rc.top,
|
|
||||||
rc.right - rc.left, dropdown_height + button_fudge, SWP_NOZORDER);
|
|
||||||
|
|
||||||
// TODO: Use a SAVE label and resize
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_SAVE);
|
hCtrl = GetDlgItem(hDlg, IDC_SAVE);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
SetWindowPos(hCtrl, NULL, rc.left, rcDeviceList.top - 1,
|
SetWindowPos(hCtrl, NULL, rc.left, sz.cy - 1,
|
||||||
rc.right - rc.left, dropdown_height + button_fudge, SWP_NOZORDER);
|
rc.right - rc.left, dropdown_height + button_fudge, SWP_NOZORDER);
|
||||||
|
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_BOOTTYPE);
|
hCtrl = GetDlgItem(hDlg, IDC_BOOTTYPE);
|
||||||
|
@ -2288,6 +2398,8 @@ static void InitDialog(HWND hDlg)
|
||||||
hDiskID = GetDlgItem(hDlg, IDC_DISK_ID);
|
hDiskID = GetDlgItem(hDlg, IDC_DISK_ID);
|
||||||
hStart = GetDlgItem(hDlg, IDC_START);
|
hStart = GetDlgItem(hDlg, IDC_START);
|
||||||
|
|
||||||
|
GetEmptyControlsWidth(hDlg);
|
||||||
|
|
||||||
// TODO: Don't think this is used
|
// TODO: Don't think this is used
|
||||||
// Create the font and brush for the Info edit box
|
// Create the font and brush for the Info edit box
|
||||||
hInfoFont = CreateFontA(lfHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
hInfoFont = CreateFontA(lfHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
||||||
|
@ -2382,6 +2494,8 @@ static void InitDialog(HWND hDlg)
|
||||||
CheckDlgButton(hDlg, IDC_EXTENDED_LABEL, BST_CHECKED);
|
CheckDlgButton(hDlg, IDC_EXTENDED_LABEL, BST_CHECKED);
|
||||||
|
|
||||||
CreateAdditionalControls(hDlg);
|
CreateAdditionalControls(hDlg);
|
||||||
|
SetSectionHeaders(hDlg);
|
||||||
|
SetButtonWidth(hDlg);
|
||||||
PositionControls(hDlg);
|
PositionControls(hDlg);
|
||||||
|
|
||||||
// Subclass the progress bar so that we can write on it
|
// Subclass the progress bar so that we can write on it
|
||||||
|
@ -2407,7 +2521,7 @@ static void InitDialog(HWND hDlg)
|
||||||
// CreateTooltip(GetDlgItem(hDlg, IDC_WINDOWS_INSTALL), lmprintf(MSG_199), -1);
|
// CreateTooltip(GetDlgItem(hDlg, IDC_WINDOWS_INSTALL), lmprintf(MSG_199), -1);
|
||||||
// CreateTooltip(GetDlgItem(hDlg, IDC_WINDOWS_TO_GO), lmprintf(MSG_200), -1);
|
// CreateTooltip(GetDlgItem(hDlg, IDC_WINDOWS_TO_GO), lmprintf(MSG_200), -1);
|
||||||
CreateTooltip(GetDlgItem(hDlg, IDC_HASH), lmprintf(MSG_272), -1);
|
CreateTooltip(GetDlgItem(hDlg, IDC_HASH), lmprintf(MSG_272), -1);
|
||||||
CreateTooltip(hLangToolbar, lmprintf(MSG_273), -1);
|
CreateTooltip(hMultiToolbar, lmprintf(MSG_273), -1);
|
||||||
|
|
||||||
// Set a label for the Advanced Mode and Select Image button for screen readers
|
// Set a label for the Advanced Mode and Select Image button for screen readers
|
||||||
// SetWindowTextU(GetDlgItem(hDlg, IDC_ADVANCED), lmprintf(MSG_160));
|
// SetWindowTextU(GetDlgItem(hDlg, IDC_ADVANCED), lmprintf(MSG_160));
|
||||||
|
@ -2678,11 +2792,10 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
DRAWITEMSTRUCT* pDI;
|
DRAWITEMSTRUCT* pDI;
|
||||||
HDROP droppedFileInfo;
|
HDROP droppedFileInfo;
|
||||||
POINT Point;
|
POINT Point;
|
||||||
RECT DialogRect, DesktopRect, LangToolbarRect;
|
RECT rc, DialogRect, DesktopRect;
|
||||||
LONG progress_style;
|
LONG progress_style;
|
||||||
HDC hDC;
|
HDC hDC;
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
LPNMTOOLBAR lpnmtb;
|
|
||||||
int nDeviceIndex, i, nWidth, nHeight, nb_devices, selected_language, offset;
|
int nDeviceIndex, i, nWidth, nHeight, nb_devices, selected_language, offset;
|
||||||
char tmp[128];
|
char tmp[128];
|
||||||
wchar_t* wbuffer = NULL;
|
wchar_t* wbuffer = NULL;
|
||||||
|
@ -2909,6 +3022,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
SetToGo();
|
SetToGo();
|
||||||
ToggleHash();
|
ToggleHash();
|
||||||
SetProposedLabel(ComboBox_GetCurSel(hDeviceList));
|
SetProposedLabel(ComboBox_GetCurSel(hDeviceList));
|
||||||
|
PopulateProperties(ComboBox_GetCurSel(hDeviceList));
|
||||||
// TODO: Might wanna do this in PopulateProperties
|
// TODO: Might wanna do this in PopulateProperties
|
||||||
tt = (int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme));
|
tt = (int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme));
|
||||||
pt = (int)ComboBox_GetItemData(hTargetSystem, ComboBox_GetCurSel(hTargetSystem));
|
pt = (int)ComboBox_GetItemData(hTargetSystem, ComboBox_GetCurSel(hTargetSystem));
|
||||||
|
@ -3058,6 +3172,13 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
SendMessage(hDlg, UM_MEDIA_CHANGE, 0, 0);
|
SendMessage(hDlg, UM_MEDIA_CHANGE, 0, 0);
|
||||||
EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE);
|
EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE);
|
||||||
break;
|
break;
|
||||||
|
case IDC_LANG:
|
||||||
|
// Show the language menu such that it doesn't overlap the button
|
||||||
|
// by using the the next button (LOG) as our starting point.
|
||||||
|
SendMessage(hMultiToolbar, TB_GETRECT, (WPARAM)IDC_LOG, (LPARAM)&rc);
|
||||||
|
MapWindowPoints(hDlg, NULL, (POINT*)&rc, 2);
|
||||||
|
ShowLanguageMenu(rc);
|
||||||
|
break;
|
||||||
case IDC_HASH:
|
case IDC_HASH:
|
||||||
if ((format_thid == NULL) && (image_path != NULL)) {
|
if ((format_thid == NULL) && (image_path != NULL)) {
|
||||||
FormatStatus = 0;
|
FormatStatus = 0;
|
||||||
|
@ -3215,26 +3336,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_NOTIFY:
|
|
||||||
switch (((LPNMHDR)lParam)->code) {
|
|
||||||
case TBN_DROPDOWN:
|
|
||||||
lpnmtb = (LPNMTOOLBAR)lParam;
|
|
||||||
|
|
||||||
// We only care about the language button on the language toolbar
|
|
||||||
if (lpnmtb->hdr.hwndFrom == hLangToolbar
|
|
||||||
&& lpnmtb->iItem == IDC_LANG) {
|
|
||||||
// Get toolbar button rect and map it to actual screen pixels
|
|
||||||
SendMessage(lpnmtb->hdr.hwndFrom, TB_GETRECT, (WPARAM)lpnmtb->iItem, (LPARAM)&LangToolbarRect);
|
|
||||||
MapWindowPoints(lpnmtb->hdr.hwndFrom, NULL, (POINT*)&LangToolbarRect, 2);
|
|
||||||
|
|
||||||
// Show the language menu such that it doesn't overlap the button
|
|
||||||
ShowLanguageMenu(LangToolbarRect);
|
|
||||||
return (INT_PTR)TBDDRET_DEFAULT;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_DROPFILES:
|
case WM_DROPFILES:
|
||||||
droppedFileInfo = (HDROP)wParam;
|
droppedFileInfo = (HDROP)wParam;
|
||||||
wbuffer = calloc(MAX_PATH, sizeof(wchar_t));
|
wbuffer = calloc(MAX_PATH, sizeof(wchar_t));
|
||||||
|
@ -3807,11 +3908,11 @@ relaunch:
|
||||||
ResetDevice(index);
|
ResetDevice(index);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Alt-D => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
|
// Alt-D => Delete the 'rufus_files' subdirectory
|
||||||
// This key is used to disable Windows popup messages when an USB drive is plugged in.
|
|
||||||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) {
|
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) {
|
||||||
PrintStatus(2000, MSG_255);
|
static_sprintf(tmp_path, "%s\\%s", app_dir, FILES_DIR);
|
||||||
existing_key = FALSE;
|
PrintStatus(2000, MSG_264, tmp_path);
|
||||||
|
SHDeleteDirectoryExU(NULL, tmp_path, FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Alt-E => Enhanced installation mode (allow dual UEFI/BIOS mode and FAT32 for Windows)
|
// Alt-E => Enhanced installation mode (allow dual UEFI/BIOS mode and FAT32 for Windows)
|
||||||
|
@ -3932,11 +4033,11 @@ relaunch:
|
||||||
GetDevices(0);
|
GetDevices(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Alt-X => Delete the 'rufus_files' subdirectory
|
// Alt-X => Delete the NoDriveTypeAutorun key on exit (useful if the app crashed)
|
||||||
|
// This key is used to disable Windows popup messages when an USB drive is plugged in.
|
||||||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'X')) {
|
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'X')) {
|
||||||
static_sprintf(tmp_path, "%s\\%s", app_dir, FILES_DIR);
|
PrintStatus(2000, MSG_255);
|
||||||
PrintStatus(2000, MSG_264, tmp_path);
|
existing_key = FALSE;
|
||||||
SHDeleteDirectoryExU(NULL, tmp_path, FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Alt Y => Force the update check to be successful
|
// Alt Y => Force the update check to be successful
|
||||||
|
|
|
@ -441,7 +441,7 @@ extern void DestroyAllTooltips(void);
|
||||||
extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...);
|
extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...);
|
||||||
extern int SelectionDialog(char* title, char* message, char** choices, int size);
|
extern int SelectionDialog(char* title, char* message, char** choices, int size);
|
||||||
extern void ListDialog(char* title, char* message, char** items, int size);
|
extern void ListDialog(char* title, char* message, char** items, int size);
|
||||||
extern SIZE GetTextSize(HWND hCtrl);
|
extern SIZE GetTextSize(HWND hCtrl, char* txt);
|
||||||
extern BOOL ExtractDOS(const char* path);
|
extern BOOL ExtractDOS(const char* path);
|
||||||
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
||||||
extern int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file, DWORD attributes);
|
extern int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file, DWORD attributes);
|
||||||
|
|
58
src/rufus.rc
58
src/rufus.rc
|
@ -30,7 +30,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
// Dialog
|
// Dialog
|
||||||
//
|
//
|
||||||
|
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 242, 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.1220"
|
CAPTION "Rufus 3.0.1220"
|
||||||
|
@ -38,46 +38,46 @@ FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Device Settings",IDS_DEVICE_SETTINGS_TXT,8,6,53,12,NOT WS_GROUP
|
LTEXT "Device Settings",IDS_DEVICE_SETTINGS_TXT,8,6,53,12,NOT WS_GROUP
|
||||||
LTEXT "Device",IDS_DEVICE_TXT,8,22,101,8
|
LTEXT "Device",IDS_DEVICE_TXT,8,22,101,8
|
||||||
COMBOBOX IDC_DEVICE,8,31,200,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_DEVICE,8,31,195,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
PUSHBUTTON "...",IDC_SAVE,215,29,21,14,BS_ICON
|
PUSHBUTTON "...",IDC_SAVE,206,31,21,10,BS_ICON
|
||||||
LTEXT "Boot type",IDS_BOOT_TYPE_TXT,8,44,165,8
|
LTEXT "Boot type",IDS_BOOT_TYPE_TXT,8,44,165,8
|
||||||
COMBOBOX IDC_BOOTTYPE,8,53,165,30,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
|
COMBOBOX IDC_BOOTTYPE,8,53,159,30,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
|
||||||
PUSHBUTTON "#",IDC_HASH,177,49,11,14,BS_ICON
|
PUSHBUTTON "#",IDC_HASH,170,53,11,10,BS_ICON
|
||||||
PUSHBUTTON "SELECT",IDC_SELECT_IMAGE,191,49,44,14
|
PUSHBUTTON "SELECT",IDC_SELECT_IMAGE,183,53,44,10
|
||||||
LTEXT "Image option",IDS_IMAGE_OPTION_TXT,8,66,201,8
|
LTEXT "Image option",IDS_IMAGE_OPTION_TXT,8,66,201,8
|
||||||
COMBOBOX IDC_IMAGE_OPTION,8,75,220,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_IMAGE_OPTION,8,75,216,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Partition scheme",IDS_PARTITION_TYPE_TXT,8,88,108,8
|
LTEXT "Partition scheme",IDS_PARTITION_TYPE_TXT,8,88,96,8
|
||||||
COMBOBOX IDC_PARTITION_TYPE,8,97,109,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_PARTITION_TYPE,8,97,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Target system",IDS_TARGET_SYSTEM_TXT,132,88,96,8
|
LTEXT "Target system",IDS_TARGET_SYSTEM_TXT,128,88,96,8
|
||||||
COMBOBOX IDC_TARGET_SYSTEM,132,97,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_TARGET_SYSTEM,128,97,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
CONTROL "Advanced Device Settings",IDC_ADVANCED_DEVICE_SETTINGS,
|
CONTROL "Advanced Device Settings",IDC_ADVANCED_DEVICE_SETTINGS,
|
||||||
"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,8,110,221,10
|
"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,8,110,221,10
|
||||||
CONTROL "List USB Hard Drives",IDC_LIST_USB_HDD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,120,216,10
|
CONTROL "List USB Hard Drives",IDC_LIST_USB_HDD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,120,216,10
|
||||||
CONTROL "Add fixes for old BIOSes (extra partition, align, etc.)",IDC_OLD_BIOS_FIXES,
|
CONTROL "Add fixes for old BIOSes (extra partition, align, etc.)",IDC_OLD_BIOS_FIXES,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,130,216,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,130,216,10
|
||||||
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,140,110,10
|
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,140,110,10
|
||||||
COMBOBOX IDC_DISK_ID,132,140,97,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_DISK_ID,128,140,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Format Options",IDS_FORMAT_OPTIONS_TXT,8,152,57,12,NOT WS_GROUP
|
LTEXT "Format Options",IDS_FORMAT_OPTIONS_TXT,8,152,57,12,NOT WS_GROUP
|
||||||
LTEXT "Volume label",IDS_LABEL_TXT,8,166,222,8
|
LTEXT "Volume label",IDS_LABEL_TXT,8,166,222,8
|
||||||
EDITTEXT IDC_LABEL,8,175,226,12,ES_AUTOHSCROLL
|
EDITTEXT IDC_LABEL,8,175,216,12,ES_AUTOHSCROLL
|
||||||
LTEXT "File system",IDS_FILESYSTEM_TXT,8,188,110,8
|
LTEXT "File system",IDS_FILESYSTEM_TXT,8,188,96,8
|
||||||
COMBOBOX IDC_FILESYSTEM,8,197,108,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_FILESYSTEM,8,197,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Cluster size",IDS_CLUSTERSIZE_TXT,132,188,71,8
|
LTEXT "Cluster size",IDS_CLUSTERSIZE_TXT,128,188,96,8
|
||||||
COMBOBOX IDC_CLUSTERSIZE,132,197,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_CLUSTERSIZE,128,197,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
CONTROL "Advanced Format Options",IDC_ADVANCED_FORMAT_OPTIONS,
|
CONTROL "Advanced Format Options",IDC_ADVANCED_FORMAT_OPTIONS,
|
||||||
"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,8,210,221,10
|
"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,8,210,221,10
|
||||||
CONTROL "Quick format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,220,121,10
|
CONTROL "Quick format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,220,121,10
|
||||||
CONTROL "Check device for bad blocks",IDC_BADBLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,230,112,10
|
CONTROL "Check device for bad blocks",IDC_BADBLOCKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,230,112,10
|
||||||
COMBOBOX IDC_NBPASSES,132,230,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_NBPASSES,128,230,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
CONTROL "Create extended label and icon files",IDC_EXTENDED_LABEL,
|
CONTROL "Create extended label and icon files",IDC_EXTENDED_LABEL,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,240,146,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,240,146,10
|
||||||
LTEXT "Status",IDS_STATUS_TXT,8,252,23,9,NOT WS_GROUP
|
LTEXT "Status",IDS_STATUS_TXT,8,252,23,9,NOT WS_GROUP
|
||||||
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,272,225,9
|
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,8,272,216,9
|
||||||
PUSHBUTTON "About...",IDC_ABOUT,8,294,50,14
|
PUSHBUTTON "About...",IDC_ABOUT,8,294,50,10,NOT WS_VISIBLE
|
||||||
PUSHBUTTON "Log",IDC_LOG,63,294,21,14
|
PUSHBUTTON "Log",IDC_LOG,63,294,21,10,NOT WS_VISIBLE
|
||||||
PUSHBUTTON "T",IDC_TEST,90,294,12,14,NOT WS_VISIBLE
|
PUSHBUTTON "T",IDC_TEST,90,294,12,10,NOT WS_VISIBLE
|
||||||
DEFPUSHBUTTON "START",IDC_START,127,294,50,14
|
DEFPUSHBUTTON "START",IDC_START,128,294,40,10
|
||||||
PUSHBUTTON "CLOSE",IDCANCEL,183,294,50,14
|
PUSHBUTTON "CLOSE",IDCANCEL,185,294,39,10
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_ABOUTBOX DIALOGEX 0, 0, 319, 237
|
IDD_ABOUTBOX DIALOGEX 0, 0, 319, 237
|
||||||
|
@ -116,15 +116,15 @@ BEGIN
|
||||||
EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_MULTILINE | ES_READONLY | WS_VSCROLL
|
EDITTEXT IDC_LICENSE_TEXT,7,7,321,176,ES_MULTILINE | ES_READONLY | WS_VSCROLL
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_LOG DIALOGEX 0, 0, 366, 376
|
IDD_LOG DIALOGEX 0, 0, 366, 326
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Log"
|
CAPTION "Log"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
EDITTEXT IDC_LOG_EDIT,0,0,366,346,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_CLIENTEDGE
|
EDITTEXT IDC_LOG_EDIT,0,0,366,296,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | WS_VSCROLL,WS_EX_CLIENTEDGE
|
||||||
PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,354,50,14
|
PUSHBUTTON "Clear Log",IDC_LOG_CLEAR,198,304,50,14
|
||||||
PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,354,50,14
|
PUSHBUTTON "Save Log",IDC_LOG_SAVE,253,304,50,14
|
||||||
DEFPUSHBUTTON "Close Log",IDCANCEL,308,354,50,14
|
DEFPUSHBUTTON "Close Log",IDCANCEL,308,304,50,14
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63
|
IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63
|
||||||
|
|
|
@ -1565,7 +1565,7 @@ void SetTitleBarIcon(HWND hDlg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the onscreen size of the text displayed by a control
|
// Return the onscreen size of the text displayed by a control
|
||||||
SIZE GetTextSize(HWND hCtrl)
|
SIZE GetTextSize(HWND hCtrl, char* txt)
|
||||||
{
|
{
|
||||||
SIZE sz = {0, 0};
|
SIZE sz = {0, 0};
|
||||||
HDC hDC;
|
HDC hDC;
|
||||||
|
@ -1581,6 +1581,7 @@ SIZE GetTextSize(HWND hCtrl)
|
||||||
if (hFont == NULL)
|
if (hFont == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
SelectObject(hDC, hFont);
|
SelectObject(hDC, hFont);
|
||||||
|
if (txt == NULL) {
|
||||||
len = GetWindowTextLengthW(hCtrl);
|
len = GetWindowTextLengthW(hCtrl);
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -1589,6 +1590,11 @@ SIZE GetTextSize(HWND hCtrl)
|
||||||
goto out;
|
goto out;
|
||||||
if (GetWindowTextW(hCtrl, wstr, len + 1) > 0)
|
if (GetWindowTextW(hCtrl, wstr, len + 1) > 0)
|
||||||
GetTextExtentPoint32W(hDC, wstr, len, &sz);
|
GetTextExtentPoint32W(hDC, wstr, len, &sz);
|
||||||
|
} else {
|
||||||
|
wstr = utf8_to_wchar(txt);
|
||||||
|
if (wstr != NULL)
|
||||||
|
GetTextExtentPoint32W(hDC, wstr, (int)wcslen(wstr), &sz);
|
||||||
|
}
|
||||||
out:
|
out:
|
||||||
safe_free(wstr);
|
safe_free(wstr);
|
||||||
safe_release_dc(hCtrl, hDC);
|
safe_release_dc(hCtrl, hDC);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue