我在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窗口有我的图标,而不是默认值?
感谢答案,对不起因为我的语法:-)
答案 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));