VC中取代状态栏默认“就绪”提示
2012-01-09 15:40
134 查看
在MFC程序中如果使用默认的状态栏的话,其第一栏在空闲时显示的是“就绪”,如果用户点击菜单,还会用于显示菜单栏的提示文本,如“建立新文档”等。有时候我们不希望程序在状态栏中显示这些东西,那该怎么办呢?
在MFC中,是用主框架类中的CStatusBar对象m_wndStatusBar来管理状态栏的。CStatusBar中有一个SetPaneText的函数可用于设置状态栏中的文字。我们在CMainFrame类中的OnCreate函数中添加
m_wndStatusBar.SetPaneText(0, "Hello");
则程序启动后,状态栏上显示的文字为“Hello”。但是当我们点击菜单后,会发现这段文字会消失,被替换成菜单的提示文本;若菜单操作结束,则又显示成“就绪”了。那该如何禁止MFC自动修改状态栏文本呢?
我们再看看主框架类的源程序。当中有这么一段
static UINT indicators[] =
{
ID_SEPARATOR,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
而在OnCreate中有这么一段
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))
这一句的作用是设置状态栏各部分的ID,默认的ID由indicators数组指定。由于MFC中把状态栏的第一栏设置为ID_SEPARATOR了,这是一个MFC默认的ID,所以它有一系列默认的操作,如显示“就绪”二字。我们想禁止MFC自动操作状态栏就必须修改indicators数组。
我们打开Resource View,修改String Table,找到那堆ID_INDICATOR开头的,在后面新加一个ID_INDICATOR_1。然后修改CMainFrame中indicators的声明
static UINT indicators[] =
{
ID_INDICATOR_1,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
然后编译运行程序。我们会发现,MFC不会再自动修改状态栏的文本了,可是前面添加的一句
m_wndStatusBar.SetPaneText(0, "Hello");
也不起作用了。这是为什么呢?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_status_bars.3a_.updating_the_text_of_a_status.2d.bar_pane.asp
MSDN上有一篇介绍如果修改状态栏文本的文章。当中有一句
Note The SetText approach is recommended. It is possible to perform this task at a slightly lower level by calling the CStatusBar member function SetPaneText. Even so, you still need an update handler. Without such a handler for the pane, MFC automatically
disables the pane, erasing its content.
意思大概是如果我们不为状态栏添加UPDATE的处理函数,MFC会自动禁止状态栏的该栏(pane)。按照MSDN的说法,我们需要增加UPDATE的处理函数。在MainFrm.h中添加
afx_msg void OnUpdate1(CCmdUI *pCmdUI);
在MainFrm.cpp中添加
ON_UPDATE_COMMAND_UI(ID_INDICATOR_1, OnUpdate1)
void CMainFrame::OnUpdate1(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
}
这样我们就可以往状态栏的第一栏写文字,而避开MFC对其的自动修改了。
来自: http://hi.baidu.com/yeyingxian/blog/item/cabd312d9c627e34359bf749.html
在MFC中,是用主框架类中的CStatusBar对象m_wndStatusBar来管理状态栏的。CStatusBar中有一个SetPaneText的函数可用于设置状态栏中的文字。我们在CMainFrame类中的OnCreate函数中添加
m_wndStatusBar.SetPaneText(0, "Hello");
则程序启动后,状态栏上显示的文字为“Hello”。但是当我们点击菜单后,会发现这段文字会消失,被替换成菜单的提示文本;若菜单操作结束,则又显示成“就绪”了。那该如何禁止MFC自动修改状态栏文本呢?
我们再看看主框架类的源程序。当中有这么一段
static UINT indicators[] =
{
ID_SEPARATOR,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
而在OnCreate中有这么一段
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))
这一句的作用是设置状态栏各部分的ID,默认的ID由indicators数组指定。由于MFC中把状态栏的第一栏设置为ID_SEPARATOR了,这是一个MFC默认的ID,所以它有一系列默认的操作,如显示“就绪”二字。我们想禁止MFC自动操作状态栏就必须修改indicators数组。
我们打开Resource View,修改String Table,找到那堆ID_INDICATOR开头的,在后面新加一个ID_INDICATOR_1。然后修改CMainFrame中indicators的声明
static UINT indicators[] =
{
ID_INDICATOR_1,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
然后编译运行程序。我们会发现,MFC不会再自动修改状态栏的文本了,可是前面添加的一句
m_wndStatusBar.SetPaneText(0, "Hello");
也不起作用了。这是为什么呢?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_status_bars.3a_.updating_the_text_of_a_status.2d.bar_pane.asp
MSDN上有一篇介绍如果修改状态栏文本的文章。当中有一句
Note The SetText approach is recommended. It is possible to perform this task at a slightly lower level by calling the CStatusBar member function SetPaneText. Even so, you still need an update handler. Without such a handler for the pane, MFC automatically
disables the pane, erasing its content.
意思大概是如果我们不为状态栏添加UPDATE的处理函数,MFC会自动禁止状态栏的该栏(pane)。按照MSDN的说法,我们需要增加UPDATE的处理函数。在MainFrm.h中添加
afx_msg void OnUpdate1(CCmdUI *pCmdUI);
在MainFrm.cpp中添加
ON_UPDATE_COMMAND_UI(ID_INDICATOR_1, OnUpdate1)
void CMainFrame::OnUpdate1(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
}
这样我们就可以往状态栏的第一栏写文字,而避开MFC对其的自动修改了。
来自: http://hi.baidu.com/yeyingxian/blog/item/cabd312d9c627e34359bf749.html
相关文章推荐
- VC提示的添加(工具栏和状态栏)
- JS 中改变confirm默认按钮提示“确定""取消"
- 完美解决textarea输入框提示文字,必须添加默认内容
- VC++ 对话框添加状态栏的
- 用VC制作“每日提示”对话框
- VC中实现按钮提示,使用CToolTipCtrl2007年01月23日 星期二 20:09如果你需要对对话框上的一个按钮进行鼠标停靠提示,那么这么做:
- 孙鑫VC学习笔记:第九讲 界面修改,工具栏,状态栏,启动画面的制作
- win7下安装matlab,启动后提示VC++Runtime Library错误 runtime error!
- 修改状态栏“就绪”
- VC读写txt文件时提示unrecognized character escape sequence(无法识别的字符转移序列)
- Android用户界面开发(21):状态栏提示
- <select> 中的默认提示,并做验证
- 【VC】CStatic 实现在图标处用数字来提示信息数量!
- 类中有引用需要注意——非静态的引用成员错误提示,不能使用默认的赋值运算符
- VC 做带滚动字幕的状态栏
- 文本框默认提示灰色,点击后输入黑色
- jQuery自定义组件——输入框设置默认提示文字
- Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示
- 编程技巧之:双击VC对话框提示cannot add new member以及类向导中没有已经建立的类的解决方法
- Ubuntu桌面上如何禁用默认的密钥环解锁提示