扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年10月2日
关键字:
在本页阅读全文(共2页)
五、 移动控制台中的一个区域
MoveBufferArea方法允许我指定控制台窗口内的一个区域(或缓冲区),然后指定一组坐标来移动它。我想把文件名列表显示到一个滚动列表中,而同时还能维持头部信息及控制台窗口顶部的进度栏。一旦我把一个文件名打印到控制台中的最后一行,我就停止更新rowIndex变量并开始使用 MoveBufferArea方法。
MoveBufferArea使用了六个参数:
? 第一个参数指定你想选择区域的左边缘。
? 第二个参数指定你的缓冲区区域的最上边一行。
? 第三和第四个参数指定你的缓冲区区域的宽度和高度。
? 最后两个参数指定你想把你的缓冲区移往的区域的左边缘和最上边一行。
Console.MoveBufferArea(0, _
BufferSourceTopLine, _
Console.WindowWidth, _
Console.WindowHeight - BufferSourceTopLine, _
0, _
BufferDestinationTopLine)
这段代码告诉MoveBufferArea方法从第0列和第BufferSourceTopLine(一个常量,值为8)行开始。然后,它把缓冲区区域宽度设置为等于控制台窗口的宽度并且把缓冲区区域高度设置为等于控制台窗口高度和文件名列表的最上面一行(BufferSourceTopLine)之差。最后两个参数指定我的缓冲区区域的目标位置为第0列和第BufferDestinationTopLine(定义为常数7)行。
用更简单的描述来说就是,该代码通过最后一个名字选择在列表中的第二个文件名并且把该缓冲区往上移动一行,有效地删除了最上面的文件名并且为底部的下一个文件名留出了空间。
六、 ConsoleProgressBar类
我创建了ConsoleProgressBar类来处理初始化和更新进度条的细节问题。其构造器使用了一个参数―MaximumValue:
Public Sub New(ByVal MaximumValue As Long)
m_length = Console.WindowWidth - 10
m_left = 7
m_right = m_left + m_length + 1
m_progressBarRow = 1
m_messageBarRow = m_progressBarRow + 1
m_percentPosition = 4
m_maximumValue = MaximumValue
m_currentValue = 0
Initialize()
End Sub
我硬编码了一些值,并且基于这些硬编码值计算其它值。在本文中,我构造的这个类很小,但是你可以扩展这个构造器以便再加入其它参数―使得进度条更具配置性。
在初始化所有的成员变量以后,我调用Initialize方法,它又调用InitializePercentComplete, InitializeProgressBar和InitializeMessageBar方法。这些方法的任务并不多;它们仅打印一个百分号,一组表示进度条结束的方括号,以及该进度条的最大值和最小值。
七、 进度条进度显示
在Update方法被调用前,在ConsoleProgressBar对象中什么也没有发生:
Public Sub Update(ByVal CurrentValue As Long)
m_currentValue = CurrentValue
m_currentBarLength = CInt((m_currentValue / m_maximumValue) * m_length)
Refresh()
End Sub
这个Update方法使用一个值作参数(在此是指当前刚刚复制的文件数)。我设置成员m_currentValue,然后计算m_currentBarLength。计算的结果为进度条当前应该覆盖的列数。
最后,我调用Refresh方法,它又调用UpdatePercentComplete、UpdateProgressBar和UpdateMessageBar方法。
因为所有这三个方法功能相类似,所以我将集中讨论UpdateProgressBar方法: Private Sub UpdateProgressBar()
Dim originalForegroundColor As ConsoleColor = Console.ForegroundColor
Dim originalBackgroundColor As ConsoleColor = Console .BackgroundColor
Console.ForegroundColor = ConsoleColor.Black
Console.BackgroundColor = ConsoleColor.Green
Console.SetCursorPosition(m_left + 1 m_progressBarRow)
Dim progress As New String("O", m_currentBarLength)
Console.Write(progress)
Console.ForegroundColor =originalForegroundColor
Console.BackgroundColor = originalBackgroundColor
End Sub
首先,该代码保存当前的前景和背景颜色。然后,它把ForegroundColor属性设置为黑色,把BackgroundColor属性设置为绿色。在把光标放置到进度条的左边缘后,它打印一串长度为m_currentBarLength的“O”。
八、 运行DirCopy
你一定很想看到应用程序运行情况(参考图2和3),并想检查一下运行结果(参考图4)。我建立了一个目录,并使用一串哑文件来测试复制。我建议,在你使用DirCopy复制任何关键文件前,你也这样试验一下。
图2:开始DirCopy
图3:DirCopy运行中
图4:DirCopy运行完成
九、 其它问题
这个DirCopy应用程序,虽然有些用处,但是还远非成品。为了使其更为强壮,还需要增加大量的错误处理方式。你还可以改进ConsoleProgressBar类以实现更灵活的控制。下列是一些可能的改进:
? 允许控制进度条的位置和长度
? 允许百分比完成区域放到你选择的任何位置
? 允许定制进度条中的消息
? 添加一个选项以选择水平的或垂直的进度条
十、 小结
我希望,本文有助于你了解VB 2005所提供的部分新的控制台应用程序特征,尽管这些特征仅是其中的一部分。另外,我还鼓励你再分析一下其它一些控制台应用程序特征,并与本文介绍相结合以发现你更喜欢的特征。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。