VOID ToolbarLoadSettings( VOID ) { RebarLoadSettings(); if (ToolStatusConfig.ToolBarEnabled && ToolBarHandle) { INT index = 0; INT buttonCount = 0; buttonCount = (INT)SendMessage(ToolBarHandle, TB_BUTTONCOUNT, 0, 0); for (index = 0; index < buttonCount; index++) { TBBUTTONINFO buttonInfo = { sizeof(TBBUTTONINFO), TBIF_BYINDEX | TBIF_STYLE | TBIF_COMMAND | TBIF_STATE }; // Get settings for first button if (SendMessage(ToolBarHandle, TB_GETBUTTONINFO, index, (LPARAM)&buttonInfo) == -1) break; // Skip separator buttons if (buttonInfo.fsStyle == BTNS_SEP) continue; // Add the button text buttonInfo.dwMask |= TBIF_TEXT; buttonInfo.pszText = ToolbarGetText(buttonInfo.idCommand); switch (DisplayStyle) { case TOOLBAR_DISPLAY_STYLE_IMAGEONLY: buttonInfo.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE; break; case TOOLBAR_DISPLAY_STYLE_SELECTIVETEXT: { switch (buttonInfo.idCommand) { case PHAPP_ID_VIEW_REFRESH: case PHAPP_ID_HACKER_OPTIONS: case PHAPP_ID_HACKER_FINDHANDLESORDLLS: case PHAPP_ID_VIEW_SYSTEMINFORMATION: buttonInfo.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT; break; default: buttonInfo.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE; break; } } break; case TOOLBAR_DISPLAY_STYLE_ALLTEXT: buttonInfo.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT; break; } switch (buttonInfo.idCommand) { case PHAPP_ID_HACKER_SHOWDETAILSFORALLPROCESSES: { if (PhGetOwnTokenAttributes().Elevated) { buttonInfo.fsState &= ~TBSTATE_ENABLED; } } break; case PHAPP_ID_VIEW_ALWAYSONTOP: { // Set the pressed state if (PhGetIntegerSetting(L"MainWindowAlwaysOnTop")) { buttonInfo.fsState |= TBSTATE_PRESSED; } } break; case TIDC_POWERMENUDROPDOWN: { buttonInfo.fsStyle |= BTNS_WHOLEDROPDOWN; } break; } // Set updated button info SendMessage(ToolBarHandle, TB_SETBUTTONINFO, index, (LPARAM)&buttonInfo); } // Resize the toolbar SendMessage(ToolBarHandle, TB_AUTOSIZE, 0, 0); } if (ToolStatusConfig.ToolBarEnabled && RebarHandle && ToolBarHandle) { UINT index; REBARBANDINFO rebarBandInfo = { sizeof(REBARBANDINFO), RBBIM_IDEALSIZE }; if ((index = (UINT)SendMessage(RebarHandle, RB_IDTOINDEX, REBAR_BAND_ID_TOOLBAR, 0)) != UINT_MAX) { // Get settings for Rebar band. if (SendMessage(RebarHandle, RB_GETBANDINFO, index, (LPARAM)&rebarBandInfo)) { SIZE idealWidth = { 0, 0 }; // Reset the cxIdeal for the Chevron if (SendMessage(ToolBarHandle, TB_GETIDEALSIZE, FALSE, (LPARAM)&idealWidth)) { rebarBandInfo.cxIdeal = (UINT)idealWidth.cx; SendMessage(RebarHandle, RB_SETBANDINFO, index, (LPARAM)&rebarBandInfo); } } } } // Invoke the LayoutPaddingCallback. SendMessage(PhMainWndHandle, WM_SIZE, 0, 0); }
VOID LoadToolbarSettings( VOID ) { RebarLoadSettings(); if (EnableToolBar && ToolBarHandle) { ULONG index = 0; ULONG buttonCount = 0; buttonCount = (ULONG)SendMessage(ToolBarHandle, TB_BUTTONCOUNT, 0, 0); for (index = 0; index < buttonCount; index++) { TBBUTTONINFO button = { sizeof(TBBUTTONINFO) }; button.dwMask = TBIF_BYINDEX | TBIF_STYLE | TBIF_COMMAND | TBIF_STATE; // Get settings for first button if (SendMessage(ToolBarHandle, TB_GETBUTTONINFO, index, (LPARAM)&button) == -1) break; // Skip separator buttons if (button.fsStyle == BTNS_SEP) continue; // TODO: We manually add the text above using TB_ADDSTRING, // why do we need to set the button text again when changing TBIF_STYLE? button.dwMask |= TBIF_TEXT; button.pszText = ToolbarGetText(button.idCommand); if (button.idCommand == PHAPP_ID_VIEW_ALWAYSONTOP) { // Set the pressed state if (PhGetIntegerSetting(L"MainWindowAlwaysOnTop")) { button.fsState |= TBSTATE_PRESSED; } } switch (DisplayStyle) { case ToolbarDisplayImageOnly: button.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE; break; case ToolbarDisplaySelectiveText: { switch (button.idCommand) { case PHAPP_ID_VIEW_REFRESH: case PHAPP_ID_HACKER_OPTIONS: case PHAPP_ID_HACKER_FINDHANDLESORDLLS: case PHAPP_ID_VIEW_SYSTEMINFORMATION: button.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT; break; default: button.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE; break; } } break; case ToolbarDisplayAllText: button.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT; break; } // Set updated button info SendMessage(ToolBarHandle, TB_SETBUTTONINFO, index, (LPARAM)&button); } // Resize the toolbar SendMessage(ToolBarHandle, TB_AUTOSIZE, 0, 0); //InvalidateRect(ToolBarHandle, NULL, TRUE); } if (EnableToolBar && RebarHandle) { INT index; REBARBANDINFO rebarBandInfo = { REBARBANDINFO_V6_SIZE }; rebarBandInfo.fMask = RBBIM_IDEALSIZE; index = (INT)SendMessage(RebarHandle, RB_IDTOINDEX, (WPARAM)BandID_ToolBar, 0); // Get settings for Rebar band. if (SendMessage(RebarHandle, RB_GETBANDINFO, index, (LPARAM)&rebarBandInfo) != -1) { SIZE idealWidth; // Reset the cxIdeal for the Chevron SendMessage(ToolBarHandle, TB_GETIDEALSIZE, FALSE, (LPARAM)&idealWidth); rebarBandInfo.cxIdeal = idealWidth.cx; SendMessage(RebarHandle, RB_SETBANDINFO, index, (LPARAM)&rebarBandInfo); } } // Invoke the LayoutPaddingCallback. SendMessage(PhMainWndHandle, WM_SIZE, 0, 0); }