【发布时间】:2019-07-23 14:20:50
【问题描述】:
我正在开发一个旧的 C++ MFC 应用程序,使用 CToolbar 来编译 Visual Studio 2017 的工具栏。
当应用程序在运行时按预期在清单设置(项目/属性/配置属性/清单工具/输入和输出/DPI 意识)中设置为“高 DPI 意识”时,工具栏似乎随主监视器 DPI 缩放Windows 10 上的缩放因子,大约是菜单栏文本的一半。
在 Windows 7 上,这种缩放似乎不会发生。工具栏在 100% DPI 下与菜单栏文本的高度大致相同,并且在不同 DPI 设置下保持相同的像素高度。使用或不使用 XP 风格的 DPI 缩放没有区别。
Windows 7 上的底层工具栏通用控件是否根本无法实现高 DPI 缩放?是否有有效的方法来调整这一点并使 Windows 7 和 Windows 10 工具栏的大小更加一致?
我可以使用 Visual Studio 2017 在清单中以高 DPI Awareness 重新编译 DOCKTOOL MFC 示例来重现相同的问题。
https://github.com/Microsoft/VCSamples/tree/master/VC2010Samples/MFC/general/docktool
// code excerpts from DOCKTOOL below:
class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
CToolBar m_wndMainBar;
// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//....
if (!m_wndMainBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_SIZE_DYNAMIC |
CBRS_TOP | ((m_bToolTips)?(CBRS_TOOLTIPS | CBRS_FLYBY):0), IDW_MAIN_BAR) ||
!m_wndMainBar.LoadBitmap(
(m_bColor)?IDR_COLOR_MAINBAR:IDR_MONO_MAINBAR) ||
!m_wndMainBar.SetButtons(MainButtons, sizeof(MainButtons)/sizeof(UINT)))
{
TRACE0("Failed to create mainbar\n");
return -1; // fail to create
}
【问题讨论】:
标签: c++ visual-studio mfc highdpi