我最近开始学习如何使用Windows API编写GUI代码,我遇到了一个意想不到的问题,我认为这有点愚蠢。我正在使用Code :: Blocks和OpenWatcom编译器作为默认值,我已经创建了一个简单的GUI程序编译和链接。问题是当我尝试启动程序时,即使是从发布版本开始,类似命令行显示在我的程序窗口后面,就像我试图通过编译和放大器运行它一样。运行Code :: Blocks的选项。有没有办法删除命令行显示?
编辑:我的主要定义不是问题。这是我的主要定义:|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
答案 0 :(得分:3)
在Windows中,PE可执行格式有一个标志,指示可执行模式是“控制台模式”还是“GUI模式”。如果是“控制台模式”,那么只要程序运行,操作系统就会附加一个控制台窗口(必要时打开一个新窗口)。
在构建环境中的某处将有一个链接器设置,用于控制您生成的EXE是标记为控制台还是GUI。
答案 1 :(得分:2)
这由/SUBSYSTEM链接器选项控制。它目前设置为CONSOLE
,您需要将其更改为WINDOWS
。文档规定了main
需要如何更改:
应用程序不需要控制台,可能是因为它创建了 它自己的窗口用于与用户交互。如果 WinMain 或 wWinMain 是为本机代码定义的,或 WinMain(HISTANCE *,HINSTANCE *,char *,int)或 wWinMain(HINSTANCE *,HINSTANCE *,wchar_t *,int)是为托管代码定义的,WINDOWS是默认值。
特别是对于Code::Blocks
,链接器选项可以由this process更改:
在Code :: Blocks中只需打开Project-> Properties对话框,切换到 “构建目标”选项卡并更改构建目标的“类型” 想要修改为“GUI应用程序”或“控制台应用程序”。没必要 担心“主要”功能。
答案 2 :(得分: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
{enter}