Release Notes BCGControlBar Professional Edition Version: 36.0. Released: 11/26/2024 Auto-inversing icons in the dark themes. Starting this version, you can easily adapt your application icons to the dark themes. The following UI components nicely display the icons through icon inversion: Toolbar and menu (see screenshot): enabled by a new global flag BCGP_AUTOINVERSE_TOOLBAR_ICONS. Ribbon bar (see screenshot): Call a new method "CBCGPRibbonBar::SetIconsAppearance" to specify how the ribbon bar icons look in the dark themes. Also, you can specify this appearance in the Ribbon Designer (Ribbon Bar Properties, "Dark Theme" group). Toolbox (see screenshot): enabled by a new global flag BCGP_AUTOINVERSE_TOOLBAR_ICONS. Push button (see screenshot): call a new method "CBCGPButton::SetAutoInverseIconsInDarkTheme." In addition, you can auto-inverse icons for other controls, such as static images, Outlook panes, and caption bars. We added the demonstration of these new features to BCGPVisualStudioGUIDemo, BCGPMSOfficeDemo, and other examples and samples. Important: Inverting the luminosity automatically doesn't make all icons look good. Please read the following new article, which describes the suggested format and colors of your icons: Images and Icons. BCGSVGSpriteGenerator (see screenshot). This new small application helps you to create and manage SVG icon lists (sprites). With the help of this new utility, you can: Create a new SVG list from existing SVG icons. Export the SVG icon(s) from other SVG lists. Extract the SVG icon to the single SVG file. Please read the following new article to learn how to work with this new tool: Sprite Generator. Ribbon Bar CBCGPRibbonBackstagePagePrint: a new virtual method IsPrinterInitiallySelected allows changing of the initially selected printer. A new method CBCGPRibbonBar::GetControlValue provides an easy way to obtain the ribbon control value (e.g., the text of the ribbon edit box). A new method CBCGPRibbonBar::SetIconsAppearanceInDarkThemes specifies how the ribbon icons look in the dark themes. CBCGPRibbonComboBox additions: Implemented drop-down list group support (see screenshot). To add a group, please call AddGroup or InsertGroup method. Added support for the duplicated combo box items; by default, the items are unique, but you can allow now to insert items with the same name using a new method, EnableDuplicatedItems. This is useful when you create a group with items that have already been added (e.g., "Recent items"). Please look at our sample RibbonGadgets to see these additions in action. CBCGPRibbonFontComboBox: added new helper methods AddFont and InsertFont. With these methods, you have the ability to add various fonts to the designated group. CBCGPRibbonGalleryCtrl: A new method, SetAutoInverseIconsInDarkTheme, has been added to specify whether the gallery icons should be automatically inversed in dark themes. The CBCGPRibbonPaletteButton no longer calculates the gallery icon's relative position (e.g., first in the column) by default. This dramatically improves performance when the gallery has a huge number of items. If for some reason you need this calculation in your custom (owner-draw) gallery, please call a new method, SetCalcIconPositions. Toolbars and Menus CBCGPExplorerToolBar: Improved the pane layout when the toolbar has a stretchable control, such as an address bar or shell breadcrumb. Toolbar customize (chevron) button additions: We have added the option to customize the button style; it can now be either a down arrow with an optional chevron (default), ellipses, or hamburger (see screenshot). You can specify the button appearance for all toolbars using the new member "CBCGPToolbarOptions::m_nCustomizeButtonStyle", or for a specific toolbar using the new, optional parameter "style" of the CBCGPToolBar::EnableCustomizeButton method. We have integrated automatically generated dialogs for off-screen toolbar controls like combo boxes, edit boxes, and others; when there's no room for a toolbar control, we add the menu item to the customization button drop-down menu. In previous versions, developers were required to create a dialog for the menu item action. However, as of this version, we have automated this process. Simply call the new static method CBCGPToolBar::EnableContentDialogsForControlsInMenu enables the automatic launch of the toolbar control dialog when the control button appears on the popup menu (see screenshot). We added the demonstration of this new feature to ToolbarEditBox, ToolbarDateTimePicker, Slider, and other examples and samples. The process of reading the toolbar control's value by ID has been simplified. Just call the new method CBCGPCommandManager::GetControlValue to obtain the command bar control value. You can use the same method to get a ribbon control value. Dialogs and Forms CBCGPFontDialog: The text preview area uses a contrast background to draw the text with a custom color (see screenshot). CBCGPTaskDialog: Added custom control support (see screenshot). The CBCGPTaskDialog class now features the following new virtual methods: OnGetCustomControlSize: This function returns a custom control size, measured in pixels. OnGetCustomControlCaption: The function returns the name of the custom control. OnCreateCustomControl: Create a custom control and return a pointer to this window. OnGetCustomControlInfoTip: This function returns a custom control information tip. Please look at our sample TaskDialogDemo to see this new feature in action. BCGP_MSGBOXPARAMS: A new member, m_dwUserData (DWORD_PTR type), has been added. CBCGPMessageBoxImpl (base class of CBCGPMessageBox and CBCGPMessageLightBox): A new virtual method, IsDrawButtonsBanner, enables you to specify whether the bottom area around the message box buttons is drawn with a special background. CBCGPColorDialog: added a HEX color value edit box to the "Custom" page (see screenshot). This addition simplifies the use of colors in HTML or SVG editors that require the HEX format. CBCGPColorDialog: Currently, you have the option to select the color picker style, which can be either a color box (default style) or a color wheel (see screenshot). A new, optional parameter of the class constructor "pickerType" or a new global variable "m_DefaultColorPickerType" can specify this style. CBCGPImageEditDlg: added support for 32bpp images (see screenshot). You can now clear the transparent areas on the icon, draw smooth ellipses and lines, and correctly save the output icon without losing the semi-transparency. MDI Windows and Tabs CBCGPMDITabParams: a new member m_bHideDisabledScrollButtons establishes the visibility of the disabled horizontal scroll buttons. This member is valid only if there is no document menu button on the right of the MDI tabs. CBCGPMDIChildWnd: A new registered message, BCGM_MDI_TOP_LEVEL_FRAME_CHANGED, is sent to all child views when the MDI top-level frame is changed (e.g., the MDI child frame is torn off). A new virtual method, OnParentFrameChanged, sends this message. Tasks Pane and Toolbox CBCGPTasksPane: Added support for the simplified icons in the navigation toolbar (see screenshot). Call a new method EnableNavigationToolbarSimplifiedIcons to enable or disable the simplified icons, and AreNavigationToolbarSimplifiedIconsEnabled to know whether the icons are simplified. Our sample TasksPane demonstrates this new feature. CBCGPToolBox and CBCGPToolBoxEx classes: a new method the SetNotifyCommandID method enables you to specify the ID of the command that the toolbox sends when an item is clicked. By default, this ID is the same as the toolbox's ID. Visual Manager and Themes Appearance of components in the Windows contrast themes. In this version, we meticulously examined the application's appearance under contrast themes, such as Windows 11 Desert or Dusk, and implemented numerous improvements: The framework has now automatically simplified the icons of the highlighted area to contrast with the background (see screenshot). If, for some reason, you don't like this behavior, please set a new global flag, globalData.m_bAutoSimplifyActiveIcons, to FALSE. We have improved the appearance of many of our controls in the contrast themes. In the new visual themes, such as Visual Studio 2022 or Office 2021, CBCGPSpinButtonCtrl features a shared border with an edit box (see screenshot). This makes control look closer to the modern-looking applications. CBCGPTabView, CBCGPGanttView, CBCGPDiagramView, CBCGPPlannerManagerView and CBCGPGridView: The non-client area is now drawn using a visual theme-based frame. With some of our improvements, the visual manager implementing the Office 2021-2024 dark gray theme now resembles MS Office applications (see screenshot). Grid and Report Controls A new method, CBCGPGridCtrl::EnableColumnsResizeInClientArea, enables you to turn on or off the splitter between columns within a grid client area. Calling this method doesn't affect the grid header. A new helper method CBCGPGridRow::IsAutoGroup tells whether the grid row was automatically created by the report control. The capability to search in the row names, including grid caption labels, has been integrated. To enable this option, please use the new flag: BCGP_GRID_FINDREPLACE_PARAM::FR_LOOKIN_ROWLABELS. Alternatively, you may always enable this option by calling the new method CBCGPGridCtrl::EnableSearchInRowName. A new method CBCGPGridCtrl::GetGroupByBoxRect() retrieves the bounding rectangle of a Group-By-Box. Property Grid Control Added a color properties format: the format can be either COLOR_PROPS_DEFAULT (AAAAAA), COLOR_PROPS_WEB (#aaaaaa), or COLOR_PROPS_CODE (0xaaaaaa). Our example, BCGPControls, demonstrates this new feature. Call the new method SetColorPropertiesFormat to specify this format or GetColorPropertiesFormat to obtain it. CBCGPPropertyManager::LoadValuesFromRegistry has a new, optional parameter, bNotifyWithoutControl (FALSE by default). If the property manager doesn't have the corresponding property grid control and this parameter is TRUE, the OnPropertyChanged method still triggers. Controls CBCGPColorPickerCtrl introduces the following improvements and enhancements (please look at our BCGPControls example to examine these additions in action): We have added a new control style, PICKER_WHEEL (see screenshot). You can customize the wheel appearance using the new class methods SetStartAngle, SetVerticalAlignment, and SetHorizontalAlignment. We have implemented support for multiple colors, specifically for the color wheel. Call the new method SetColors or SetColorsHLS to specify the color array. In addition, you can enable lines drawn from the color marker to the wheel center and synchronize the control luminosity with the selected color luminosity. The Y axis now renders the color picker in the hue mode with a single saturation. Improved control drawing performance. You don't have to specify the control's palette anymore; the default (system) palette will be used by default. CBCGPTreeCtrlEx additions: DeleteItem and DeleteAllItems have a new, optional parameter, "bNotify" (the default value is FALSE). If this parameter is TRUE, a TVN_DELETEITEM notification will be sent upon the tree item(s) destroying (the behavior similar to the Windows tree control). SetExpandNewItems determines whether a newly added tree folder should expand by default. We have added support for the custom tooltips (TVS_INFOTIP style). The tree control's keyboard navigation performance with a large number of items has improved. A new class CBCGPRatingCtrl implements a rating control (see screenshot). Please look at our BCGPControls example to see this new control in action. CBCGPButton: Added a new method SetAutoInverseIconsInDarkTheme, which specifies whether the button's icon should be automatically inversed in the dark themes. CBCGPStatic: A new method, SetAutoInverseIconsInDarkTheme, has been added to specify whether the picture should be automatically inversed in dark themes. CBCGPMaskEdit has improved the pasting operation's behavior by only pasting the "valued" part (without the mask) if the pasted text shares the same prefix as the control's mask. Shell Management CBCGPShellBreadcrumb: The SetRelatedShellList method introduces a new, optional parameter called bSetFocusToShellList, which defaults to FALSE. When this parameter is TRUE, calling this method immediately sets the focus to the related shell list control. CBCGPShellBreadcrumb: The SelectShellItem method introduces bExactPath, a new optional parameter that defaults to TRUE. The SelectShellItem method will select the most matched path when this parameter is FALSE. CBCGPShellBreadcrumb enhances network management support by displaying the first permissible node, such as "Network," in the shell breadcrumb control when the user lacks access to the typed network node (e.g., requiring the password dialog). CBCGPShellManager: a new global flag m_bAutoresolveUNCPaths specifies whether the path starting from "\\" should be mapped to the path starting from the mapped network drive. By default, this flag is TRUE. CBCGPShellTree has added an intuitive method to increase the shell tree item height, making this control more touch-friendly. You can either set a new global flag CBCGPShellTree::m_nItemExtraHeightDefault (4 pixels by default) or call the new method SetItemExtraHeight to specify this value for certain controls. Graphics Manager CBCGPColor: implemented a new method named InvertLuminosity, which reverses the color luminosity. CBCGPBrush: implemented a new method named InvertLuminosity, which reverses the brush luminosity. CBCGPStrokeStyle: a new method SetMiterLimit enables the modification of the stroke miter limit for existing stroke styles. CBCGPSVGImage: implemented a new method named InvertLuminosity, which reverses the SVG icon luminosity. CBCGPSVGImage: ExportToFile method saves SVG icon now if extension of the out path is ".svg." This addition allows extracting an SVG icon from the SVG sprite. MSAA and CodedUI Tests If a tile in WinUI lacks a name, the tooltip text will serve as its accessibility name. CBCGPGridCtrl: improved the active accessibility support for the grid header, which includes multi-line headers, grid filter bar, and group-by-box area. Please call CBCGPGridCtrl::EnableAdvancedGridAccessibility to activate this new option. The CBCGPGridCtrl::IsAdvancedGridAccessibilityEnabled method indicates the status of this option's activation. When this option is enabled, the grid has an additional accessibility hierarchy level of the corresponding grid objects. Edit control Added ability to automatically adjust colors of the editor blocks in the dark themes (see screenshot). The method CBCGPEditCtrl::SetLineColorMarker has a new, optional parameter bAutoDarkBackground (default value is FALSE). Please look at our EditorMarkers sample to see this new feature in action. Added support for the default context menu (with the standard commands such as "Cut", "Copy", "Paste", and "Select All"). Call the new CBCGPEditCtrl method EnableDefaultContextMenu to enable this option. Our sample ResizableForm demonstrates this new feature. Revised the control's horizontal scrolling. The new implementation conceals the unnecessary horizontal scrollbar and determines the actual maximum scroll width during text editing. Call the new CBCGPEditCtrl method SetFixedHorizontalScrollRange to enable this new behavior. By default, the editor uses the old implementation. We have simplified the use of the edit control in dialogs and forms by creating it with the parent dialog font, default keyboard accelerators, and a context menu. See our sample application, ResizableForm, to see how it works. The new method of the CBCGPEditCtrl class SetSideBarWidth specifies the side bar width. GetSideBarWidth returns a previously specified width. Miscellaneous We have updated the internal icons for the following UI components. Editable list box (see screenshot). Keyboard map dialog (see screenshot). Print preview toolbar (see screenshot). Image editor dialog (see screenshot). Tasks pane navigation toolbar (see screenshot). These icons support auto-inverse and are fully ready for both light and dark themes. CBCGPWinUITiles: We've switched to a lightweight font for the group captions. If for some reason you are preferring the former look, please set a new global flag CBCGPWinUITiles::m_bUseLightWeightCaptionFonts to FALSE. CBCGPVisualContainer now supports visual themes for the default background and outline colors. Call a new method EnableVisualManagerTheme to enable or disable the visual theme support, and IsVisualManagerTheme to know whether the container supports visual themes. CBCGPTabWnd: Added support for the automatically hiding of the horizontal scroll bar (shared with the active embedded window) when the global flag m_bAutoHideScrollBars is TRUE (see screenshot). For your convenience, we have implemented a new set of CView-derived classes: CBCGPListView: contains CBCGPListCtrl window. CBCGPShellView: contains CBCGPShellList window. CBCGPTreeView: contains CBCGPTreeCtrl window. CBCGPWinUITilesView: contains CBCGPWinUITilesCtrl window. Please look at our new sample application, ViewsDemo (see screenshot) to learn how to work with these new classes. We have also added all these views to our Application Wizards. CBCGPInfoBoxView: We have implemented a horizontal padding to create a gap between the info box and the left and right edges of the view. Call a new method, SetHorizontalPadding, to specify the padding and GetHorizontalPadding to obtain it. CBCGPRegistry: We have implemented a registry value type checking in the Read(LPCTSTR pszKey, CString& sVal) method. This prevents error messages when the registry value has an incorrect (unexpected) type. When the type is incorrect, the last error is ERROR_DATATYPE_MISMATCH. The CBCGPMultiViewFrameWnd class now includes two new virtual methods: OnBeforeCreateView, which executes before the creation of a view, and OnAfterCreateAllViews, which executes after the creation of all views. The CBCGPMultiViewFrameWnd has incorporated a new member, m_bUseNextPrevPaneCommandsForViewsNavigation, that determines whether to utilize the standard pane navigation commands, typically mapped to the F6 and Shift+F6 keyboard shortcuts, for view navigation. CBCGPCaptionBar: enhanced its caption bar icon support, allowing you to assign an image list using the SetImageList method and specify the currently selected icon using the SetImageIndex method. CBCGPOutlookBarPane additions: A new method EnsureVisible makes the specified pane item fully visible. We have improved the support for pane icons: you can load the icon list using the new method LoadIcons and add an item with the icon index. Integration Wizard: added options for building libraries and DLLs for ARM and ARM64 platforms (Visual Studio 2017, 2019, and 2022; see screenshot). In the previous product versions, customers were able to build the libraries for these platforms only in the Visual Studio environment. Examples and Samples BCGPControls: added demonstrations of the new rating control, new features in the color pickers, extended tree control custom tooltips, and auto-inversed icons in the push button and static SVG image. BCGPExplorer: illustrates how to use the new CBCGPShellView class. BCGPGridExample: a rating cell (custom) is based now on the new CBCGPRatingCtrl. BCGPOutlookDemo: demonstrates a new, optimal way to initialize the shortcut pane icons. BCGPOrganizer: illustrates how to use the new CBCGPWinUITilesView class (on the start page). A new sample application ViewDemo illustrates how to use the various views. This sample replaces the retired OutlookMultiViews sample. MDITabsDemo: added demonstration of hiding disabled scroll buttons. EditorMarkers: added demonstration of auto-inverse of the colored blocks in the dark themes. Slider, ToolbarDateTimePicker, and ToolbarEditBox samples now include a demonstration of off-screen toolbar button dialogs. TasksPane: added demonstration of the navigation toolbar's simplified icons. ThemedFileDialog: added demonstration of auto-resolving UNC paths. TaskDialogDemo demonstrates now how to add a custom control (edit box) to the task dialog. ResizableForm: added demonstration of using the CBCGPEditCtrl inside the dialog. RibbonGadgets: we replaced the outdated PNG images with new SVG icons that fit well with dark themes. BCGPVisualStudioGUIDemo: we replaced the outdated png images with new svg icons that fit well with dark themes. Now, the icons in the toolbar, toolbox, and tree have the same look as in the Visual Studio 2022 environment. BCGPMSOfficeDemo: This example shows how ribbon bar icons now appear in dark themes; all ribbon icons have undergone redesigns and look good in all visual themes. In addition, we have added a demonstration of how to create a font combo box with the groups ("Theme fonts" and "All fonts"). Fixes CBCGPTasksPane: We have fixed the incorrect behavior of the EnsureVisible method when the pane has a zero size. CBCGPTabWnd: We have resolved the issue of incorrect tab frame redrawing in certain visual themes. CBCGPEditBrushDlg: When the application language changes, the language-specific resources reload. CBCGPDockManager: If BuildControlBarsMenu creates an empty menu, the OnControlBarContextMenu method no longer creates the popup context menu. CBCGPChartVisualObject: The chart table's interlace fill brush now recreates itself when the chart's visual manager theme changes. CBCGPChartView has addressed an issue with incorrect redrawing on the chart border edges in some visual themes. CBCGPCircularGaugeImpl, CBCGPLinearGaugeImpl, and CBCGPKnob have addressed an issue with the incorrect hit testing of the gauge pointer in the interactive mode. CBCGPComboBox: In multi-monitor environments, the control always removes the CBS_NOINTEGRALHEIGHT style; using this style results in an incorrect drop-down height after changing the DPI. CBCGPGanttControl has addressed some issues with incorrect header height in multi-monitor environments; the header height is now calculated correctly after changing the DPI. CBCGPSVGImage: addressed some issues with drawing SVG icons with custom line dashes. CBCGPSVGImage: The node opacity is calculated correctly now when the opacity is specified in the several levels of the styles. CBCGPSVGImage: The color transformation methods, such as MakeDarker or ReplaceColors, are now functioning correctly for the simplified SVG icons. CBCGPTabWnd: fixed bug with incorrect active tab color after switching between the high-contrast Windows themes (flat tab style only). Now, when the user changes the top-level frame (e.g., tear off the MDI child frame), the built-in find/replace dialog automatically closes. CBCGPLightBoxDialog: We have fixed a bug with a custom border color under Windows 11. In the previous version, the default frame color was always used, even when a custom color was specified. The framework now automatically redraws the active modal dialog's non-client area when you change the Windows immersive (accent) color. CBCGPGridCtrl: GetSelectedItems ignores duplicated items when the merged cell is selected. CBCGPButton: The issue with incorrect scaling of the standard (built-in) icon in the multi-monitor environment has been addressed. The SVG Gaussian blur filter has an improved algorithm for calculating the filter deviation, which makes the SVG images that use it appear much better.