用MFC向导直接生成的代码:
int CMain::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
CRect rc;
m_wndStatusBar.GetWindowRect(&rc); // 看这里
return 0;
}
用这个函数获取的窗口是一个Width()和Height()都是0的矩形。
我还尝试用了GetItemRect和GetClientRect,无一例外都显然不是状态栏的矩形。
我要自绘界面元素,获取视图用户区尺寸的时候总是把状态栏的高度一起获取了,想把状态栏的高度减去却不得要领。
那么请问各位大神,应该如何获得状态栏的高度呢?或者怎样获取视图的可见部分尺寸?
------解决思路----------------------
整个的:
m_wndStatusBar.GetWindowRect(&rc);//(L 3, T 399, R 570, B 421)
afxDump << rc << "\n";
一个一个 item 的 rect:
如:
// m_wndStatusBar.GetItemRect(0, &rc);//(L 0, T 2, R 166, B 22)
// afxDump << rc << "\n";
m_wndStatusBar.GetItemRect(4, &rc);//(L 337, T 2, R 567, B 22)
当然 m_wndStatusBar. 必须创建成功即:
if (!m_wndStatusBar.Create(this)
------解决思路----------------------
!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))
{
AfxMessageBox("Failed to create status bar\n");
return -1; // fail to create
}
------解决思路----------------------
你在创建处取Rect?它还没建立吧,到初始化处获取试试。
------解决思路----------------------
我给的是 对话框 中 创建 的 statusbar
在 MainFrame 结构 中 , 应该这样:
1
int CMainFrame::GetStatusHeight()
{
CRect rc;
m_wndStatusBar.GetWindowRect(&rc);
return rc.Height();
}
2
void CXXXView::OnInitialUpdate() 中
SetTimer(1,100,0);
3
void CXXXView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd();
int hei=pMain->GetStatusHeight();
afxDump << hei << "\n";// 25
KillTimer(1);
}
这是等待 窗口 显示后,取 变量的 一个方法。 Timer 只 运行一次 , 100ms 用来等 创建 显示