MFC之CStatusBar文字不显示

编程入门 行业动态 更新时间:2024-10-24 20:20:12

MFC之CStatusBar<a href=https://www.elefans.com/category/jswz/34/1769559.html style=文字不显示"/>

MFC之CStatusBar文字不显示

记录一下使用CStatusBar遇到的问题,这问题太蠢了,先上代码:

//系统默认的几个项,即使不手动设置也会显示文字
static UINT indicators[] =
{ID_SEPARATOR,           // status line indicatorID_INDICATOR_OVR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,
};
	m_pStatusBar = new CStatusBar();if(!m_pStatusBar->Create(this) || !m_pStatusBar->SetIndicators(indicators, sizeof(indicators) / sizeof(UINT))){AfxMessageBox(_T("创建状态栏失败!"));return FALSE;}CRect rcClient;GetClientRect(&rcClient);ScreenToClient(rcClient);//问题就出在这一句MoveWindowm_pStatusBar->MoveWindow(0, rcClient.bottom, rcClient.Width(), 80);m_pStatusBar->ShowWindow(SW_SHOW);

看了代码半天,死活想不出来问题在哪,然后看到了一篇求助帖,跟我的问题一模一样:

=6515742

看完就知道原因了:MoveWindow把状态栏的高设得太大了,导致状态栏下半部分已经超出对话框显示区域了,状态栏的文本估计默认显示居中,就显示不出来了,下面是修改后的代码:

	m_pStatusBar = new CStatusBar();if(!m_pStatusBar->Create(this) || !m_pStatusBar->SetIndicators(indicators, sizeof(indicators) / sizeof(UINT))){AfxMessageBox(_T("创建状态栏失败!"));return FALSE;}CRect rcClient;GetClientRect(&rcClient);ScreenToClient(rcClient);//就把MoveWindow最后一个参数改成了60m_pStatusBar->MoveWindow(0, rcClient.bottom, rcClient.Width(), 60);m_pStatusBar->ShowWindow(SW_SHOW);

隐约可以看到文字已经露出来了:

上面的代码还有问题,坐标算的乱七八糟,正确的代码贴上:

	CRect rcClient;GetClientRect(&rcClient);m_pStatusBar->MoveWindow(0, rcClient.bottom - 20, rcClient.Width(), 20);m_pStatusBar->ShowWindow(SW_SHOW);

隔了一天,又发现原来状态栏的坐标可以不用自己计算,直接调用RepositionBars也能把状态栏移动到窗口底部,效果是一样的:

static UINT indicators[] =
{IDS_UNUSESPACE,IDS_USERNAME,IDS_LOGINSTATE,IDS_LOGINTIME
};
    m_pStatusBar = new CStatusBar();if(!m_pStatusBar->Create(this) || !m_pStatusBar->SetIndicators(indicators, sizeof(indicators) / sizeof(UINT))){AfxMessageBox(_T("创建状态栏失败!"));return FALSE;}m_pStatusBar->SetPaneInfo(0, IDS_UNUSESPACE, SBPS_STRETCH, 100);m_pStatusBar->SetPaneInfo(1, IDS_USERNAME, SBPS_NORMAL, 100);m_pStatusBar->SetPaneInfo(2, IDS_LOGINSTATE, SBPS_NORMAL, 100);m_pStatusBar->SetPaneInfo(3, IDS_LOGINTIME, SBPS_NORMAL, 100);m_pStatusBar->SetPaneText(0, _T("xxx"));m_pStatusBar->SetPaneText(1, _T("测试用户"));m_pStatusBar->SetPaneText(2, _T("已登录"));m_pStatusBar->SetPaneText(3, _T("已登录时间:"));//调用一下RepositionBars调整状态栏位置,该函数默认会把状态栏移动到窗口底部//IDS_UNUSESPACE 是我自定义的状态栏子项ID,这个可以随便改RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, IDS_UNUSESPACE);

调整窗口大小的时候也可以计算状态栏的位置和窗格大小:

void CtestStatusBarDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);// TODO: 在此处添加消息处理程序代码//当窗口大小被调整后,状态栏要重新计算位置和各子项的宽RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, IDS_UNUSESPACE);
}

更多推荐

MFC之CStatusBar文字不显示

本文发布于:2024-02-27 02:31:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1704871.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文字   MFC   CStatusBar

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!