繁体   English   中英

MFC:向可调整大小的 CDialogEx 添加状态栏?

[英]MFC: Adding a status bar to a CDialogEx that is resizable?

我认为将带有百分比和其他信息的状态栏添加到用于查看图像的CDialogEx会很好。 但似乎您不能简单地使用CMFCStatusBarCStatusBar并让它正常工作。

我找到了各种样本,但没有一个样本在客户区之外有状态栏,并且没有调整大小? 不同的方法只是创建一个状态栏,它最终隐藏在水平滚动条下,如果调整 window 的大小,状态栏就位于对话框的中间。

是否有一个简单的方法或完整的示例在 CDialogEx 上有一个可以像普通CDialogEx一样调整大小的状态栏?

是否有一个简单的方法或完整的示例在 CDialogEx 上有一个可以像普通CDialogEx一样调整大小的状态栏?

是:创建状态栏后,您可以将其添加到动态布局中以调整大小:

//This is where we actually draw it on the screen
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
    ID_INDICATOR_MEETING_TYPE);
GetDynamicLayout()->AddItem(m_StatusBar.GetSafeHwnd(),
    CMFCDynamicLayout::MoveVertical(100), CMFCDynamicLayout::SizeHorizontal(100));

我的应用程序的两个对话框上有一个状态栏(不是CMFCStatusBar ,因为它不起作用,但CStatusBar没问题)。


当动态布局未自动启用时

这是一个更新的示例,当您没有自动启用动态布局时(没有控件的CDialogEx ):

BOOL CMyDlg::OnInitDialog()
{
  CDialogEx::OnInitDialog();

  if (!m_StatusBar.Create(this)) {
    TRACE0("Failed to create status bar\n");
    return -1;
  }

  m_StatusBar.SetIndicators(indicators, _countof(indicators));

  RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

  EnableDynamicLayout();

  auto pdlmanager=GetDynamicLayout();
  if (pdlmanager) {
    if (pdlmanager->Create(this)) {
      pdlmanager->AddItem(m_StatusBar.GetSafeHwnd(), CMFCDynamicLayout::MoveVertical(100), CMFCDynamicLayout::SizeHorizontal(100));
    }
  }
  // return TRUE unless you set the focus to a control
  // EXCEPTION: OCX Property Pages should return FALSE

  return TRUE;  
}

迎合水平滚动条

N如果你有一个水平滚动条,状态栏将在它上面结束; 因此您可能必须创建单独的CWnd并将其添加到动态布局中(它也将是RepositionBars()nIDLeftOver )。

以下是如何为内容添加“视图”window,以便滚动条可以包含在视图区域中:

BOOL CMyDlg::OnInitDialog()
{
  CDialogEx::OnInitDialog();

  if (!m_StatusBar.Create(this)) {
    TRACE0("Failed to create status bar\n");
    return -1;
  }

  m_StatusBar.SetIndicators(indicators, _countof(indicators));

  CRect rc;
  GetClientRect(&rc);

  CString clsname=AfxRegisterWndClass(0);
  m_ImageView.Create(clsname, _T(""), WS_CHILD | WS_VISIBLE, rc, this, IDC_MY_VIEW);

  RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, IDC_MY_VIEW);

  EnableDynamicLayout();

  auto pdlmanager=GetDynamicLayout();
  if (pdlmanager) {
    if (pdlmanager->Create(this)) {
      pdlmanager->AddItem(m_StatusBar.GetSafeHwnd(), CMFCDynamicLayout::MoveVertical(100), CMFCDynamicLayout::SizeHorizontal(100));
      pdlmanager->AddItem(m_ImageView.GetSafeHwnd(), CMFCDynamicLayout::MoveNone(), CMFCDynamicLayout::SizeHorizontalAndVertical(100, 100));
    }
  }

  // return TRUE unless you set the focus to a control
  // EXCEPTION: OCX Property Pages should return FALSE

  return TRUE;  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM