2012-02-09 83 views
1

我最近开始了一个教程,学习如何使用Windows API编写GUI,并且我遇到了一个我认为很愚蠢的意外问题。我使用Code :: Blocks作为默认的OpenWatcom编译器,我创建了一个简单的GUI程序编译和链接。问题是,当我尝试启动程序时,甚至从发行版本中,像命令行一样显示在我的程序窗口后面,就像我试图通过编译代码::块的&运行选项运行它。有什么办法可以删除命令行显示吗? This is how it looks like when I run it.如何从编译的程序中删除命令行?

编辑:这不是我的主要定义的问题。这是我的主要定义:|

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow)  

回答

3

在Windows中,PE可执行格式有一个标志,指示可执行模式是“控制台模式”还是“GUI模式”。如果是“控制台模式”,则操作系统将在程序运行时附加一个控制台窗口(如果需要,可以打开一个新窗口)。

在您的构建环境中会有一个链接器设置,用于控制您生成的EXE是否标记为控制台或GUI。

+0

Hegwill我发现这个选项,虽然我改变了项目选项,以便发布文件是GUI应用程序而不是控制台应用程序,唯一的区别是现在当我通过构建环境运行程序时,“命令行”关闭在我关闭窗口之前,命令行刚刚等待按键关闭......然而发布可执行文件具有相同的结果:/ – 2012-02-09 00:14:32

+0

好吧,如果您有'dumpbin.exe'实用程序(或等价物),检查以确保可执行文件标记为您希望的方式。 – 2012-02-09 00:24:38

+1

对不起,我现在没有Windows可用。另一个尝试的方法是创建一个以正确GUI模式开始的* new *项目,并查看它是否正常工作。 – 2012-02-09 01:02:34

0

取而代之的是main功能,你需要使用Win32的标准入口点WinMain

 
int WINAPI WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine, 
        int nCmdShow); 

参见:http://sol.gfxile.net/wintut/ch2.html

或者,如果您不能重新编译,在Windows 7中,你可以这样做:

START myProgram {}进入

参见:http://support.microsoft.com/kb/126410

+0

已经做到了。事实并非如此。也许主文件不应该命名为main.cpp还是我错了? – 2012-02-09 00:13:37

2

这由/SUBSYSTEM链接器选项控制。它目前设置为CONSOLE,您需要将其更改为WINDOWS。文档任务的main需要如何改变:

应用程序并不需要一个控制台,可能是因为它与用户的交互创建 自己的Windows。如果的WinMainwWinMain 被本机代码所定义,或的WinMain(HISTANCE *,HINSTANCE *,炭 *,INT)wWinMain(HINSTANCE *,HINSTANCE *,为wchar_t *,INT)被定义对于托管代码,WINDOWS是默认值。

专门为Code::Blocks,链接器选项可以通过this process改变:

代码::块只需打开项目 - >属性对话框,切换到 “生成目标”选项卡并更改您想要修改为“GUI应用程序”或“控制台应用程序”的构建目标的“类型” 。不需要 担心“主”功能。

+0

正如我上面对Greg Hegwill所做的评论所说的那样,我已经这样做了,重建项目但仍然会发生同样的事情。 – 2012-02-09 00:20:26