[英]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.