mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[ui] use a hidden button on the status bar to generate the hash
* Also add a tooltip for the language bar * Also reduce the size of the icon in README.md
This commit is contained in:
		
							parent
							
								
									3ccae1d2e2
								
							
						
					
					
						commit
						91e699d38a
					
				
					 7 changed files with 115 additions and 66 deletions
				
			
		|  | @ -1,7 +1,7 @@ | |||
| Rufus: The Reliable USB Formatting Utility | ||||
| ========================================== | ||||
| 
 | ||||
|  | ||||
|  | ||||
| 
 | ||||
| Features | ||||
| -------- | ||||
|  |  | |||
|  | @ -518,6 +518,8 @@ t MSG_268 "Applying Windows image..." | |||
| t MSG_269 "Preserve timestamps" | ||||
| t MSG_270 "USB debug" | ||||
| t MSG_271 "Computing image checksum: %0.1f%% completed" | ||||
| t MSG_272 "Click here to compute the SHA-1 and MD5 checksums for the selected image" | ||||
| t MSG_273 "Change the application language" | ||||
| 
 | ||||
| ################################################################################ | ||||
| ############################# TRANSLATOR END COPY ############################## | ||||
|  |  | |||
|  | @ -94,6 +94,7 @@ | |||
| #define IDC_DISK_ID                     1022 | ||||
| #define IDC_EXTRA_PARTITION             1023 | ||||
| #define IDC_ENABLE_FIXED_DISKS          1024 | ||||
| #define IDC_HASH                        1025 | ||||
| #define IDC_ABOUT_LICENSE               1030 | ||||
| #define IDC_ABOUT_ICON                  1031 | ||||
| #define IDC_ABOUT_UPDATES               1032 | ||||
|  |  | |||
							
								
								
									
										100
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										100
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -103,6 +103,7 @@ static BOOL log_displayed = FALSE; | |||
| static BOOL iso_provided = FALSE; | ||||
| static BOOL user_notified = FALSE; | ||||
| static BOOL relaunch = FALSE; | ||||
| static BOOL hash_enabled = FALSE; | ||||
| extern BOOL force_large_fat32, enable_iso, enable_joliet, enable_rockridge, enable_ntfs_compression, preserve_timestamps, usb_debug; | ||||
| extern uint8_t* grub2_buf; | ||||
| extern long grub2_len; | ||||
|  | @ -131,7 +132,7 @@ float fScale = 1.0f; | |||
| int default_fs; | ||||
| uint32_t dur_mins, dur_secs; | ||||
| HWND hDeviceList, hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog = NULL; | ||||
| HWND hLogDlg = NULL, hProgress = NULL, hInfo, hDiskID; | ||||
| HWND hLogDlg = NULL, hProgress = NULL, hInfo, hDiskID, hHash; | ||||
| BOOL use_own_c32[NB_OLD_C32] = {FALSE, FALSE}, detect_fakes = TRUE, mbr_selected_by_user = FALSE; | ||||
| BOOL iso_op_in_progress = FALSE, format_op_in_progress = FALSE, right_to_left_mode = FALSE; | ||||
| BOOL enable_HDDs = FALSE, advanced_mode = TRUE, force_update = FALSE, use_fake_units = TRUE; | ||||
|  | @ -804,6 +805,14 @@ void UpdateProgress(int op, float percent) | |||
| 	SetTaskbarProgressValue(pos, MAX_PROGRESS); | ||||
| } | ||||
| 
 | ||||
