subject_24557.htm
来自「一些关于vc的问答」· HTM 代码 · 共 12 行
HTM
12 行
<p>
序号:24557 发表者:HitWinBook 发表日期:2002-12-13 17:20:11
<br>主题:如何在状态栏中加入动态的文字呢?
<br>内容:我想重新构建自己的CStatusBar 类,可是如何才能在应用程序中使用它呢?我应该注意些什么呢?请大侠们能详细说明之。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:小菜瓜 回复日期:2002-12-13 17:25:50
<br>内容:制作有打字效果的状态栏<BR><BR>华中师范大学计算机科学系 9701班 向建刚<BR><BR>如今,几乎有一半以上的windows应用程序,都有状态栏。状态拦往往是显示一些帮助信息的地方。<BR>但是如果让这些信息像打字似的一个一个地跑出来或像跑马灯似的动态显示地显示出来,你的应用程序将会<BR>更受用户的青睐。vc6.0中支持状态栏的编程。于是可以设想从MFC的基类CStatusBar中派生一个子类用来实<BR>现状态栏的动态效果,然后在框架类中进行加载则可以实现所需的效果了。本文介绍了实现它的一种方法。<BR>第一步:利用MFC应用程序向导生成一个单文档的工程文件ScrollStatus(按默认选项)。<BR>第二步:从CStatusBar类中派生出一个新类CMyStatusBar。通过组合键Ctrl+W进入MFC的类向导ClassWizard,<BR>在出现的对话框中选择Add Class...|New,在NewClass对话框中的Name种填入CMyStatusBar,在BaseClass中选择<BR>CStatusBarCtrl。然后,将MyStatusBar.h和MyStatusBar.cpp文件中的所有的CStatusBarCtrl用CStatusBar替换(共两处)。<BR>第三步:改变状态栏的类型。在MainFrm.h中找到这句话"CStatusBar m_wndStatusBar;"并将CStatusBar改成CMyStatusBar。<BR>第四步:编辑资源文件。定位到资源文件中的String Table并在最下端双击空白条来添加一个新的项。<BR>ID号为:IDS_SCROLL_PANE,在Caption中输入一定42个空格。<BR>第五步:将资源加到文件中。将MainFrm.cpp中的indicators函数的"ID_SEPARATOR,"项之后添加一行文字"IDS_SCROLL_PANE,"。<BR>第六步:增加变量。在ClassView中,右键点取CMyStatusBar,选择Add Member Variable来增加变量。在出现<BR>的对话框中的Variable Type项中输入CString,Variable Name相中输入m_strscrolltext。<BR>第八步:在文件MyStatusBar.cpp中添加OnTimer函数,OnDestroy函数和Startdiaplay函数。在OnTimer中加入以下代码:<BR>void CMyStatusBar::OnTimer(UINT nIDEvent) <BR>{<BR>if (m_strscrolltext.IsEmpty())<BR>{<BR>KillTimer(1);<BR>SetPaneText(CommandToIndex(IDS_SCROLL_PANE), "");<BR>return;<BR>}<BR>static UINT str_idx = 0; <BR>if (str_idx >= (UINT) (m_strscrolltext.GetLength() / 2) - 1)<BR>{<BR>str_idx = 0;<BR>}<BR>//SetPaneText(CommandToIndex(IDS_SCROLL_PANE), ((LPCSTR)m_strscrolltext+(str_idx)));//滚动效果<BR>SetPaneText(CommandToIndex(IDS_SCROLL_PANE), ((LPCSTR)m_strscrolltext.Left(str_idx))); //打字效果 <BR>str_idx = str_idx + 2; //加2是为了兼顾汉字,因为汉字是两个字节。<BR>CStatusBar::OnTimer(nIDEvent);<BR>}<BR>在函数OnDestroy中修改代码如下:<BR>void CMyStatusBar::OnDestroy() <BR>{<BR>CStatusBar::OnDestroy();<BR>KillTimer(1);<BR>}<BR>在函数Startdiaplay中修改代码如下:<BR>void CMyStatusBar::Startdisplay(void) <BR>{ m_strscrolltext = " 华中师范大学计算机科学系9701班 向建刚 ";<BR>m_strscrolltext += m_strscrolltext;<BR>KillTimer(1);<BR>VERIFY(SetTimer(1, 200, NULL) != 0); <BR>} 注意:由于汉字是两个字节,所以如果你想要滚动的字是汉字,则你在输入的汉字首尾留偶数个空格,<BR>汉字中间留的空格也必须是偶数个。否则,将会有乱码的现象出现。所滚动的字符个数(汉字算两个)<BR>与编辑资源时所输入的空格一致,滚动的效果才会完美。<BR>第九步:将MyStatusBar.h包含到文件MainFrm.cpp和MainFrm.h中去。在MainFrm.cpp文件中定位到OnCreate<BR>函数,在"return 0"之前加入代码:m_wndStatusBar.Startdisplay();<BR>第十步:编译,链接,运行程序,测试结果。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?