如何将Icon添加到使用Eclipse Galileo C和MinGW构建的应用程序中?

我已经阅读了很多关于如何向使用Visual Studio构建的应用程序添加图标的内容,但我不知道如何使用Eclipse Galileo / C / MinGW执行此操作。

任何人都可以写一个描述,或给我一个描述的链接?

在Windows中,必须在资源文件中指定图标以及其他一些元素(游标,位图等),一旦编译就会链接到程序。

首先是一个关于如何向Windows程序添加图标的示例,该程序将说明它在Eclipse中的使用。 这是一个简单的程序,它只是创建一个窗口,看看我们填充WNDCLASSEX的时间,应用程序的图标在那里被引用:

resources.h – 此文件可用于为资源标识符分配值,因此请使用该值:

#define AppIcon 101 

下一个文件是资源文件,您可以手动创建它,也可以在Eclipse中创建它,在Eclipse中创建它,右键单击您想要的目录(在本例中为src )并选择New -> File 。 写下您想要的名称,然后单击“ Finish 。 要在Eclipse中编辑它,请右键单击它并选择Open with -> Text Editor

resources.rc – 将在此处指定图标:

 #include "resources.h" // The icon path I used will be needed by Eclipse. // If you want to use back-slashes you have to scape them (\\ instead of \): AppIcon ICON "../src/icon.ico" 

demoicon.c – 包含程序代码的文件:

 #include  #include "resources.h" const char *ClassName = "DemoIcon"; // Declaration of the window procedure, to be used in the WNDCLASSEX struct: LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd) { WNDCLASSEX wc; HWND hWnd; MSG msg; // Filling the structure: wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; // Remember this just loads 32x32, use LoadImage() instead for other dimensions (16x16, 48x48, ...): wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(AppIcon)); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); wc.lpszMenuName = NULL; wc.lpszClassName = ClassName; // Here we'll use LoadImage, as we need a 16x16 mini icon: wc.hIconSm = LoadImage(hInstance,MAKEINTRESOURCE(AppIcon),IMAGE_ICON,16,16, LR_DEFAULTCOLOR); // Registering the class: if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Could not register window.", "Error", MB_ICONEXCLAMATION | MB_OK); return -1; } // Create the window using the "MainWindow" class: hWnd = CreateWindowEx(WS_EX_WINDOWEDGE, ClassName, "Demo Icon", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 150, NULL, NULL, hInstance, NULL); // If the window was not created show error and exit: if(hWnd == NULL) { MessageBox(NULL, "Could not create window.", "Error", MB_ICONEXCLAMATION | MB_OK); return -1; } // Set the windows show state, to show it: ShowWindow(hWnd, nShowCmd); // Draw the window: UpdateWindow(hWnd); // Retrieve messages from the message queue: while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } // Implementation of the window procedure, will handle the messages: LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; } 

现在,在Eclipse项目源目录中确保您拥有所有文件(在示例中是前面提到的3个文件和图标文件)。

之后转到Project -> Properties
在那里,转到C/C++ Build -> Settings -> Build Steps选项卡。
在那里你会看到Pre-build steps -> Command 。 您在此处填写的命令将在编译开始之前执行,因此您将告诉它编译资源文件。 在使用MinGW时,资源编译器是windres

 windres ../src/resources.rc -o ../Resources/resources.o 

正如您所看到的,我将把编译后的资源文件放在名为Resources的目录中,您可以将它保留在您想要的位置(因此文件的名称,不必将其命名为resources.rc )。

现在转到“ Tool Settings选项卡。
在那里,转到MinGW C Linker -> Miscellaneous ,在其他对象中添加之前创建的目标文件,在这种情况下你应该添加:

 Resources/resources.o 

由于这是一个Windows应用程序,请将选项-mwindows添加到同一选项卡顶部的链接器标志。

完成,在构建项目时,Eclipse将首先编译资源文件,然后将生成的对象链接为项目的任何其他目标文件。

我希望能够通读这一点很清楚。

Eclipse未设置为查看资源文件。 BUG。 因此他们也有步骤将其添加到处理中。 这是六月的步骤。 [http://wiki.eclipse.org/CDT/User/FAQ#How_to_handle_Resource-Script-Files_.27.2A.rc.27_with_CDT.3F][1]

如何使用CDT处理Resource-Script-Files’* .rc’? 目前使用CDT处理windres.exe是不可能的。 您无法将.rc文件添加到要自动编译和链接的项目中。 这已经成为bugzilla中的一个bug。

一种方法是创建预构建步骤。 在menue项目下| 属性| C / C ++ – 构建| 设置| 构建步骤| 预构建步骤填写命令行:windres –use-temp-file -i .. \ MyProject.rc -o .. \ MyProject_rc \ MyProject_rc.o使链接器知道该对象。 在menue项目下| 属性| C / C ++ – 构建| 设置工具设置| MinGW C ++链接器| 杂项| 其他对象单击“添加”图标,填写以下行:“C:\ MyWorkspace \ MyProject \ MyProject_rc \ MyProject_rc.o”’MyWorkspace’和’MyProject’替换为适合您的目的。

您必须在构建之前添加文件夹。\ MyProject_rc。

必须知道日食的windres.exe路径。

我这样做的方法是创建一个文件

icon.rc

 #define AppIcon 101 AppIcon ICON "../icon.ico" 

然后通过命令提示符调用windres

 windres my.rc -O coff -o my.res 

它会为你编译几个文件 – 保留一个名为icon.res的文件并将其重命名为libicon.a 。 最后将它作为库添加到您的程序中

项目 – >属性 – >构建 – >设置 – > C ++链接器 – >库

(确保使用下面的库路径部分告诉Eclipse在哪里找到该文件)。

希望这可以帮助!

我首先压缩了我想要在项目中使用的所有图标。 然后 .zip 重命名为.jar

如果您还没有资源文件夹(我使用“lib”),请创建一个资源文件夹。然后将jar文件放在资源文件夹中。

然后一个简单的项目属性添加:

通过右键单击并配置“Java Build Path” – 选择Libraries选项卡 。 单击Add JARs按钮并将icons.jar添加到库中 – 然后保存

现在可以轻松地在Window Builder编辑器中分配所需的图像图标,例如,包含图标的jar将出现在Classpath资源列表中的Image Selection模式选择器中。 一切都按预期工作,并编译好。