| static void EnableHash(BOOL bEnable) | ||||
| { | ||||
| 	// Can't use EnableWindow() for hHash as it overrides our WM_PAINT suppression
 | ||||
| 	// and we'd end up with an out of place disabled button
 | ||||
| 	hash_enabled = bEnable; | ||||
| 	SendMessage(hStatus, SB_SETTEXTW, SBT_OWNERDRAW | SB_SECTION_MIDDLE, 0); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Toggle controls according to operation | ||||
|  */ | ||||
|  | @ -818,6 +827,7 @@ static void EnableControls(BOOL bEnable) | |||
| 	EnableWindow(hNBPasses, bEnable); | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_ADVANCED), bEnable); | ||||
| 	EnableWindow(hLangToolbar, bEnable); | ||||
| 	EnableHash(bEnable); | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_ENABLE_FIXED_DISKS), bEnable); | ||||
| 	SetDlgItemTextU(hMainDialog, IDCANCEL, lmprintf(bEnable?MSG_006:MSG_007)); | ||||
| 	if (selection_default == BT_IMG) | ||||
|  | @ -1063,7 +1073,6 @@ DWORD WINAPI ISOScanThread(LPVOID param) | |||
| 	InvalidateRect(hMainDialog, NULL, TRUE); | ||||
| 
 | ||||
| out: | ||||
| 	SendMessageLU(hStatus, SB_SETTEXTW, SBT_OWNERDRAW | SB_SECTION_MIDDLE, ""); | ||||
| 	PrintInfo(0, MSG_210); | ||||
| 	ExitThread(0); | ||||
| } | ||||
|  | @ -1102,8 +1111,9 @@ static void ToggleAdvanced(void) | |||
| 	MoveWindow(hMainDialog, rect.left, rect.top, point.x, | ||||
| 		point.y + (int)(fScale*dialog_shift), TRUE); | ||||
| 
 | ||||
| 	// Move the status bar up or down
 | ||||
| 	// Move the controls up or down
 | ||||
| 	MoveCtrlY(hMainDialog, IDC_STATUS, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_HASH, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_START, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_INFO, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_PROGRESS, dialog_shift); | ||||
|  | @ -1185,6 +1195,7 @@ static void ToggleToGo(void) | |||
| 
 | ||||
| 	// Move the controls up or down
 | ||||
| 	MoveCtrlY(hMainDialog, IDC_STATUS, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_HASH, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_START, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_INFO, dialog_shift); | ||||
| 	MoveCtrlY(hMainDialog, IDC_PROGRESS, dialog_shift); | ||||
|  | @ -1692,6 +1703,8 @@ void InitDialog(HWND hDlg) | |||
| 	selection_default = BT_FREEDOS; | ||||
| 	// Create the status line and initialize the taskbar icon for progress overlay
 | ||||
| 	CreateStatusBar(); | ||||
| 	// Create the hash sign on the status bar
 | ||||
| 	EnableHash(FALSE); | ||||
| 	CreateTaskbarList(); | ||||
| 	SetTaskbarProgressState(TASKBAR_NORMAL); | ||||
| 
 | ||||
|  | @ -1842,6 +1855,8 @@ void InitDialog(HWND hDlg) | |||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_ABOUT), lmprintf(MSG_172), -1); | ||||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_WINDOWS_INSTALL), lmprintf(MSG_199), -1); | ||||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_WINDOWS_TO_GO), lmprintf(MSG_200), -1); | ||||
| 	CreateTooltip(hHash, lmprintf(MSG_272), -1); | ||||
| 	CreateTooltip(hLangToolbar, lmprintf(MSG_273), -1); | ||||
| 
 | ||||
| 	// Set a label for the Advanced Mode and Select Image button for screen readers
 | ||||
