4

我真的不知道为什么会这样……我在 emacs 中创建了一个 win32 应用程序,每当我创建并运行它(不是通过命令提示符)时,窗口下方就会弹出一个命令提示符窗口。如果我在 Code::Blocks 中构建一个 win32 应用程序,并且只运行它的默认模板,那么它会在没有命令提示符窗口的情况下运行。我查看了两者的代码,无法弄清楚可能导致这种情况的原因......

我认为是因为我在其中包含了一些 printf() 语句,但我不希望它们留在那里(它们用于调试),所以我写了一个宏:

#define DEBUG

在 main.c 中,和

#ifdef DEBUG
#include<stdio.h>
#define DBG printf
#else
#define DBG
#endif

在标题中(#define DEBUG当然包括在后面)。

当我取消DEBUG时,窗口仍然出现......我不知道我正在做什么来实现它,什么样的事情会导致命令提示符窗口出现在win32应用程序中?我尝试使用所有的****Ex()windows 功能,而不是仅仅CreateWindow()等,但这并没有改变任何东西。我检查并重新检查了类定义和注册,但无济于事,并确保我没有忘记 printf() 语句(即使我这样做也会导致错误,因为stdio.h除非定义了 DEBUG,否则不包括在内)。

这是我包括的:

#include<windows.h>
#include<windowsx.h>
#include"main.h"
#include"windowproc.h"

有谁知道是什么原因造成的?我什至注释掉了我所有的 stdio、DBG、printf 垃圾,它仍然出现,我发誓我的代码和 Code::Blocks 生成的代码之间没有区别,除了我使用 HANDLE_MSG 和一些额外的函数拆分代码。

更新

我正在使用 MinGW 3.4.5。使用 -mwindows 开关有效,谢谢

4

3 回答 3

6

尝试使用 -mwindows 开关进行链接。

你的程序也应该有这样的 main 方法:

int WINAPI WinMain(
....
)

与传统的 int main() 相反。

相关话题:

于 2009-06-08T06:30:37.510 回答
2

Windows 在“控制台”和“Windows”应用程序之间有所区别。控制台应用程序将始终与关联的终端一起运行。

有关差异的详细信息,请参阅此问题

于 2009-06-08T06:31:50.190 回答
2

Don't know what compiler you are using but I know GCC needs the -mwindows option to suppress the command line window.

于 2009-06-08T06:32:05.523 回答