簡體   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