[英]MFC: Adding a status bar to a CDialogEx that is resizable?
我認為將帶有百分比和其他信息的狀態欄添加到用於查看圖像的CDialogEx
會很好。 但似乎您不能簡單地使用CMFCStatusBar
或CStatusBar
並讓它正常工作。
我找到了各種樣本,但沒有一個樣本在客戶區之外有狀態欄,並且沒有調整大小? 不同的方法只是創建一個狀態欄,它最終隱藏在水平滾動條下,如果調整 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.