| 	if (nWindowsVersion > WINDOWS_XP) { | ||||
|  | @ -1852,9 +1867,6 @@ void InitDialog(HWND hDlg) | |||
| 	ToggleAdvanced();	// We start in advanced mode => go to basic mode
 | ||||
| 	ToggleToGo(); | ||||
| 
 | ||||
| 	// Create the hash sign on the status bar
 | ||||
| 	SendMessageLU(hStatus, SB_SETTEXTW, SBT_OWNERDRAW | SB_SECTION_MIDDLE, ""); | ||||
| 
 | ||||
| 	// Process commandline parameters
 | ||||
| 	if (iso_provided) { | ||||
| 		// Simulate a button click for ISO selection
 | ||||
|  | @ -2055,12 +2067,12 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| #endif | ||||
| 		return (INT_PTR)FALSE; | ||||
| 
 | ||||
| 	// The things one must do to get an ellipsis text alignment on the status bar...
 | ||||
| 	// The things one must do to get an ellipsis and text alignment on the status bar...
 | ||||
| 	case WM_DRAWITEM: | ||||
| 		if (wParam == IDC_STATUS) { | ||||
| 			pDI = (DRAWITEMSTRUCT*)lParam; | ||||
| 			pDI->rcItem.top -= (int)((4.0f * fScale) - 6.0f); | ||||
| 			pDI->rcItem.left += (int)(4.0f * fScale); | ||||
| 			pDI->rcItem.left += (int)(((pDI->itemID == SB_SECTION_MIDDLE)?-2.0f:4.0f) * fScale); | ||||
| 			SetBkMode(pDI->hDC, TRANSPARENT); | ||||
| 			switch(pDI->itemID) { | ||||
| 			case SB_SECTION_LEFT: | ||||
|  | @ -2069,8 +2081,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 					DT_LEFT|DT_END_ELLIPSIS|DT_PATH_ELLIPSIS, NULL); | ||||
| 				return (INT_PTR)TRUE; | ||||
| 			case SB_SECTION_MIDDLE: | ||||
| 				SetTextColor(pDI->hDC, (image_path==NULL)?GetSysColor(COLOR_3DSHADOW):GetSysColor(COLOR_BTNTEXT)); | ||||
| 				DrawTextExA(pDI->hDC, "#", -1, &pDI->rcItem, DT_LEFT, NULL); | ||||
| 				SetTextColor(pDI->hDC, ((image_path==NULL)||(!hash_enabled))?GetSysColor(COLOR_3DSHADOW):GetSysColor(COLOR_BTNTEXT)); | ||||
| 				DrawTextExA(pDI->hDC, "#", -1, &pDI->rcItem, DT_CENTER, NULL); | ||||
| 				return (INT_PTR)TRUE; | ||||
| 			case SB_SECTION_RIGHT: | ||||
| 				SetTextColor(pDI->hDC, GetSysColor(COLOR_3DSHADOW)); | ||||
|  | @ -2080,45 +2092,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 		} | ||||
| 		break; | ||||
| 
 | ||||
| 	// Detect a click on the "hash" sign in the status bar
 | ||||
| 	case WM_PARENTNOTIFY: | ||||
| 		if (wParam == WM_LBUTTONDOWN) { | ||||
| 			GetClientRect(hMainDialog, &DialogRect); | ||||
| 			MessagePos = GetMessagePos(); | ||||
| 			Point.x = GET_X_LPARAM(MessagePos); | ||||
| 			Point.y = GET_Y_LPARAM(MessagePos); | ||||
| 			ScreenToClient(hDlg, &Point); | ||||
| 			if ( (Point.x >= DialogRect.right - (int)(SB_EDGE_1*fScale)) && | ||||
| 				 (Point.x <= DialogRect.right - (int)(SB_EDGE_2*fScale)) && | ||||
| 				 ((format_thid == NULL) && (image_path != NULL)) ) { | ||||
| 				FormatStatus = 0; | ||||
| 				format_op_in_progress = TRUE; | ||||
| 				no_confirmation_on_cancel = TRUE; | ||||
| 				// Reset all progress bars
 | ||||
| 				SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_NORMAL, 0); | ||||
| 				SetTaskbarProgressState(TASKBAR_NORMAL); | ||||
| 				SetTaskbarProgressValue(0, MAX_PROGRESS); | ||||
| 				SendMessage(hProgress, PBM_SETPOS, 0, 0); | ||||
| 				// Disable all controls except cancel
 | ||||
| 				EnableControls(FALSE); | ||||
| 				InitProgress(FALSE); | ||||
| 				format_thid = CreateThread(NULL, 0, SumThread, NULL, 0, NULL); | ||||
| 				if (format_thid != NULL) { | ||||
| 					PrintInfo(0, -1); | ||||
| 					timer = 0; | ||||
| 					safe_sprintf(szTimer, sizeof(szTimer), "00:00:00"); | ||||
| 					SendMessageA(hStatus, SB_SETTEXTA, SBT_OWNERDRAW | SB_SECTION_RIGHT, (LPARAM)szTimer); | ||||
| 					SetTimer(hMainDialog, TID_APP_TIMER, 1000, ClockTimer); | ||||
| 				} else { | ||||
| 					uprintf("Unable to start checksum thread"); | ||||
| 					FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD); | ||||
| 					PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0); | ||||
| 					format_op_in_progress = FALSE; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 
 | ||||
| 	case WM_COMMAND: | ||||
| 		if ((LOWORD(wParam) >= UM_LANGUAGE_MENU) && (LOWORD(wParam) < UM_LANGUAGE_MENU_MAX)) { | ||||
| 			selected_language = LOWORD(wParam) - UM_LANGUAGE_MENU; | ||||
|  | @ -2341,6 +2314,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 				iso_provided = FALSE;	// One off thing...
 | ||||
| 			} else { | ||||
| 				safe_free(image_path); | ||||
| 				EnableHash(FALSE); | ||||
| 				image_path = FileDialog(FALSE, NULL, (selection_default == BT_IMG)?&img_ext:&iso_ext, 0); | ||||
| 				if (image_path == NULL) { | ||||
| 					CreateTooltip(hSelectISO, lmprintf(MSG_173), -1); | ||||
|  | @ -2446,6 +2420,34 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 			if (format_thid == NULL) | ||||
| 				format_op_in_progress = FALSE; | ||||
| 			break; | ||||
| 		case IDC_HASH: | ||||
| 			if ((format_thid == NULL) && (image_path != NULL) && (hash_enabled)) { | ||||
| 				FormatStatus = 0; | ||||
| 				format_op_in_progress = TRUE; | ||||
| 				no_confirmation_on_cancel = TRUE; | ||||
| 				// Reset all progress bars
 | ||||
| 				SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_NORMAL, 0); | ||||
| 				SetTaskbarProgressState(TASKBAR_NORMAL); | ||||
| 				SetTaskbarProgressValue(0, MAX_PROGRESS); | ||||
| 				SendMessage(hProgress, PBM_SETPOS, 0, 0); | ||||
| 				// Disable all controls except cancel
 | ||||
| 				EnableControls(FALSE); | ||||
| 				InitProgress(FALSE); | ||||
| 				format_thid = CreateThread(NULL, 0, SumThread, NULL, 0, NULL); | ||||
| 				if (format_thid != NULL) { | ||||
| 					PrintInfo(0, -1); | ||||
| 					timer = 0; | ||||
| 					safe_sprintf(szTimer, sizeof(szTimer), "00:00:00"); | ||||
| 					SendMessageA(hStatus, SB_SETTEXTA, SBT_OWNERDRAW | SB_SECTION_RIGHT, (LPARAM)szTimer); | ||||
| 					SetTimer(hMainDialog, TID_APP_TIMER, 1000, ClockTimer); | ||||
| 				} else { | ||||
| 					uprintf("Unable to start checksum thread"); | ||||
| 					FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD); | ||||
| 					PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0); | ||||
| 					format_op_in_progress = FALSE; | ||||
| 				} | ||||
| 			} | ||||
| 			break; | ||||
| 		default: | ||||
| 			return (INT_PTR)FALSE; | ||||
| 		} | ||||
|  |  | |||
|  | @ -357,7 +357,7 @@ enum WindowsVersion { | |||
| extern HINSTANCE hMainInstance; | ||||
| extern HWND hMainDialog, hLogDlg, hStatus, hDeviceList, hCapacity; | ||||
| extern HWND hPartitionScheme, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog; | ||||
| extern HWND hInfo, hProgress, hDiskID; | ||||
| extern HWND hInfo, hProgress, hDiskID, hHash; | ||||
| extern float fScale; | ||||
| extern char szFolderPath[MAX_PATH], app_dir[MAX_PATH], system_dir[MAX_PATH]; | ||||
| extern char* image_path; | ||||
|  |  | |||
							
								
								
									
										16
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | |||
| 
 | ||||
| IDD_DIALOG DIALOGEX 12, 12, 242, 376 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| CAPTION "Rufus 2.3.688" | ||||
| CAPTION "Rufus 2.3.689" | ||||
| FONT 8, "Segoe UI", 400, 0, 0x1 | ||||
| BEGIN | ||||
|     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 | ||||
|  | @ -157,7 +157,7 @@ END | |||
| 
 | ||||
| IDD_DIALOG_XP DIALOGEX 12, 12, 242, 376 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| CAPTION "Rufus 2.3.688" | ||||
| CAPTION "Rufus 2.3.689" | ||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||
| BEGIN | ||||
|     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 | ||||
|  | @ -283,7 +283,7 @@ END | |||
| IDD_DIALOG_RTL DIALOGEX 12, 12, 242, 376 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL | ||||
| CAPTION "Rufus 2.3.688" | ||||
| CAPTION "Rufus 2.3.689" | ||||
| FONT 8, "Segoe UI", 400, 0, 0x1 | ||||
| BEGIN | ||||
|     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 | ||||
|  | @ -415,7 +415,7 @@ END | |||
| IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 242, 376 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL | ||||
| CAPTION "Rufus 2.3.688" | ||||
| CAPTION "Rufus 2.3.689" | ||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||
| BEGIN | ||||
|     LTEXT           "Device",IDS_DEVICE_TXT,9,6,200,8 | ||||
|  | @ -671,8 +671,8 @@ END | |||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 2,3,688,0 | ||||
|  PRODUCTVERSION 2,3,688,0 | ||||
|  FILEVERSION 2,3,689,0 | ||||
|  PRODUCTVERSION 2,3,689,0 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
|  | @ -689,13 +689,13 @@ BEGIN | |||
|         BEGIN | ||||
|             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" | ||||
|             VALUE "FileDescription", "Rufus" | ||||
|             VALUE "FileVersion", "2.3.688" | ||||
|             VALUE "FileVersion", "2.3.689" | ||||
|             VALUE "InternalName", "Rufus" | ||||
|             VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)" | ||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||
|             VALUE "OriginalFilename", "rufus.exe" | ||||
|             VALUE "ProductName", "Rufus" | ||||
|             VALUE "ProductVersion", "2.3.688" | ||||
|             VALUE "ProductVersion", "2.3.689" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|  |  | |||
							
								
								
									
										52
									
								
								src/stdlg.c
									
										
									
									
									
								
							
							
						
						
									
										52
									
								
								src/stdlg.c
									
										
									
									
									
								
							|  | @ -56,7 +56,7 @@ static char* szMessageText = NULL; | |||
