MFC子对话框意外改变大小

时间:2012-06-05 23:48:06

标签: mfc internationalization dialog resize

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

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

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

    到目前为止,这种方法运作良好,但我在德国的一位用户遇到了一个我无法解释的问题。当他打开工具时,堆叠的页面看起来像这样:

    incorrect dialog

    请注意,子对话框已拉伸,以便子对话框中的文本显示为大于父对象中的文本。

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

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

    有人能想到为什么儿童对话可能会在某些系统上重新调整而不在其他系统上重新调整的原因?任何帮助将不胜感激。

    谢谢,

    迈克尔

1 个答案:

答案 0 :(得分:1)

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