【问题标题】:Make Non-GUI server application in Visual Studio在 Visual Studio 中制作非 GUI 服务器应用程序
【发布时间】:2012-10-25 08:29:39
【问题描述】:

我在基于 C++ MFC 的 Visual Studio 中做了一个服务器套接字项目。现在,在调试项目后,服务器 GUI 打开,然后单击服务器 GUI 上的 CONNECT 按钮后,您可以将客户端连接到该服务器,依此类推。

现在我想在其他计算机上使用该服务器 exe 文件。这样每当该计算机启动时,该服务器 exe 就会自动启动。所以为此我需要禁用连接按钮,以便在调试后,服务器 GUI 会自动打开并连接。但我不希望服务器 GUI 也以自动启动的方式在另一台计算机中打开。我想禁用该服务器 GUI。

我想到了一个无模式对话框来处理它。它好还是我应该使用什么方法?

【问题讨论】:

  • 请不要误用大写锁定按钮 - 尤其是标题。
  • 如果您的程序受到magic pushbuttons 的影响,ShowWindow(SW_HIDE) 可以在不重构代码的情况下实现您想要的效果。然而,一个适当的解决方案将涉及将 GUI 与核心分离,就像 @Lol4t0 建议的那样。
  • 我没有在我的项目中使用 ShowWindow。我使用了模态对话框。可能是您在谈论无模式对话。如果是这样,那么我是否需要基于无模式对话制作一个全新的项目?以及如何将 GUI 与核心分开。我没有这个想法。请告诉PLZ
  • ShowWindow() 只是控制窗口的可见性(对话框也是窗口)。至于重构,将您的套接字服务器代码移动到它自己的类(如果还没有的话)并在您的基于 CWinApp 的类中或直接在 WinMain 中使用它。要调试它,您可以创建另一个在对话框中使用您的类的项目。

标签: c++ visual-studio-2010 sockets mfc serversocket


【解决方案1】:

您可能希望将应用程序的 GUI 部分和服务器部分分开。理想情况下,如果您的服务器实际上是一个服务器,您应该将它作为服务启动。然后你将有单独的 GUI 工具来控制它。

另一种方法是使用命令行参数来确定是否应在启用或禁用 GUI 的情况下启动服务器。

【讨论】:

  • 我不想分离任何东西。我已经成功构建了具有 GUI 的服务器套接字项目。我只需要禁用那个 GUI,这意味着在调试这个项目之后,server.exe 应该在后台运行而不是显示 GUI。我希望现在很清楚
  • @Nabeel,然后使用another approach,但是您将如何控制应用程序?在没有 GUI 和任何远程控制界面的情况下启动它后,您将失去对该应用程序的控制。
  • 我认为,每台计算机都有自动启动文件,每当该计算机启动时,一些文件会自动启动。我正在尝试完全使用这个想法,只需将该 server.exe 文件复制到自动启动文件夹中,然后让计算机自行完成工作。
【解决方案2】:

此类应用程序唯一专业且稳定的解决方案是将其拆分为控制台部分,您将其置于服务控制的控制之下,而用户可以在需要时启动的 gui 部分。

我尝试了像你这样的解决方案,所以我可以根据我自己的经验告诉你,你会面临很多问题。

但是,一个可能的解决方案是隐藏窗口,lay the app down to systraythis 是关于隐藏窗口的非常有趣的讨论。

另外,对于 MFC,我有两个很好的建议:

  1. 永远不要只是“复制过去”代码而不知道 MFC 在后台执行的操作 (Win32api)。
  2. 不要使用 MFC。需要windows的时候可以看QT或者wxWidges,win32api的快捷封装也可以看boost库。真的值得您花时间在上面!

祝你好运!

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 2015-08-27
    • 2018-01-08
    • 2021-05-25
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    相关资源
    最近更新 更多