| static char* szMessageTitle = NULL; | ||||
| static HWND hBrowseEdit; | ||||
| extern HWND hUpdatesDlg; | ||||
| static WNDPROC pOrgBrowseWndproc; | ||||
| static WNDPROC pOrgBrowseWndproc, pOrgHashWdnProc; | ||||
| static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8}; | ||||
| static BOOL notification_is_question; | ||||
| static const notification_info* notification_more_info; | ||||
|  | @ -395,17 +395,37 @@ fallback: | |||
| 	return filepath; | ||||
| } | ||||
| 
 | ||||
| // Subclass the Hash button, so that it will be active but not display in the UI
 | ||||
| static INT_PTR CALLBACK HashCallback(HWND hCtrl, UINT message, WPARAM wParam, LPARAM lParam) | ||||
| { | ||||
| 	PAINTSTRUCT ps; | ||||
| 	if (message == WM_PAINT) { | ||||
| 		// Even though we really don't want to paint anything, we *MUST* call Begin/EndPaint
 | ||||
| 		BeginPaint(hCtrl , &ps); | ||||
| 		EndPaint(hCtrl, &ps); | ||||
| 		return TRUE; | ||||
| 	} | ||||
| 	return CallWindowProc(pOrgHashWdnProc, hCtrl, message, wParam, lParam); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Create the application status bar | ||||
|  */ | ||||
| void CreateStatusBar(void) | ||||
| { | ||||
| 	RECT rect; | ||||
| 	LONG height; | ||||
| 	int edge[3]; | ||||
| 	HFONT hFont; | ||||
| 
 | ||||
| 	// Create the status bar.
 | ||||
| 	hStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, | ||||
| 		0, 0, 0, 0, hMainDialog, (HMENU)IDC_STATUS, hMainInstance, NULL); | ||||
| 	// Create the status bar (WS_CLIPSIBLINGS since we have an overlapping button)
 | ||||
| 	hStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_TOOLTIPS | WS_CLIPSIBLINGS, | ||||
| 		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hMainDialog, | ||||
| 		(HMENU)IDC_STATUS, hMainInstance, NULL); | ||||
| 
 | ||||
