一个Win32控制台应用程序的多个控制台窗口

时间:2012-08-21 09:02:44

标签: c++ visual-studio-2008 windows-console

我根据在Win7 64bit上运行的VS2008中的空Win32控制台应用程序编写了一个程序。该程序完全基于菜单从main.cpp产生,该STL仅根据用户需求调用导致其他接口的外部功能(例如收银员,库存,报告等)。我想要做的是为每个界面提供一个新的控制台窗口。

理想情况下,当用户进行其功能时,它会在调用任何其他界面时关闭主菜单,包括必要时重新打开主菜单。

这样做的基础是我下周开始一个新的学期,用C ++深入学习OOP,我想完成我的文本并完成与主题一起进行的顶点项目,以确保我拥有所有的基础知识拍拍尽管我最喜欢以最聪明最简单的方式做到这一点,但最好是坚持本书中提供的有限知识,这些知识只提示boost,而不是像void clearScreen(int lines);这样的其他库。

当然,我已经搜索过SO和其他地方寻找解决方案。我找到了答案,其中大部分都超出了我的严格要求,有些涉及从头开始构建控制台窗口。虽然从头开始似乎是最有希望的,但它似乎正在处理那些没有使用像VS这样强大的IDE的人,我不知道它是否会引起更多的冲突而不是它的价值,或者它是否甚至可以用于多重性。然而,大多数人给我的印象是不可能的。一个例外是将控制台链接到进程。这是我希望在未来的事情!

让我想到这一点的原因是需要对每一轮事件进行干净的审视。起初我试图用{{1}}之类的基本功能来清除屏幕,但我总是从底部清除。所以,如果我在下一个界面之前清除屏幕,它仍然在底部。如果我清除然后接受输入,提示仍然在底部。

如果到目前为止还不清楚。我的问题是:
在合理范围内,是否有可能生成多个与进程相关联的控制台窗口,或者是否有一种我不知道的操作主控制台窗口滚动的简单方法?
即使我“需要”保持在传统学习的宝贝步骤的范围内,我也希望听到除了切换应用类型之外的任何输入。

这更像是一个OCD问题,而不是任务的要求,所以如果努力不值得,那也没关系。
我很乐意发布任何代码,我只是没有看到它会如何有益于这个问题!
Muchos gracias!

4 个答案:

答案 0 :(得分:4)

没有可移动的方法在控制台窗口周围移动光标 - 在Unix / Linux中,您可以发送终端代码,在Windows中我不知道。

跨平台工作,但速度非常慢而且不太好,会是:

  • 逐个字符地阅读您的输入
  • 记住屏幕上应出现下一个角色的位置
  • 每次按键后重绘整个屏幕

如果你想做得更好,你必须转向特定于平台的解决方案,或找到一个可以为你做这个的库(比如Unix世界中的ncurses),但我不知道是否有这些符合您的要求。

答案 1 :(得分:3)

您可以使用SetConsoleCursorPosition在Windows上设置光标位置。

答案 2 :(得分:1)

既然你在谈论VS,我认为将自己限制在Windows不是问题。如果是这样,您可以使用Windows API

除此之外,ncurses似乎至少部分移植到大多数常见平台。

如果您正在寻找在标准C ++中执行此操作的方法 - 它不存在。 C ++不需要运行它的平台甚至没有控制台,因此没有控制台操作功能。

两者都不是很难用,但如果这只是一些学生的东西,你希望学到一些有用的东西,你可能不应该打扰。控制台操作不是您经常或想要经常做的事情。

答案 3 :(得分:1)

虽然在我原来的问题中可能不太清楚,但我一直在寻找在控制台窗口中使用的解决方案。理想情况下,该解决方案至少可以在Linux和Windows上运行,因为我为学校编写的任何程序都必须在每个程序上编译。这不是一项任务,但学习那里可用的东西显然是有利的。

这是我找到的

...感谢Tim Wei的解决方案

void clearScreen()
{
    #ifdef _WIN32
        system("cls");
    #else
        system("clear");
    #endif
}

这很简单,正是我所寻找的。该函数清除屏幕并将光标置于控制台窗口的顶部,提供了一种方法来提供带有更改数据表的静态标题或标题。它还允许简单的基于文本的动画 - 如果你喜欢那种东西。这个学期我的控制台应用程序的外观,感觉和一致性有了很大的不同!