【发布时间】:2020-10-10 11:40:54
【问题描述】:
我有一个CPropertyPage 类型的对话框,在该对话框中我显示了一个CPropertySheet 对象以显示几个选项卡。
最初,当我测试这个对话框时,我让它作为一个单独的对话框窗口 (dialog.DoModal()) 运行。当我将它作为一个单独的对话框窗口运行时,SetWindowPos() 函数起作用,并且我成功地将我的CPropertySheet 对象移动到了正确的位置。
但是,然后我尝试将此 CPropertyPage 合并到另一个父 CPropertySheet 中。这是SetWindowPos() 函数不起作用的时候。
当我在CPropertyPage 上有一个CPropertySheet 时,它似乎忽略了它,它包含在另一个CPropertySheet 中。有人知道为什么吗?
已编辑:添加了额外的代码和图片。
代码:
窗格'pane.h':
CPropertySheet SheetSettings;
顶CPropertySheet,top.h:
CMyDlg PageMyDlg;
Onsize(UINT nType, int cx, int cy);
顶CPropertySheet,top.cpp:
Top::Top()
{
SheetSettings.AddPage(&PageMyDlg);
}
Top::Onsize(UINT nType, int cx, int cy)
{
if(SheetSettings.GetSafeHwnd())
{
SheetSettings.MoveWindow(0, 0, cx, cy);
CRect Rect;
SheetSettings.GetClientRect(Rect);
Rect.InflateRect(-2, -4, -2, -2);
SheetSettings.GetTabControl()->MoveWindow(Rect.left, Rect.top, Rect.Width(), Rect.Height());
SheetSettings.GetTabControl()->AdjustRect(FALSE, Rect);
if (Page12nc.GetSafeHwnd())
Page12nc.MoveWindow(Rect.left, Rect.top, Rect.Width(), Rect.Height());
}
// CPane holds the page where the CPropertySheet is drawn.
CPane::OnSize(nType, cx, cy);
}
对话框'CMyDlg',MyDlg.h:
CPropertySheet _dlgPropSheet;
对话框'CMyDlg',MyDlg.cpp:
CRect rcSheet;
_dlgPropSheet.GetParent()->GetWindowRect(&rcSheet);
ScreenToClient( &rcSheet );
// This goes wrong.
_dlgPropSheet.SetWindowPos( NULL, rcSheet.left+26, rcSheet.top+223, rcSheet.Width(), rcSheet.Height(), SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );
This 是我在.doModal() 我的CMyDlg 时得到的。
而this 是当底部绘制在顶部时所绘制的。
【问题讨论】:
-
你可能应该添加一张显示你想要的图片。
-
@IInspectable 完成。
-
@Jabberwocky 完成。
-
为什么不将工作表/页面设置为使用动态调整大小?
标签: visual-c++ mfc cpropertysheet