生成表单的控制台应用程序(Windows窗体)?

时间:2014-01-16 05:01:01

标签: c++ c windows visual-c++

如何使用控制台应用创建Windows窗体?就像我运行控制台应用程序时一样,它会显示一个表单(窗体)。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

首先,您必须了解Windows中的Windows如何工作。每个窗口化程序管理一个称为消息队列的东西。消息是来自系统(和其他应用程序)的信息,发生了某些事情,例如某人按下了某个键或移动了鼠标,这样窗口就可以正确地对该用户操作作出反应。

处理消息(包括将它们分派到正确的窗口)是程序的责任,并且在Windows窗体应用程序中,通过某些内部消息处理循环在Application.Run方法(或其附近的某个地方)完成。但是如果你想在你的控制台应用程序中显示一个窗口,有人必须对这个过程负责,否则窗口将无法正常工作(实际上,它们根本不起作用)。

如果您以模态方式显示一个窗口,它将自动处理发送给它的消息,因此您可以直接从代码中调用myWindow.ShowDialog,这样可以正常工作 - 但会锁定控制台输入直到窗户关闭。这意味着,您将能够通过Console.WriteLine将文本发送到控制台,但是您将无法 - 例如 - 在窗口关闭之前通过Console.ReadLine向用户询问文本。

class Program 
{
    public static void Main(string[] args) 
    {
        System.Windows.Forms.Form f = new System.Windows.Forms.Form();
        f.Click += (o, e) => { Console.WriteLine("Clicked!"); };
        f.ShowDialog();
        Console.ReadLine();
    }
}

// (run, then click on a form to observe result)

另一方面,如果要以非对话方式显示窗口,事情会变得复杂。我想到的最简单的事情是创建Windows窗体应用程序并使用AllocConsole为应用程序创建单独的控制台窗口(例如Blender这样做)。另一种选择是创建两个不同的应用程序 - 控制台和Windows窗体一个,从第一个开始运行第二个并通过某种机制管理它们的通信(命名管道,共享全局内存,Windows消息,TCP / IP等)。

答案 1 :(得分:-1)

没有直接支持否。

你可以做的是有两个独立的应用程序,一个表单和一个控制台。从表单1启动控制台,并在应用程序之间传递数据。如果要将表单设置为控制台应用程序的“内部”,可以使用

http://msdn.microsoft.com/en-us/library/aa984420%28v=vs.71%29.aspx