2

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

我想在我的程序中添加一个图标。所以,我做了一个新的 compile 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 窗口有我的图标,而不是默认的?

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

4

3 回答 3

2

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

在 Windows 上创建控制台窗口并将其连接到标准输入/输出不是一个简单的过程,但它可以完成

于 2013-08-05T18:30:26.240 回答
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"

一切都将是一样的。您无需手动设置图标。

于 2020-07-28T05:05:31.930 回答
0

您可以通过向窗口发送WM_SETICON带有所需HICON. (您可以HICON通过调用从资源中获取 s LoadImage。)

例如:

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));
于 2013-08-05T18:52:32.353 回答