mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-21 10:25:12 -04:00
[loc] add language selection menu
This commit is contained in:
parent
92abacad62
commit
df44b26342
10 changed files with 215 additions and 136 deletions
|
@ -1,6 +1,9 @@
|
||||||
# This file should be saved as UTF-8, no-BOM
|
# This file should be saved as UTF-8, no-BOM
|
||||||
|
|
||||||
######################## HOW TO ADD A NEW TRANSLATION ###########################
|
######################## HOW TO ADD A NEW TRANSLATION ###########################
|
||||||
|
# For a more comprehensive set of instructions, please see the *FULL* Localization guide at:
|
||||||
|
# https://github.com/pbatard/rufus/wiki/Localization
|
||||||
|
#
|
||||||
# 1. Rename this file as 'rufus.loc' and save it in the same directory where you have the Rufus executable.
|
# 1. Rename this file as 'rufus.loc' and save it in the same directory where you have the Rufus executable.
|
||||||
# 2. Start Rufus, and check the log a line starting with 'LCID' (eg. LCID 0x1809).
|
# 2. Start Rufus, and check the log a line starting with 'LCID' (eg. LCID 0x1809).
|
||||||
# 3. Edit the 'l' line below and:
|
# 3. Edit the 'l' line below and:
|
||||||
|
@ -275,7 +278,7 @@ t MSG_109 "0x%02X (Disk %d)"
|
||||||
# Tootips
|
# Tootips
|
||||||
# Partition Scheme and Target Type
|
# Partition Scheme and Target Type
|
||||||
t MSG_150 "Usually the safest choice. If you have an UEFI computer and want to install "
|
t MSG_150 "Usually the safest choice. If you have an UEFI computer and want to install "
|
||||||
"an OS in EFI mode however, you should select one of the options below"
|
"an OS in EFI mode however, you should select one of the other options"
|
||||||
t MSG_151 "Use this if you want to install an OS in EFI mode, but need to access "
|
t MSG_151 "Use this if you want to install an OS in EFI mode, but need to access "
|
||||||
"the USB content from Windows XP"
|
"the USB content from Windows XP"
|
||||||
t MSG_152 "The preferred option to install an OS in EFI mode and when "
|
t MSG_152 "The preferred option to install an OS in EFI mode and when "
|
||||||
|
|
|
@ -155,7 +155,7 @@ t MSG_109 "0x%02X (Disk %d)"
|
||||||
# Tootips
|
# Tootips
|
||||||
# Partition Scheme and Target Type
|
# Partition Scheme and Target Type
|
||||||
t MSG_150 "Usually the safest choice. If you have an UEFI computer and want to install "
|
t MSG_150 "Usually the safest choice. If you have an UEFI computer and want to install "
|
||||||
"an OS in EFI mode however, you should select one of the options below"
|
"an OS in EFI mode however, you should select one of the other options"
|
||||||
t MSG_151 "Use this if you want to install an OS in EFI mode, but need to access "
|
t MSG_151 "Use this if you want to install an OS in EFI mode, but need to access "
|
||||||
"the USB content from Windows XP"
|
"the USB content from Windows XP"
|
||||||
t MSG_152 "The preferred option to install an OS in EFI mode and when "
|
t MSG_152 "The preferred option to install an OS in EFI mode and when "
|
||||||
|
@ -273,9 +273,91 @@ t MSG_257 "Joliet support"
|
||||||
t MSG_258 "Rock Ridge support"
|
t MSG_258 "Rock Ridge support"
|
||||||
t MSG_259 "Force update"
|
t MSG_259 "Force update"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
l "zh-CN" "Chinese Simplified (简体中文)" 0x0404, 0x0804, 0x0c04, 0x1004, 0x1404
|
||||||
|
b "en-US"
|
||||||
|
|
||||||
|
g IDD_DIALOG
|
||||||
|
t IDS_DEVICE_TXT "设备"
|
||||||
|
t IDS_PARTITION_TYPE_TXT "分区计划和目标系统类型"
|
||||||
|
t IDS_FILESYSTEM_TXT "文件系统"
|
||||||
|
t IDS_CLUSTERSIZE_TXT "簇的大小"
|
||||||
|
t IDS_LABEL_TXT "新卷标"
|
||||||
|
t IDS_FORMAT_OPTIONS_GRP "格式选项 "
|
||||||
|
t IDC_BADBLOCKS "检查设备的坏块:"
|
||||||
|
t IDC_QUICKFORMAT "快速格式化"
|
||||||
|
t IDC_BOOT "创建一个可启动的磁盘使用:"
|
||||||
|
s IDC_BOOT +10,0
|
||||||
|
t IDC_SET_ICON "创建扩展标签和图标文件"
|
||||||
|
m IDC_ADVANCED -24,0
|
||||||
|
m IDC_NBPASSES 8,0
|
||||||
|
m IDC_BOOTTYPE 8,0
|
||||||
|
m IDC_SELECT_ISO 6,0
|
||||||
|
t IDC_ABOUT "关于..."
|
||||||
|
t IDC_LOG "日志"
|
||||||
|
m IDC_LOG -5,0
|
||||||
|
s IDC_LOG +5,0
|
||||||
|
t IDCANCEL "关闭"
|
||||||
|
t IDC_START "开始"
|
||||||
|
t IDS_ADVANCED_OPTIONS_GRP "高级选项"
|
||||||
|
t IDC_ENABLE_FIXED_DISKS "列表固定(非flash)或USB磁盘分区"
|
||||||
|
t IDC_EXTRA_PARTITION "添加修复旧的BIOS(额外的分区,校准等等)"
|
||||||
|
t IDC_RUFUS_MBR "使用 Rufus MBR BIOS ID:"
|
||||||
|
|
||||||
|
g IDD_ABOUTBOX
|
||||||
|
t IDD_ABOUTBOX "关于 Rufus"
|
||||||
|
t IDC_ABOUT_LICENSE "许可证"
|
||||||
|
t IDC_ABOUT_UPDATES "更新"
|
||||||
|
t IDOK "确定"
|
||||||
|
|
||||||
|
g IDD_LICENSE
|
||||||
|
t IDD_LICENSE "Rufus 许可证"
|
||||||
|
t IDCANCEL "取消"
|
||||||
|
|
||||||
|
g IDD_NOTIFICATION
|
||||||
|
t IDD_NOTIFICATION "更新方案和设置"
|
||||||
|
t IDC_MORE_INFO "更多信息"
|
||||||
|
t IDYES "是"
|
||||||
|
t IDNO "否"
|
||||||
|
|
||||||
|
g IDD_LOG
|
||||||
|
t IDD_LOG "日志"
|
||||||
|
t IDC_LOG_CLEAR "清除日志"
|
||||||
|
t IDC_LOG_SAVE "保存日志"
|
||||||
|
t IDCANCEL "关闭日志"
|
||||||
|
|
||||||
|
g IDD_UPDATE_POLICY
|
||||||
|
t IDD_UPDATE_POLICY "更新方案和设置"
|
||||||
|
t IDS_UPDATE_SETTINGS_GRP "设置"
|
||||||
|
t IDS_UPDATE_FREQUENCY_TXT "检查更新:"
|
||||||
|
t IDS_INCLUDE_BETAS_TXT "包括测试版本:"
|
||||||
|
t IDC_CHECK_NOW "立即检查"
|
||||||
|
t IDCANCEL "取消"
|
||||||
|
|
||||||
|
g IDD_NEW_VERSION
|
||||||
|
t IDD_NEW_VERSION "检查更新 - Rufus"
|
||||||
|
t IDS_NEW_VERSION_AVAIL_TXT "更新的版本可用。请下载最新版本!"
|
||||||
|
t IDC_WEBSITE "点击这里进入网站"
|
||||||
|
t IDS_NEW_VERSION_NOTES_GRP "发行说明"
|
||||||
|
t IDS_NEW_VERSION_DOWNLOAD_GRP "下载"
|
||||||
|
t IDC_DOWNLOAD "下载"
|
||||||
|
t IDCANCEL "取消"
|
||||||
|
|
||||||
|
g IDD_ISO_EXTRACT
|
||||||
|
t IDD_ISO_EXTRACT "复制ISO文件..."
|
||||||
|
t IDC_ISO_FILENAME "打开ISO映像 - 请稍候..."
|
||||||
|
t IDC_ISO_ABORT "取消"
|
||||||
|
|
||||||
|
g IDD_MESSAGES
|
||||||
|
t MSG_004 "更新方案和设置"
|
||||||
|
t MSG_005 "你要允許此應用程序檢查更新?"
|
||||||
|
t MSG_006 "关闭"
|
||||||
|
t MSG_007 "撤消"
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
l "fr-FR" "French (Français)" 0x040c, 0x080c, 0x0c0c, 0x100c, 0x140c, 0x180c, 0x1c0c, 0x200c, 0x240c, 0x280c, 0x2c0c, 0x300c, 0x340c, 0x380c, 0xe40c
|
l "fr-FR" "French (Français)" 0x040c, 0x080c, 0x0c0c, 0x100c, 0x140c, 0x180c, 0x1c0c, 0x200c, 0x240c, 0x280c, 0x2c0c, 0x300c, 0x340c, 0x380c, 0xe40c
|
||||||
b "en-US"
|
b "en-US"
|
||||||
|
|
||||||
g IDD_DIALOG
|
g IDD_DIALOG
|
||||||
t IDS_DEVICE_TXT "Periphérique"
|
t IDS_DEVICE_TXT "Periphérique"
|
||||||
t IDS_PARTITION_TYPE_TXT "Type de partition et système de destination"
|
t IDS_PARTITION_TYPE_TXT "Type de partition et système de destination"
|
||||||
|
@ -502,7 +584,7 @@ t MSG_109 "0x%02X (disque %d)"
|
||||||
|
|
||||||
# Tootips
|
# Tootips
|
||||||
t MSG_150 "Ce choix est le plus sûr. Mais si vous possédez un ordinateur à base de UEFI et voulez installer "
|
t MSG_150 "Ce choix est le plus sûr. Mais si vous possédez un ordinateur à base de UEFI et voulez installer "
|
||||||
"un Système d’exploitation en mode EFI, essayez plutôt de sélectionner l’une des options ci-dessous"
|
"un Système d’exploitation en mode EFI, essayez plutôt de sélectionner l’une des autres options"
|
||||||
t MSG_151 "Utilisez cette options si vous comptez installer un Système d’exploitation en mode EFI "
|
t MSG_151 "Utilisez cette options si vous comptez installer un Système d’exploitation en mode EFI "
|
||||||
"et avez aussi besoin d’accéder au contenu du média sous Windows XP"
|
"et avez aussi besoin d’accéder au contenu du média sous Windows XP"
|
||||||
t MSG_152 "Option préférée pour installer un Système d’exploitation en mode EFI, "
|
t MSG_152 "Option préférée pour installer un Système d’exploitation en mode EFI, "
|
||||||
|
@ -535,7 +617,7 @@ t MSG_172 "Licence d’utilisation et remerciements"
|
||||||
t MSG_173 "Cliquez pour sélectionner..."
|
t MSG_173 "Cliquez pour sélectionner..."
|
||||||
t MSG_174 "Rufus - The Reliable USB Formatting Utility"
|
t MSG_174 "Rufus - The Reliable USB Formatting Utility"
|
||||||
t MSG_175 "Version %d.%d.%d (Build %d)"
|
t MSG_175 "Version %d.%d.%d (Build %d)"
|
||||||
t MSG_176 "Traduction Française: Pete Batard"
|
t MSG_176 "Traduction Française: Pete Batard <mailto:pete@akeo.ie>"
|
||||||
t MSG_177 "Soumettre un bug ou une demande d'amélioration à:"
|
t MSG_177 "Soumettre un bug ou une demande d'amélioration à:"
|
||||||
t MSG_178 "Copyrights supplémentaires:"
|
t MSG_178 "Copyrights supplémentaires:"
|
||||||
t MSG_179 "Politique de mises à jour:"
|
t MSG_179 "Politique de mises à jour:"
|
||||||
|
@ -611,87 +693,6 @@ t MSG_257 "Support Joliet"
|
||||||
t MSG_258 "Support Rock Ridge"
|
t MSG_258 "Support Rock Ridge"
|
||||||
t MSG_259 "Forçage de mise à jour"
|
t MSG_259 "Forçage de mise à jour"
|
||||||
|
|
||||||
################################################################################
|
|
||||||
l "zh-CN" "Chinese Simplified (简体中文)" 0x0404, 0x0804, 0x0c04, 0x1004, 0x1404
|
|
||||||
b "en-US"
|
|
||||||
|
|
||||||
g IDD_DIALOG
|
|
||||||
t IDS_DEVICE_TXT "设备"
|
|
||||||
t IDS_PARTITION_TYPE_TXT "分区计划和目标系统类型"
|
|
||||||
t IDS_FILESYSTEM_TXT "文件系统"
|
|
||||||
t IDS_CLUSTERSIZE_TXT "簇的大小"
|
|
||||||
t IDS_LABEL_TXT "新卷标"
|
|
||||||
t IDS_FORMAT_OPTIONS_GRP "格式选项 "
|
|
||||||
t IDC_BADBLOCKS "检查设备的坏块:"
|
|
||||||
t IDC_QUICKFORMAT "快速格式化"
|
|
||||||
t IDC_BOOT "创建一个可启动的磁盘使用:"
|
|
||||||
s IDC_BOOT +10,0
|
|
||||||
t IDC_SET_ICON "创建扩展标签和图标文件"
|
|
||||||
m IDC_ADVANCED -24,0
|
|
||||||
m IDC_NBPASSES 8,0
|
|
||||||
m IDC_BOOTTYPE 8,0
|
|
||||||
m IDC_SELECT_ISO 6,0
|
|
||||||
t IDC_ABOUT "关于..."
|
|
||||||
t IDC_LOG "日志"
|
|
||||||
m IDC_LOG -5,0
|
|
||||||
s IDC_LOG +5,0
|
|
||||||
t IDCANCEL "关闭"
|
|
||||||
t IDC_START "开始"
|
|
||||||
t IDS_ADVANCED_OPTIONS_GRP "高级选项"
|
|
||||||
t IDC_ENABLE_FIXED_DISKS "列表固定(非flash)或USB磁盘分区"
|
|
||||||
t IDC_EXTRA_PARTITION "添加修复旧的BIOS(额外的分区,校准等等)"
|
|
||||||
t IDC_RUFUS_MBR "使用 Rufus MBR BIOS ID:"
|
|
||||||
|
|
||||||
g IDD_ABOUTBOX
|
|
||||||
t IDD_ABOUTBOX "关于 Rufus"
|
|
||||||
t IDC_ABOUT_LICENSE "许可证"
|
|
||||||
t IDC_ABOUT_UPDATES "更新"
|
|
||||||
t IDOK "确定"
|
|
||||||
|
|
||||||
g IDD_LICENSE
|
|
||||||
t IDD_LICENSE "Rufus 许可证"
|
|
||||||
t IDCANCEL "取消"
|
|
||||||
|
|
||||||
g IDD_NOTIFICATION
|
|
||||||
t IDD_NOTIFICATION "更新方案和设置"
|
|
||||||
t IDC_MORE_INFO "更多信息"
|
|
||||||
t IDYES "是"
|
|
||||||
t IDNO "否"
|
|
||||||
|
|
||||||
g IDD_LOG
|
|
||||||
t IDD_LOG "日志"
|
|
||||||
t IDC_LOG_CLEAR "清除日志"
|
|
||||||
t IDC_LOG_SAVE "保存日志"
|
|
||||||
t IDCANCEL "关闭日志"
|
|
||||||
|
|
||||||
g IDD_UPDATE_POLICY
|
|
||||||
t IDD_UPDATE_POLICY "更新方案和设置"
|
|
||||||
t IDS_UPDATE_SETTINGS_GRP "设置"
|
|
||||||
t IDS_UPDATE_FREQUENCY_TXT "检查更新:"
|
|
||||||
t IDS_INCLUDE_BETAS_TXT "包括测试版本:"
|
|
||||||
t IDC_CHECK_NOW "立即检查"
|
|
||||||
t IDCANCEL "取消"
|
|
||||||
|
|
||||||
g IDD_NEW_VERSION
|
|
||||||
t IDD_NEW_VERSION "检查更新 - Rufus"
|
|
||||||
t IDS_NEW_VERSION_AVAIL_TXT "更新的版本可用。请下载最新版本!"
|
|
||||||
t IDC_WEBSITE "点击这里进入网站"
|
|
||||||
t IDS_NEW_VERSION_NOTES_GRP "发行说明"
|
|
||||||
t IDS_NEW_VERSION_DOWNLOAD_GRP "下载"
|
|
||||||
t IDC_DOWNLOAD "下载"
|
|
||||||
t IDCANCEL "取消"
|
|
||||||
|
|
||||||
g IDD_ISO_EXTRACT
|
|
||||||
t IDD_ISO_EXTRACT "复制ISO文件..."
|
|
||||||
t IDC_ISO_FILENAME "打开ISO映像 - 请稍候..."
|
|
||||||
t IDC_ISO_ABORT "取消"
|
|
||||||
|
|
||||||
g IDD_MESSAGES
|
|
||||||
t MSG_004 "更新方案和设置"
|
|
||||||
t MSG_005 "你要允許此應用程序檢查更新?"
|
|
||||||
t MSG_006 "关闭"
|
|
||||||
t MSG_007 "撤消"
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
l "it-IT" "Italian (Italiano)" 0x0410, 0x0810
|
l "it-IT" "Italian (Italiano)" 0x0410, 0x0810
|
||||||
b "en-US"
|
b "en-US"
|
||||||
|
|
|
@ -308,21 +308,25 @@ void free_locale_list(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Init/destroy our various localization lists
|
* Init/destroy our various localization lists
|
||||||
|
* keep the locale list and filename on reinit
|
||||||
*/
|
*/
|
||||||
void init_localization(void) {
|
void _init_localization(BOOL reinit) {
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i=0; i<ARRAYSIZE(loc_dlg); i++)
|
for (i=0; i<ARRAYSIZE(loc_dlg); i++)
|
||||||
list_init(&loc_dlg[i].list);
|
list_init(&loc_dlg[i].list);
|
||||||
list_init(&locale_list);
|
if (!reinit)
|
||||||
|
list_init(&locale_list);
|
||||||
htab_create(LOC_HTAB_SIZE);
|
htab_create(LOC_HTAB_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void exit_localization(void) {
|
void _exit_localization(BOOL reinit) {
|
||||||
|
if (!reinit) {
|
||||||
|
free_locale_list();
|
||||||
|
if (loc_filename != embedded_loc_filename)
|
||||||
|
safe_free(loc_filename);
|
||||||
|
}
|
||||||
free_dialog_list();
|
free_dialog_list();
|
||||||
free_locale_list();
|
|
||||||
htab_destroy();
|
htab_destroy();
|
||||||
if (loc_filename != embedded_loc_filename)
|
|
||||||
safe_free(loc_filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -146,8 +146,11 @@ char *loc_filename, *embedded_loc_filename;
|
||||||
|
|
||||||
void free_loc_cmd(loc_cmd* lcmd);
|
void free_loc_cmd(loc_cmd* lcmd);
|
||||||
BOOL dispatch_loc_cmd(loc_cmd* lcmd);
|
BOOL dispatch_loc_cmd(loc_cmd* lcmd);
|
||||||
void init_localization(void);
|
void _init_localization(BOOL reinit);
|
||||||
void exit_localization(void);
|
void _exit_localization(BOOL reinit);
|
||||||
|
#define init_localization() _init_localization(FALSE)
|
||||||
|
#define exit_localization() _exit_localization(FALSE)
|
||||||
|
#define reinit_localization() do {_exit_localization(TRUE); _init_localization(TRUE);} while(0)
|
||||||
void apply_localization(int dlg_id, HWND hDlg);
|
void apply_localization(int dlg_id, HWND hDlg);
|
||||||
void reset_localization(int dlg_id);
|
void reset_localization(int dlg_id);
|
||||||
void free_dialog_list(void);
|
void free_dialog_list(void);
|
||||||
|
|
|
@ -291,6 +291,18 @@ static __inline BOOL SetDlgItemTextU(HWND hDlg, int nIDDlgItem, const char* lpSt
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline BOOL InsertMenuU(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const char* lpNewItem)
|
||||||
|
{
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
DWORD err = ERROR_INVALID_DATA;
|
||||||
|
wconvert(lpNewItem);
|
||||||
|
ret = InsertMenuW(hMenu, uPosition, uFlags, uIDNewItem, wlpNewItem);
|
||||||
|
err = GetLastError();
|
||||||
|
wfree(lpNewItem);
|
||||||
|
SetLastError(err);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static __inline int ComboBox_GetLBTextU(HWND hCtrl, int index, char* lpString)
|
static __inline int ComboBox_GetLBTextU(HWND hCtrl, int index, char* lpString)
|
||||||
{
|
{
|
||||||
int size;
|
int size;
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
#define IDC_ADVANCED 1043
|
#define IDC_ADVANCED 1043
|
||||||
#define IDS_ADVANCED_OPTIONS_GRP 1044
|
#define IDS_ADVANCED_OPTIONS_GRP 1044
|
||||||
#define IDC_LOG 1045
|
#define IDC_LOG 1045
|
||||||
|
#define IDC_LANG 1046
|
||||||
#define IDC_LOG_EDIT 1050
|
#define IDC_LOG_EDIT 1050
|
||||||
#define IDC_LOG_SAVE 1051
|
#define IDC_LOG_SAVE 1051
|
||||||
#define IDC_LOG_CLEAR 1052
|
#define IDC_LOG_CLEAR 1052
|
||||||
|
|
72
src/rufus.c
72
src/rufus.c
|
@ -84,7 +84,7 @@ struct {
|
||||||
HIMAGELIST himl;
|
HIMAGELIST himl;
|
||||||
RECT margin;
|
RECT margin;
|
||||||
UINT uAlign;
|
UINT uAlign;
|
||||||
} bi_iso = {0}, bi_up = {0}, bi_down = {0}; // BUTTON_IMAGELIST
|
} bi_iso = {0}, bi_up = {0}, bi_down = {0}, bi_lang = {0}; // BUTTON_IMAGELIST
|
||||||
|
|
||||||
const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT" };
|
const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT" };
|
||||||
// Number of steps for each FS for FCC_STRUCTURE_PROGRESS
|
// Number of steps for each FS for FCC_STRUCTURE_PROGRESS
|
||||||
|
@ -94,9 +94,12 @@ static BOOL existing_key = FALSE; // For LGP set/restore
|
||||||
static BOOL size_check = TRUE;
|
static BOOL size_check = TRUE;
|
||||||
static BOOL log_displayed = FALSE;
|
static BOOL log_displayed = FALSE;
|
||||||
static BOOL iso_provided = FALSE;
|
static BOOL iso_provided = FALSE;
|
||||||
|
static BOOL relaunch = FALSE;
|
||||||
extern BOOL force_large_fat32, enable_joliet, enable_rockridge;
|
extern BOOL force_large_fat32, enable_joliet, enable_rockridge;
|
||||||
static int selection_default;
|
static int selection_default;
|
||||||
static loc_cmd* selected_locale = NULL;
|
static loc_cmd* selected_locale = NULL;
|
||||||
|
static UINT_PTR UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU;
|
||||||
|
static RECT relaunch_rc = { -65536, -65536, 0, 0};
|
||||||
char ClusterSizeLabel[MAX_CLUSTER_SIZES][64];
|
char ClusterSizeLabel[MAX_CLUSTER_SIZES][64];
|
||||||
char msgbox[1024], msgbox_title[32];
|
char msgbox[1024], msgbox_title[32];
|
||||||
|
|
||||||
|
@ -121,7 +124,7 @@ extern char szStatusMessage[256];
|
||||||
|
|
||||||
static HANDLE format_thid = NULL;
|
static HANDLE format_thid = NULL;
|
||||||
static HWND hProgress = NULL, hBoot = NULL, hSelectISO = NULL;
|
static HWND hProgress = NULL, hBoot = NULL, hSelectISO = NULL;
|
||||||
static HICON hIconDisc, hIconDown, hIconUp;
|
static HICON hIconDisc, hIconDown, hIconUp, hIconLang;
|
||||||
static StrArray DriveID, DriveLabel;
|
static StrArray DriveID, DriveLabel;
|
||||||
static char szTimer[12] = "00:00:00";
|
static char szTimer[12] = "00:00:00";
|
||||||
static unsigned int timer;
|
static unsigned int timer;
|
||||||
|
@ -875,6 +878,7 @@ static void EnableControls(BOOL bEnable)
|
||||||
EnableWindow(GetDlgItem(hMainDialog, IDC_SET_ICON), bEnable);
|
EnableWindow(GetDlgItem(hMainDialog, IDC_SET_ICON), bEnable);
|
||||||
EnableWindow(GetDlgItem(hMainDialog, IDC_ADVANCED), bEnable);
|
EnableWindow(GetDlgItem(hMainDialog, IDC_ADVANCED), bEnable);
|
||||||
EnableWindow(GetDlgItem(hMainDialog, IDC_ENABLE_FIXED_DISKS), bEnable);
|
EnableWindow(GetDlgItem(hMainDialog, IDC_ENABLE_FIXED_DISKS), bEnable);
|
||||||
|
EnableWindow(GetDlgItem(hMainDialog, IDC_LANG), bEnable);
|
||||||
SetDlgItemTextU(hMainDialog, IDCANCEL, lmprintf(bEnable?MSG_006:MSG_007));
|
SetDlgItemTextU(hMainDialog, IDCANCEL, lmprintf(bEnable?MSG_006:MSG_007));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1351,6 +1355,7 @@ void InitDialog(HWND hDlg)
|
||||||
// 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)
|
||||||
hDllInst = LoadLibraryA("shell32.dll");
|
hDllInst = LoadLibraryA("shell32.dll");
|
||||||
hIconDisc = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(12), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR|LR_SHARED);
|
hIconDisc = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(12), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR|LR_SHARED);
|
||||||
|
hIconLang = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(244), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR|LR_SHARED);
|
||||||
if (nWindowsVersion >= WINDOWS_VISTA) {
|
if (nWindowsVersion >= WINDOWS_VISTA) {
|
||||||
hIconDown = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(16750), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR|LR_SHARED);
|
hIconDown = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(16750), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR|LR_SHARED);
|
||||||
hIconUp = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(16749), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR|LR_SHARED);
|
hIconUp = (HICON)LoadImage(hDllInst, MAKEINTRESOURCE(16749), IMAGE_ICON, s16, s16, LR_DEFAULTCOLOR|LR_SHARED);
|
||||||
|
@ -1367,6 +1372,10 @@ void InitDialog(HWND hDlg)
|
||||||
pImageList_ReplaceIcon(bi_iso.himl, -1, hIconDisc);
|
pImageList_ReplaceIcon(bi_iso.himl, -1, hIconDisc);
|
||||||
SetRect(&bi_iso.margin, 0, 1, 0, 0);
|
SetRect(&bi_iso.margin, 0, 1, 0, 0);
|
||||||
bi_iso.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
bi_iso.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
||||||
|
bi_lang.himl = pImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0);
|
||||||
|
pImageList_ReplaceIcon(bi_lang.himl, -1, hIconLang);
|
||||||
|
SetRect(&bi_lang.margin, 0, 1, 0, 0);
|
||||||
|
bi_lang.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
||||||
bi_down.himl = pImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0);
|
bi_down.himl = pImageList_Create(i16, i16, ILC_COLOR32 | ILC_MASK, 1, 0);
|
||||||
pImageList_ReplaceIcon(bi_down.himl, -1, hIconDown);
|
pImageList_ReplaceIcon(bi_down.himl, -1, hIconDown);
|
||||||
SetRect(&bi_down.margin, 0, 0, 0, 0);
|
SetRect(&bi_down.margin, 0, 0, 0, 0);
|
||||||
|
@ -1377,6 +1386,7 @@ void InitDialog(HWND hDlg)
|
||||||
bi_up.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
bi_up.uAlign = BUTTON_IMAGELIST_ALIGN_CENTER;
|
||||||
|
|
||||||
SendMessage(hSelectISO, BCM_SETIMAGELIST, 0, (LPARAM)&bi_iso);
|
SendMessage(hSelectISO, BCM_SETIMAGELIST, 0, (LPARAM)&bi_iso);
|
||||||
|
SendMessage(GetDlgItem(hDlg, IDC_LANG), BCM_SETIMAGELIST, 0, (LPARAM)&bi_lang);
|
||||||
SendMessage(GetDlgItem(hDlg, IDC_ADVANCED), BCM_SETIMAGELIST, 0, (LPARAM)&bi_down);
|
SendMessage(GetDlgItem(hDlg, IDC_ADVANCED), BCM_SETIMAGELIST, 0, (LPARAM)&bi_down);
|
||||||
|
|
||||||
// Set the various tooltips
|
// Set the various tooltips
|
||||||
|
@ -1412,6 +1422,23 @@ static void PrintStatus2000(const char* str, BOOL val)
|
||||||
PrintStatus(2000, FALSE, (lmprintf((val)?MSG_250:MSG_251, str)));
|
PrintStatus(2000, FALSE, (lmprintf((val)?MSG_250:MSG_251, str)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShowLanguageMenu(HWND hDlg)
|
||||||
|
{
|
||||||
|
POINT pt;
|
||||||
|
HMENU menu;
|
||||||
|
loc_cmd* lcmd = NULL;
|
||||||
|
UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU;
|
||||||
|
|
||||||
|
menu = CreatePopupMenu();
|
||||||
|
list_for_each_entry(lcmd, &locale_list, loc_cmd, list) {
|
||||||
|
InsertMenuU(menu, -1, MF_BYPOSITION|((selected_locale == lcmd)?MF_CHECKED:0), UM_LANGUAGE_MENU_MAX++, lcmd->txt[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetForegroundWindow(hDlg);
|
||||||
|
GetCursorPos(&pt);
|
||||||
|
TrackPopupMenu(menu, TPM_TOPALIGN|TPM_RIGHTALIGN, pt.x, pt.y, 0, hMainDialog, NULL);
|
||||||
|
DestroyMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Main dialog callback
|
* Main dialog callback
|
||||||
|
@ -1421,11 +1448,12 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
DRAWITEMSTRUCT* pDI;
|
DRAWITEMSTRUCT* pDI;
|
||||||
POINT Point;
|
POINT Point;
|
||||||
RECT DialogRect, DesktopRect;
|
RECT DialogRect, DesktopRect;
|
||||||
int nDeviceIndex, fs, bt, i, nWidth, nHeight, nb_devices;
|
int nDeviceIndex, fs, bt, i, nWidth, nHeight, nb_devices, selected_language;
|
||||||
static DWORD DeviceNum = 0, LastRefresh = 0;
|
static DWORD DeviceNum = 0, LastRefresh = 0;
|
||||||
char tmp[128];
|
char tmp[128];
|
||||||
static UINT uBootChecked = BST_CHECKED, uQFChecked;
|
static UINT uBootChecked = BST_CHECKED, uQFChecked;
|
||||||
static BOOL first_log_display = TRUE, user_changed_label = FALSE;
|
static BOOL first_log_display = TRUE, user_changed_label = FALSE;
|
||||||
|
loc_cmd* lcmd = NULL;
|
||||||
|
|
||||||
switch (message) {
|
switch (message) {
|
||||||
|
|
||||||
|
@ -1464,7 +1492,10 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
apply_localization(IDD_DIALOG, hDlg);
|
apply_localization(IDD_DIALOG, hDlg);
|
||||||
SetUpdateCheck();
|
SetUpdateCheck();
|
||||||
|
advanced_mode = TRUE;
|
||||||
// Create the log window (hidden)
|
// Create the log window (hidden)
|
||||||
|
first_log_display = TRUE;
|
||||||
|
log_displayed = FALSE;
|
||||||
hLogDlg = CreateDialogW(hMainInstance, MAKEINTRESOURCEW(IDD_LOG), hDlg, (DLGPROC)LogProc);
|
hLogDlg = CreateDialogW(hMainInstance, MAKEINTRESOURCEW(IDD_LOG), hDlg, (DLGPROC)LogProc);
|
||||||
InitDialog(hDlg);
|
InitDialog(hDlg);
|
||||||
GetUSBDevices(0);
|
GetUSBDevices(0);
|
||||||
|
@ -1493,6 +1524,22 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
|
if ((LOWORD(wParam) >= UM_LANGUAGE_MENU) && (LOWORD(wParam) < UM_LANGUAGE_MENU_MAX)) {
|
||||||
|
selected_language = LOWORD(wParam) - UM_LANGUAGE_MENU;
|
||||||
|
uprintf("Got language %d\n", selected_language);
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
list_for_each_entry(lcmd, &locale_list, loc_cmd, list) {
|
||||||
|
if (i++ == selected_language) {
|
||||||
|
if (selected_locale != lcmd) {
|
||||||
|
selected_locale = lcmd;
|
||||||
|
relaunch = TRUE;
|
||||||
|
PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
switch(LOWORD(wParam)) {
|
switch(LOWORD(wParam)) {
|
||||||
case IDOK: // close application
|
case IDOK: // close application
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
|
@ -1522,6 +1569,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
StrArrayDestroy(&DriveID);
|
StrArrayDestroy(&DriveID);
|
||||||
StrArrayDestroy(&DriveLabel);
|
StrArrayDestroy(&DriveLabel);
|
||||||
DestroyAllTooltips();
|
DestroyAllTooltips();
|
||||||
|
DestroyWindow(hLogDlg);
|
||||||
|
GetWindowRect(hDlg, &relaunch_rc);
|
||||||
EndDialog(hDlg, 0);
|
EndDialog(hDlg, 0);
|
||||||
break;
|
break;
|
||||||
case IDC_ABOUT:
|
case IDC_ABOUT:
|
||||||
|
@ -1559,6 +1608,9 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
case IDC_TEST:
|
case IDC_TEST:
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
case IDC_LANG:
|
||||||
|
ShowLanguageMenu(GetDlgItem(hDlg, IDC_LANG));
|
||||||
|
break;
|
||||||
case IDC_ADVANCED:
|
case IDC_ADVANCED:
|
||||||
ToggleAdvanced();
|
ToggleAdvanced();
|
||||||
SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILESYSTEM,
|
SendMessage(hMainDialog, WM_COMMAND, (CBN_SELCHANGE<<16) | IDC_FILESYSTEM,
|
||||||
|
@ -1985,9 +2037,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
"Fatal error", MB_ICONSTOP);
|
"Fatal error", MB_ICONSTOP);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
uprintf("localization: using locale '%s'\n", selected_locale->txt[0]);
|
|
||||||
get_loc_data_file(loc_file, (long)selected_locale->num[0], (long)selected_locale->num[1], selected_locale->line_nr);
|
|
||||||
|
|
||||||
|
|
||||||
// Prevent 2 applications from running at the same time, unless "/W" is passed as an option
|
// Prevent 2 applications from running at the same time, unless "/W" is passed as an option
|
||||||
// in which case we wait for the mutex to be relinquished
|
// in which case we wait for the mutex to be relinquished
|
||||||
|
@ -2022,12 +2071,18 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
// 0x9e disables removable and fixed drive notifications
|
// 0x9e disables removable and fixed drive notifications
|
||||||
SetLGP(FALSE, &existing_key, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e);
|
SetLGP(FALSE, &existing_key, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "NoDriveTypeAutorun", 0x9e);
|
||||||
|
|
||||||
|
relaunch:
|
||||||
|
uprintf("localization: using locale '%s'\n", selected_locale->txt[0]);
|
||||||
|
get_loc_data_file(loc_file, (long)selected_locale->num[0], (long)selected_locale->num[1], selected_locale->line_nr);
|
||||||
|
|
||||||
// Create the main Window
|
// Create the main Window
|
||||||
hDlg = CreateDialogW(hInstance, MAKEINTRESOURCEW(IDD_DIALOG), NULL, MainCallback);
|
hDlg = CreateDialogW(hInstance, MAKEINTRESOURCEW(IDD_DIALOG), NULL, MainCallback);
|
||||||
if (hDlg == NULL) {
|
if (hDlg == NULL) {
|
||||||
MessageBoxU(NULL, "Could not create Window", "DialogBox failure", MB_ICONSTOP);
|
MessageBoxU(NULL, "Could not create Window", "DialogBox failure", MB_ICONSTOP);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
if ((relaunch_rc.left > -65536) && (relaunch_rc.top > -65536))
|
||||||
|
SetWindowPos(hDlg, HWND_TOP, relaunch_rc.left, relaunch_rc.top, 0, 0, SWP_NOSIZE);
|
||||||
ShowWindow(hDlg, SW_SHOWNORMAL);
|
ShowWindow(hDlg, SW_SHOWNORMAL);
|
||||||
UpdateWindow(hDlg);
|
UpdateWindow(hDlg);
|
||||||
|
|
||||||
|
@ -2111,6 +2166,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
DispatchMessage(&msg);
|
DispatchMessage(&msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (relaunch) {
|
||||||
|
relaunch = FALSE;
|
||||||
|
reinit_localization();
|
||||||
|
goto relaunch;
|
||||||
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if ((!external_loc_file) && (loc_file[0] != 0))
|
if ((!external_loc_file) && (loc_file[0] != 0))
|
||||||
|
|
|
@ -110,7 +110,9 @@ enum user_message_type {
|
||||||
// TODO: relabel "ISO" to a more generic "progress"
|
// TODO: relabel "ISO" to a more generic "progress"
|
||||||
UM_ISO_CREATE,
|
UM_ISO_CREATE,
|
||||||
UM_ISO_INIT,
|
UM_ISO_INIT,
|
||||||
UM_ISO_EXIT
|
UM_ISO_EXIT,
|
||||||
|
// Start of the WM IDs for the language menu items
|
||||||
|
UM_LANGUAGE_MENU = WM_APP + 0x100
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Custom notifications */
|
/* Custom notifications */
|
||||||
|
|
13
src/rufus.rc
13
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
IDD_DIALOG DIALOGEX 12, 12, 206, 329
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_APPWINDOW
|
EXSTYLE WS_EX_APPWINDOW
|
||||||
CAPTION "Rufus v1.4.0.293"
|
CAPTION "Rufus v1.4.0.294"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
|
||||||
|
@ -42,7 +42,7 @@ BEGIN
|
||||||
PUSHBUTTON "Log",IDC_LOG,62,291,18,14
|
PUSHBUTTON "Log",IDC_LOG,62,291,18,14
|
||||||
PUSHBUTTON "T",IDC_TEST,80,291,12,14,NOT WS_VISIBLE
|
PUSHBUTTON "T",IDC_TEST,80,291,12,14,NOT WS_VISIBLE
|
||||||
COMBOBOX IDC_DEVICE,8,17,190,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_DEVICE,8,17,190,33,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Device",IDS_DEVICE_TXT,9,6,186,8
|
LTEXT "Device",IDS_DEVICE_TXT,9,6,171,8
|
||||||
COMBOBOX IDC_FILESYSTEM,8,75,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_FILESYSTEM,8,75,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "File system",IDS_FILESYSTEM_TXT,9,64,186,10
|
LTEXT "File system",IDS_FILESYSTEM_TXT,9,64,186,10
|
||||||
COMBOBOX IDC_PARTITION_TYPE,8,46,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_PARTITION_TYPE,8,46,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
|
@ -69,6 +69,7 @@ BEGIN
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,181,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,235,181,10
|
||||||
CONTROL "List non removable or unpartitioned USB disks",IDC_ENABLE_FIXED_DISKS,
|
CONTROL "List non removable or unpartitioned USB disks",IDC_ENABLE_FIXED_DISKS,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,222,181,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,222,181,10
|
||||||
|
PUSHBUTTON "",IDC_LANG,183,2,15,13,BS_TOP | BS_FLAT
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_ABOUTBOX DIALOGEX 0, 0, 287, 204
|
IDD_ABOUTBOX DIALOGEX 0, 0, 287, 204
|
||||||
|
@ -284,8 +285,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,4,0,293
|
FILEVERSION 1,4,0,294
|
||||||
PRODUCTVERSION 1,4,0,293
|
PRODUCTVERSION 1,4,0,294
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -302,13 +303,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", "1.4.0.293"
|
VALUE "FileVersion", "1.4.0.294"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2013 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2013 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", "1.4.0.293"
|
VALUE "ProductVersion", "1.4.0.294"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
52
src/stdlg.c
52
src/stdlg.c
|
@ -404,41 +404,29 @@ void CreateStatusBar(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Center a dialog with regards to the main application Window or the desktop
|
* Center a dialog with regards to the main application Window or the desktop
|
||||||
|
* See http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996.aspx#init_box
|
||||||
*/
|
*/
|
||||||
void CenterDialog(HWND hDlg)
|
void CenterDialog(HWND hDlg)
|
||||||
{
|
{
|
||||||
POINT Point;
|
|
||||||
HWND hParent;
|
HWND hParent;
|
||||||
RECT DialogRect;
|
RECT rc, rcDlg, rcParent;
|
||||||
RECT ParentRect;
|
|
||||||
int nWidth;
|
|
||||||
int nHeight;
|
|
||||||
|
|
||||||
// Get the size of the dialog box.
|
if ((hParent = GetParent(hDlg)) == NULL) {
|
||||||
GetWindowRect(hDlg, &DialogRect);
|
|
||||||
|
|
||||||
// Get the parent
|
|
||||||
hParent = GetParent(hDlg);
|
|
||||||
if (hParent == NULL) {
|
|
||||||
hParent = GetDesktopWindow();
|
hParent = GetDesktopWindow();
|
||||||
}
|
}
|
||||||
GetClientRect(hParent, &ParentRect);
|
|
||||||
|
|
||||||
// Calculate the height and width of the current dialog
|
GetWindowRect(hParent, &rcParent);
|
||||||
nWidth = DialogRect.right - DialogRect.left;
|
GetWindowRect(hDlg, &rcDlg);
|
||||||
nHeight = DialogRect.bottom - DialogRect.top;
|
CopyRect(&rc, &rcParent);
|
||||||
|
|
||||||
// Find the center point and convert to screen coordinates.
|
// Offset the parent and dialog box rectangles so that right and bottom
|
||||||
Point.x = (ParentRect.right - ParentRect.left) / 2;
|
// values represent the width and height, and then offset the parent again
|
||||||
Point.y = (ParentRect.bottom - ParentRect.top) / 2;
|
// to discard space taken up by the dialog box.
|
||||||
ClientToScreen(hParent, &Point);
|
OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top);
|
||||||
|
OffsetRect(&rc, -rc.left, -rc.top);
|
||||||
|
OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom);
|
||||||
|
|
||||||
// Calculate the new x, y starting point.
|
SetWindowPos(hDlg, HWND_TOP, rcParent.left + (rc.right / 2), rcParent.top + (rc.bottom / 2) - 25, 0, 0, SWP_NOSIZE);
|
||||||
Point.x -= nWidth / 2;
|
|
||||||
Point.y -= nHeight / 2 + 35;
|
|
||||||
|
|
||||||
// Move the window.
|
|
||||||
MoveWindow(hDlg, Point.x, Point.y, nWidth, nHeight, FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://stackoverflow.com/questions/431470/window-border-width-and-height-in-win32-how-do-i-get-it
|
// http://stackoverflow.com/questions/431470/window-border-width-and-height-in-win32-how-do-i-get-it
|
||||||
|
@ -755,8 +743,8 @@ BOOL CreateTooltip(HWND hControl, const char* message, int duration)
|
||||||
for (i=0; i<MAX_TOOLTIPS; i++) {
|
for (i=0; i<MAX_TOOLTIPS; i++) {
|
||||||
if (ttlist[i].hTip == NULL) break;
|
if (ttlist[i].hTip == NULL) break;
|
||||||
}
|
}
|
||||||
if (i == MAX_TOOLTIPS) {
|
if (i >= MAX_TOOLTIPS) {
|
||||||
uprintf("Maximum number of tooltips reached\n");
|
uprintf("Maximum number of tooltips reached (%d)\n", MAX_TOOLTIPS);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -799,7 +787,7 @@ void DestroyTooltip(HWND hControl)
|
||||||
for (i=0; i<MAX_TOOLTIPS; i++) {
|
for (i=0; i<MAX_TOOLTIPS; i++) {
|
||||||
if (ttlist[i].hCtrl == hControl) break;
|
if (ttlist[i].hCtrl == hControl) break;
|
||||||
}
|
}
|
||||||
if (i == MAX_TOOLTIPS) return;
|
if (i >= MAX_TOOLTIPS) return;
|
||||||
DestroyWindow(ttlist[i].hTip);
|
DestroyWindow(ttlist[i].hTip);
|
||||||
safe_free(ttlist[i].wstring);
|
safe_free(ttlist[i].wstring);
|
||||||
ttlist[i].original_proc = NULL;
|
ttlist[i].original_proc = NULL;
|
||||||
|
@ -809,12 +797,16 @@ void DestroyTooltip(HWND hControl)
|
||||||
|
|
||||||
void DestroyAllTooltips(void)
|
void DestroyAllTooltips(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i, j;
|
||||||
|
|
||||||
for (i=0; i<MAX_TOOLTIPS; i++) {
|
for (i=0, j=0; i<MAX_TOOLTIPS; i++) {
|
||||||
if (ttlist[i].hTip == NULL) continue;
|
if (ttlist[i].hTip == NULL) continue;
|
||||||
|
j++;
|
||||||
DestroyWindow(ttlist[i].hTip);
|
DestroyWindow(ttlist[i].hTip);
|
||||||
safe_free(ttlist[i].wstring);
|
safe_free(ttlist[i].wstring);
|
||||||
|
ttlist[i].original_proc = NULL;
|
||||||
|
ttlist[i].hTip = NULL;
|
||||||
|
ttlist[i].hCtrl = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue