我的应用程序使用堆叠对话框在多个位置的选项之间进行选择。例如,下面的对话框使用了两个堆叠的对话框:
- 要在“拍摄方法”之间进行选择,用户从右下角的下拉列表中进行选择。这将更改其上方的子对话框。
- “高级选项”框(位于子对话框中)在简化界面和更完整界面之间进行选择。
在每种情况下,堆叠对话框都是使用图片对象作为父对话框中的占位符来实现的。选择页面时,调用 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 消息。
我不知道为什么要重新调整子对话框。正如您在上面看到的,我试图非常明确地调整对话框的大小,但这似乎不起作用。
谁能想到为什么子对话框可能在某些系统上重新缩放但在其他系统上没有的原因?任何帮助将不胜感激。
谢谢,
迈克尔