2

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

  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 消息。

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

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

谢谢,

迈克尔

4

1 回答 1

1

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

于 2012-06-06T12:25:08.987 回答