VC++开发GIS系统(52)补充知识Ribbon界面自定义状态栏

在之前的文章《VC++开发GIS系统(49)屏幕坐标转换编码》和《VC++开发GIS系统(50)使用自定义平面坐标系》中,我使用的方法是点击屏幕,弹出对话框,然后在对话框中显示点击位置的坐标信息。但这只是测试,在实际的应用中一般的GIS软件都会实时显示当前鼠标的坐标信息。所以在后面的文章中将尝试实现实时显示坐标的功能,首先应该学会自定义状态栏。

查看系统自带状态栏代码

系统自带的状态栏代码在MainFrm.cpp中如下:

if (!m_wndStatusBar.Create(this))
{
    TRACE0("未能创建状态栏\n");
    return -1;      // 未能创建
}

CString strTitlePane1;
CString strTitlePane2;
bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
ASSERT(bNameValid);
bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
ASSERT(bNameValid);
m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);

从上面的代码来看,创建过程分为2步,先是给这个窗格赋一个名称,然后显示这个窗格。其中AddElement是新建在状态栏的左边,AddExtendedElement是新建在状态栏的右边,也就是扩展窗格。如图:

自定义方法

依照上面的代码,依葫芦画瓢。

简化方法
CString strTitlePane1=L"测试窗格";

m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(100000, strTitlePane1, TRUE), strTitlePane1);

其中100000是要设置窗格的ID,strTitlePane1是设置窗格的标题,这里可以写死,也可以运行,不过并不推荐这种方法。

官方方法

也可以使用官方的方法来增加状态栏显示的窗格,不过要设置两个ID,一个是IDS_STATUS_PANE1,一个是ID_STATUSBAR_PANE1。

IDS_STATUS_PANE1可以通过资源视图的String Table设置

ID_STATUSBAR_PANE1这个ID可以在解决方案的Resource.h中设置

剩下的就是画瓢就可以了。

VC++开发GIS系统(51)补充知识基于VC++的GDI+常用坐标系统详解(转) VC++开发GIS系统(53)补充知识MFC中View调用CMainFrame未声明的标识符

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

发表评论