| 	// Keep track of the status bar height
 | ||||
| 	GetClientRect(hStatus, &rect); | ||||
| 	height = rect.bottom; | ||||
| 
 | ||||
| 	// Create 3 status areas
 | ||||
| 	GetClientRect(hMainDialog, &rect); | ||||
|  | @ -417,6 +437,26 @@ void CreateStatusBar(void) | |||
| 	// NB: To add an icon on the status bar, you can use something like this:
 | ||||
| 	//	SendMessage(hStatus, SB_SETICON, (WPARAM) 1, (LPARAM)LoadImage(GetLibraryHandle("rasdlg"),
 | ||||
| 	//		MAKEINTRESOURCE(50), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR | LR_SHARED));
 | ||||
| 
 | ||||
| 	// This is supposed to create a toolips for a statusbar section (when SBARS_TOOLTIPS is in use)... but doesn't :(
 | ||||
| 	//	SendMessageLU(hStatus, SB_SETTIPTEXT, (WPARAM)2, (LPARAM)"HELLO");
 | ||||
| 
 | ||||
| 	// Manually create the Hash button on the status bar
 | ||||
| 	hHash = CreateWindowEx(WS_EX_TRANSPARENT, WC_BUTTON, TEXT("#"), WS_CHILD | WS_VISIBLE | WS_TABSTOP, | ||||
| 		edge[0], rect.bottom - height +1, edge[1] - edge[0] - 1, height - 1, hMainDialog, | ||||
| 		(HMENU)IDC_HASH, hMainInstance, NULL); | ||||
| 
 | ||||
