【问题标题】:SetWindowPos() works for a dialog, but not in a CPropertyPageSetWindowPos() 适用于对话框,但不适用于 CPropertyPage
【发布时间】: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


【解决方案1】:

从这里:https://jeffpar.github.io/kbarchive/kb/143/Q143291/

CPropertySheet 会记住它的大小和位置 首次创建时的 CPropertyPages。当不同的选项卡是 由用户选择,CPropertySheet 收到 TCN_SELCHANGE 通知。对此,CPropertySheet 显示了新的 页面使用首次创建时的大小和位置。

所以基本上,你可以随心所欲地改变它,但 CPropertySheet 只是要马上改变它。我链接的页面建议使用 OnSize() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2017-10-19
    • 2012-06-09
    相关资源
    最近更新 更多