控制台窗口有图标,但OpenGL / GLUT窗口没有。为什么?

时间:2013-08-05 18:17:34

标签: c++ windows glut

我在Windows下用C / C ++ / OpenGL / GLUT编写程序。我想在我的程序中添加一个图标。我使用MinGW和命令提示符来编译我唯一的一个.cpp文件。我给自己写了一些.bat文件,我可以编译成调试模式,发布模式等等。

我想在我的程序中添加一个图标。所以,我制作了一个新的编译棒,看起来像这样:

windres resource.rc object.o
set PATH=%PATH%;c:\mingw\bin
g++ program.cpp object.o >>>some other settings<<<

我有一个.ico文件和一个“资源脚本”语言的资源文件。资源文件如下所示:

#ifndef _resource_rc
#define _resource_rc

MAINICON ICON "icons\\icon1.ico"

#endif

现在,问题是:我编译了这些东西,我得到了一个发行版.exe,如果我在文件处理程序中看到它,我可以看到.exe文件附近的图标,如果我运行它,那里是角落里的一个图标。但是,我的程序以控制台模式菜单开始。如果您在菜单中旅行,并选择一个给定的菜单点,那么您可以启动一个在OpenGL / GLUT中写入的图形窗口。问题是,控制台窗口有图标,但OpenGL / GLUT窗口没有。它有一个基本的.exe图标(蓝色边框,里面是白色矩形),而不是我的特定图标。这不好:-(

我如何解决,OpenGL / GLUT窗口有我的图标,而不是默认值?

感谢答案,对不起因为我的语法:-)

3 个答案:

答案 0 :(得分:2)

以跨平台方式执行此操作的唯一方法是,如果对您而言非常重要,那就是使您的应用程序不是控制台应用程序。使其成为创建控制台的Windows应用程序。所以你的主窗口将是OpenGL窗口,控制台窗口将是辅助窗口。

在Windows上创建一个控制台窗口并将其挂接到标准输入/输出并不是一个简单的过程,而是it can be done

答案 1 :(得分:1)

对于MSVC来说很简单!

您不需要使用winapi。只需创建一个资源文件

GLUT_ICON ICON logo.ico

其中logo.ico是您的图标文件。

然后将其与您的程序链接

rc resoure.rc
link main.obj resource.RES

就是这样! GLUT将为您设置所有内容:文件浏览器中的图标和运行时中的图标。

您也可以使用Windows方式进行操作。在resource.rc中:

#define ICO_BIG   0x1000
#define ICO_SMALL 0x1001
ICON_BIG ICON "logo.ico"
ICON_SMALL ICON "logo.ico"

一切都会一样。您无需手动设置图标。

答案 2 :(得分:0)

您可以通过发送带有所需HICON的{​​{3}}来明确设置窗口的图标。 (并且您可以通过调用WM_SETICON message从您的资源中获取HICON。)

例如:

SIZE smallIconSize = { GetSystemMetrics(SM_CXSMICON),
                       GetSystemMetrics(SM_CYSMICON) };
HICON icon = static_cast<HICON>(LoadImage(hInstance, MAKEINTRESOURCE(MAINICON),
                                          IMAGE_ICON,
                                          smallIconSize.cx, smallIconSize.cy,
                                          0));
SendMessage(hWnd, WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icon));