MFC子对话框意外更改大小

MFC子对话框意外更改大小,mfc,internationalization,dialog,resize,Mfc,Internationalization,Dialog,Resize,我的应用程序使用堆叠对话框在多个位置的选项之间进行选择。例如,下面的对话框使用两个堆叠对话框: 要在“拍摄方法”之间进行选择,用户从右下角的下拉列表中进行选择。这将更改其上方的子对话框 “高级选项”框(位于子对话框中)在简化界面和更完整界面之间进行选择 在每种情况下,堆叠对话框都是使用图片对象作为父对话框中的占位符来实现的。选择页面后,将调用SetWindowPos来移动/调整子对话框(pNewPage)的大小以适合占位符 // Show the newly selected page pNe

我的应用程序使用堆叠对话框在多个位置的选项之间进行选择。例如,下面的对话框使用两个堆叠对话框:

  • 要在“拍摄方法”之间进行选择,用户从右下角的下拉列表中进行选择。这将更改其上方的子对话框
  • “高级选项”框(位于子对话框中)在简化界面和更完整界面之间进行选择
  • 在每种情况下,堆叠对话框都是使用图片对象作为父对话框中的占位符来实现的。选择页面后,将调用SetWindowPos来移动/调整子对话框(pNewPage)的大小以适合占位符

    // Show the newly selected page
    pNewPage->ShowWindow (SW_SHOW) ;
    pNewPage->SetFocus () ;
    
    // Position the newly selected page
    CRect rcDlgArea ;
    GetDlgItem (IDC_DLG_AREA)->GetWindowRect (&rcDlgArea) ;
    ScreenToClient (&rcDlgArea) ;
    
    pNewPage->SetWindowPos (this, 
        rcDlgArea.left, rcDlgArea.top, rcDlgArea.Width (), rcDlgArea.Height (), 
        SWP_NOACTIVATE) ;
    
    到目前为止,这一切都很顺利,但我在德国的一位用户遇到了一个我无法解释的问题。当他打开工具时,堆叠的页面出现如下所示:

    请注意,子对话框是拉伸的,因此子对话框中的文本看起来比父对话框中的文本大

    除了视觉布局问题外,子对话框似乎还“覆盖”了右下角的选择下拉列表(位于父对话框中)。尽管下拉列表仍然可见,但单击下拉列表时不会收到CBN_SELCHANGE消息

    我无法解释为什么要重新缩放子对话框。正如您在上面所看到的,我试图非常明确地调整对话框的大小,但这似乎不起作用

    有人能想出为什么子对话框在某些系统上可以重新缩放,但在其他系统上却不能?任何帮助都将不胜感激

    谢谢,


    Michael看起来这个用户选择的字体比第一个屏幕截图中使用的字体要大。请注意,对话框大小是在DLU中指定的,它根据用户为字体选择的大小进行缩放。您可以显式地以像素为单位缩放对话框(糟糕的解决方案,这会使您的应用程序在某些配置上看起来更糟糕),或者在DLU的everywhere中进行计算。您的第二个屏幕截图似乎还显示子对话框使用的字体与向导的不同。我不确定这是为什么,我猜这是您创建向导时传递给向导的窗口样式中的某些内容。

    似乎此用户选择的字体比第一个屏幕截图中使用的字体大。请注意,对话框大小是在DLU中指定的,它根据用户为字体选择的大小进行缩放。您可以显式地以像素为单位缩放对话框(糟糕的解决方案,这会使您的应用程序在某些配置上看起来更糟糕),或者在DLU的everywhere中进行计算。您的第二个屏幕截图似乎还显示子对话框使用的字体与向导的不同。我不确定这是为什么,我想这是在创建向导时传递给向导的窗口样式中的某个内容。

    这对我来说很奇怪——两种不同的大小。我认为DLU将在整个系统中保持一致。用户似乎认为系统是库存的,但这似乎不太可能。我假设是子对话框的字体大小不对,但我会向用户检查哪一个与系统的其余部分匹配。这对我来说很奇怪——两种不同的大小。我认为DLU将在整个系统中保持一致。用户似乎认为系统是库存的,但这似乎不太可能。我假设是子对话框的字体大小错误,但我将与用户检查哪一个与系统的其余部分匹配。