| 	// Subclass our button so that we can hide it from the UI
 | ||||
| 	pOrgHashWdnProc = (WNDPROC)SetWindowLongPtr(hHash, GWLP_WNDPROC, (LONG_PTR)HashCallback); | ||||
| 
 | ||||
| 	// Set the font we'll use to display the '#' sign
 | ||||
| 	hFont = CreateFontA(-MulDiv(10, GetDeviceCaps(GetDC(hMainDialog), LOGPIXELSY), 72), | ||||
| 		0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE, DEFAULT_CHARSET, | ||||
| 		0, 0, PROOF_QUALITY, 0, (nWindowsVersion >= WINDOWS_VISTA)?"Segoe UI":"Arial Unicode MS"); | ||||
| 	SendDlgItemMessageA(hMainDialog, IDC_HASH, WM_SETFONT, (WPARAM)hFont, TRUE); | ||||
| 
 | ||||
| 	// Update our Z-order, just to be on the safe side
 | ||||
| 	SetWindowPos(hStatus, hHash, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -813,6 +853,10 @@ BOOL CreateTooltip(HWND hControl, const char* message, int duration) | |||
| 	toolInfo.cbSize = sizeof(toolInfo); | ||||
| 	toolInfo.hwnd = ttlist[i].hTip;	// Set to the tooltip itself to ease up subclassing
 | ||||
| 	toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS | ((right_to_left_mode)?TTF_RTLREADING:0); | ||||
| 	// set TTF_NOTBUTTON and TTF_CENTERTIP if it isn't a button
 | ||||
| 	if (!(SendMessage(hControl, WM_GETDLGCODE, 0, 0) & DLGC_BUTTON)) | ||||
| 		toolInfo.uFlags |= 0x80000000L | TTF_CENTERTIP; | ||||
| 
 | ||||
| 	toolInfo.uId = (UINT_PTR)hControl; | ||||
| 	toolInfo.lpszText = LPSTR_TEXTCALLBACKW; | ||||
| 	SendMessageW(ttlist[i].hTip, TTM_ADDTOOLW, 0, (LPARAM)&toolInfo); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue