【问题标题】:MFC child dialog changing size unexpectedlyMFC 子对话框意外更改大小
【发布时间】:2012-06-05 23:48:06
【问题描述】:

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

  1. 要在“拍摄方法”之间进行选择,用户从右下角的下拉列表中进行选择。这会更改其上方的子对话框。
  2. “高级选项”框(位于子对话框中)在简化界面和更完整界面之间进行选择。

在每种情况下,堆叠对话框都是使用图片对象作为父对话框中的占位符来实现的。选择页面时,调用 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 消息。

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

谁能想到为什么子对话框可能在某些系统上重新缩放但在其他系统上没有的原因?任何帮助将不胜感激。

谢谢,

迈克尔

【问题讨论】:

    标签: mfc internationalization dialog resize


    【解决方案1】:

    似乎该用户选择的字体比第一个屏幕截图中使用的字体大。请注意,对话框大小是在 DLU 中指定的,它随用户为字体选择的大小而缩放。您可以以像素为单位显式缩放对话框(不好的解决方案,这会使您的应用在某些配置上看起来更糟),或者在 DLU 的任何地方进行计算。您的第二个屏幕截图似乎也显示子对话框使用的字体与向导的字体不同。我不知道为什么会这样,我猜这是你在创建它时传递给向导的窗口样式中的东西。

    【讨论】:

    • 这对我来说很奇怪——两种不同的尺寸。我认为 DLU 会在整个系统中保持一致。用户似乎认为该系统是库存的,但这似乎不太可能。我认为这是错误的子对话框字体大小,但我会与用户检查哪个与系统的其余部分匹配。
    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多