Release Notes BCGControlBar Professional Edition Version: 33.0. Released: 05/30/2022 Implemented support for per monitor DPI awareness (see screenshot). All library controls are automatically scaled when user moves the application frame, dialog or floating pane to monitor with other DPI or change the current display scale. To enable this feature, you've to specify Per-Monitor (V2) DPI Awareness (since you cannot do it in the Visual Studio project settings, please use an external manifest file - see our examples/samples or build a new application using BCGControlBar Pro Application Wizard). Although implementation of this feature required a lot of changes in the library core, we've preserved a full backward-compatibility and generally, you don't have to make any significant changes in your source code. Please take a look at the following new article to learn how to update your existing application - PerMonitorDPI. Ribbon Bar CBCGPBaseRibbonElement: a new virtual method OnDPIChanged is called when DPI is changed or window was moved to another monitor with different DPI. Override this method if you need to recalculate your custom dimensions or reload DPI-specific resources. Added simplified mode options: call new method CBCGPRibbonBar::SetSimplifiedModeOptions to specify these options and CBCGPRibbonBar::GetSimplifiedModeOptions to obtain them. CBCGPRibbonBar::GetImagesLuminosity method is a virtual now and it has a new, optional parameter CBCGPRibbonCategory* pCategory - category where icons luminosity needs to be changed. Override this method if you need to change the icons luminosity for specific category. Toolbars and Menus CBCGPOutlookBarPane: added new method SetFirstVisibleButton. Call this method to scroll the pane vertically to the specific button. A new method GetFirstVisibleButton returns an index of the first visible button. CBCGPToolBar: GetMenuImageSize has a new, optional parameter CWnd* pParent. CBCGPToolbarButton: a new virtual method OnDPIChanged is called when DPI is changed or parent toolbar was moved to another monitor with different DPI. Override this method if you need to recalculate your custom dimensions or reload DPI-specific resources. CBCGPToolBar::ResetAllImages has a new, optional parameter bResetSize (TRUE by default). If this parameter is FALSE, CBCGPToolBar::m_sizeImage remains unchanged after calling this method. Docking Panes CBCGPDockingControlBar: improved docking pane icons support. Instead of assigning icon to pane using SetIcon method, you can specify an icons list in your CMainFrame class constructor (call new method SetDockingBarsIconList) and assign icon to the pane with a help of new method CBCGPDockingControlBar::SetIconIndex. The icon(s) will be automatically rescaled when you move the pane to display with a different DPI. CBCGPCaptionButton: added new optional parameter CWnd* pWndParent to the class constructors (required for DPI-aware application). CBCGPSmartDockingParams has a new member m_bDPIAware. If this member is TRUE, m_sizeTotal, m_nPadding and m_nCentralGroupOffset will be automatically scaled. Gauge Controls A new class CBCGPCircularProgressIndicatorRendererBase allows to implement a window-less circular progress indicator. Please take a look at RibbonGadgets sample to see how to add indicator to the Ribbon custom element. CBCGPBaseVisualCtrl (base class of all gauge control classes): a new virtual method OnDPIChanged is called when DPI is changed or window was moved to another monitor with different DPI. Override this method if you need to recalculate your custom dimensions or reload DPI-specific resources. CBCGPBaseVisualObject (base class of all gauge implementation and container classes): a new virtual method OnDPIChanged is called when DPI is changed or parent window was moved to another monitor with different DPI. Override this method if you need to recalculate your custom dimensions or reload DPI-specific resources. CBCGPGaugeImpl: BCGP_SUB_GAUGE_POS enumerator has a new value - BCGP_SUB_GAUGE_CENTER (sub-gauge is located at the center of the parent gauge - see screenshot). Visual Manager and Themes CBCGPWinXPThemeManager: added list of DPI-specific theme managers (CBCGPWinThemes class). When some GUI element is rendered using Windows theme API, DPI-specific theme will be used. CBCGPVisualManager: added a new virtual method OnDPIChanged. This method is called by the framework when the main application window is moved to display with other scale (DPI). Info box: improved default colors in some visual themes (see screenshot). Grid and Report Controls CBCGPGridRow and CBCGPGridItem: a new virtual method OnDPIChanged is called when DPI is changed or window was moved to another monitor with different DPI. Override this method if you need to recalculate your custom dimensions or reload DPI-specific resources. New flag ExportOptions::EF_IncludeRowHeader allows to export content of a leftmost column (row header), this flag is used with methods CBCGPGridCtrl::ExportToHTML, CBCGPGridCtrl::ExportRangeToText, CBCGPGridCtrl::ExportRangeToHTML and CBCGPGridCtrl::ExportToCSV. Improved MSAA support in CBCGPGridRow. CBCGPGridCtrl: a new method IsGridItemBordersEnabled tells who is responsible for the grid item border drawing (grid or grid item). Desktop Alert Window Implemented Desktop Alert title (see screenshot): Added new member m_strTitle to CBCGPPopupWndParams structure. CBCGPPopupWindowColors has a new member clrTitle - specifying title foreground color. Please take a look at PopupDemo sample to see this new feature in action. Implemented ability to close popup window when owner window is changed (e.g., moved or resized). Call new method CBCGPPopupWindow::SetCloseOnOwnerChange to enable this feature. Added tooltip-style visual theme (BCGPPopupWindowTheme::BCGPPopupWindowTheme_VisualManagerToolTip). Controls CBCGPInfoBoxRenderer has the following additions and improvements: Class constructor has a new, optional parameter CWnd* - a pointer to window where info-box is displayed. This is important to specify this window to correct drawing in multi-DPI environment. Added new member m_bAlwaysUnderlineLink: set it to FALSE if you wish to underline the link only if link is hovered. A new member m_bVisualThemeColors specifies whether control is rendered using a currently selected visual theme. CBCGPEdit: added support for themed (visual manager-based) balloon tooltips (appeared upon receiving EM_SHOWBALLOONTIP messages, see screenshot). If you wish to turn-off this feature and display default tooltips, please set a new global flag globalData.m_bThemedBalloonTips to FALSE. CBCGPStatic: added a new attribute m_bDPIAwareIcon. If this member is TRUE, the icon will be correctly drawn after changing DPI value (you have to call SizeToContent method after DPI changing). Miscellaneous Added new classes CBCGPWindowDC (derived from CWindowDC), CBCGPPaintDC (derived from CPaintDC) and CBCGPClientDC (derived from CClientDC). Use these classes specifying a current window used for DPI-specific measurements. BCGPGLOBAL_DATA contains a list of DPI-specific data such as fonts, cursors, icons and cached dimensions. All DPI-specific members are located in new structure BCGP_GLOBAL_DATA_DPI. If you need to access it, please call globalData.Get(CWnd*) or globalData.Get(nDPI). Added new BCGPChartLayout::LegendPosition values: LP_TOPLEFT LP_BOTTOMRIGHT LP_BOTTOMLEFT LP_TOPRIGHT_HORZ LP_TOPLEFT_HORZ LP_BOTTOMRIGHT_HORZ LP_BOTTOMLEFT_HORZ Please take a look at BCGPChartExample application to see this new feature in action. Added DWM PM support for CBCGPGlobalUtils methods: GetSystemBorders has a new optional parameter nDPI. A new method GetDpiForWindow returns specific window DPI. All ScaleByDPI methods have a new optional parameter const CWnd*. Added a new method GetSystemMetricsForDPI. In addition, the following new methods return DPI-specific global members: GetSizeAllCursor, GetMoveTabCursor, GetNoMoveTabCursor, GetSelectRowCursor, GetMagnifyCursor, GetFontRegular, GetFontTooltip, GetFontBold, GetFontUnderline, GetFontDefaultGUI, GetFontDefaultGUIUnderline, GetFontVert, GetFontVertCaption, GetFontSmall, GetFontMarlett, GetFontCaption, GetFontHeader, GetFontDefaultGUIBold, GetFontGroup, GetFontGroupBold, GetFontWingdings, GetTextHeight, GetTextWidth, GetCaptionTextWidth, GetCaptionTextHeight, GetTextMargins. A new class CBCGPWindowDpiState allows to specify window that will be used for DPI-specific measurements. CBCGPTextFormat::Scale has a new, optional parameter bFromOriginal. If this parameter is FALSE, the scaling will be based on the current text size. CBCGPMessageBox: added new global flag m_bDrawSpecialAreaOnNC (default is TRUE). Set this flag to FALSE if you don't wish to fill message box buttons area with alternate background color. CBCGPProp: a new virtual method OnDPIChanged is called when DPI is changed or parent property grid window was moved to another monitor with different DPI. Override this method if you need to recalculate your custom dimensions or reload DPI-specific resources. CBCGPToolBarImages: added DPI PM support. Call new method SetDPIAwarePM (when image list is empty!) and, if current DPI is not default and Per-Monitor (V2) DPI Awareness is enabled, a temporary scaled image list will be used for the icons rendering. This behavior is automatically applied to all toolbar, ribbon bar and menu images. CBCGPSVG: added support for "baseline-shift" style attribute and relative (with trailing '%' sign) "font-size" attribute. CBCGPEditCtrl: a new method SetTextLeftMargin allows to specify a distance between text and left-side bar. By default, this value is 0. Application Wizard for Visual Studio 2017 - 2022: Added option Per Monitor High DPI Awareness V2 (see screenshot). When option above is checked (by default), the project is Dpi-aware and all icons/images are automatically reloaded when the main application window is moved to display with other Dpi. Docking pane icons were replaced with a shared image list and each pane has a corresponding icon index now. Examples and Samples Added Per-Monitor (V2) DPI Awareness support for all examples and samples. BCGPChartExample: added new legend positions demonstration (Chart Legend view). BCGPGridExample: added demonstration how to create DPI-aware custom cells. AnimationManagerDemo: animation canvas window is DPI-aware now. RibbonGadgets: added demonstration how to add a circular progress to the ribbon elements. BCGPChartExample: Chart Data Binding view is using ADO instead of ODBC now. BCGPControls: added new Info Box features demonstration. BCGPGaugesDemo: added demonstration how to add sub-gauge to the center of circular gauge. PopupDemo: added desktop alert title demonstration. SmartDockingDemo: demonstrates how to create DPI-aware custom docking markers. RibbonSimplifiedMode: demonstrates how to use a panel launch button in the simplified mode. Fixes CBCGPButton: addressed issue with incorrect capture releasing when another window was captured inside button click message handler. CBCGPChartView: addressed some issues with a view scrolling. CBCGPComboBox: addressed issue with incorrect control subclassing when BCGPModifyStyle method is called. CBCGPEdit: addressed issue with incorrect drawing of the border when control has spin buttons. Toolbar customize button: improved appearance when DPI is 175% or more. Fixed bug with unresolved network path in CBCGPShellBreadcrumb::SelectPath method. CBCGPBrowseForFolderDlg: addressed issue with incorrect look of Explorer-style tree buttons in some visual themes. CBCGPSwitchImpl: addressed some issues with setting value when control animation is active. CBCGPToolTipCtrl: addressed issue with Z-order when tooltip is displayed on inactive frame. CBCGPPopupMenu: addressed issue with unexpected closing popup menu when user moves mouse cursor near disabled menu item (Windows 11 + rounded corners only). CBCGPGridCtrl: addressed issue with incorrect keyboard processing in the context menu opened when the filter bar is active. CBCGPGanttChart: addressed issue with incorrect hierarchy after calling InsertItem method (in some cases). Notification badges: addressed issue with incorrect (white) foreground color when a badge has a light background color. Visual themes: addressed issue with incorrect check box / radio button default size in some visual managers (DPI 150% or higher). CBCGPPropList: addressed issue with incorrect fonts in the property combo box and search box after changing visual theme. CBCGPSVG: addressed some issues with drawing nested text blocks. CBCGPRibbonBar: addressed issue with incorrect in some cases minimize/restore Ribbon button tooltip. CBCGPGridFilterEdit: addressed issue with pressing Esc in some cases.