Как добавить значок в приложение, созданное с помощью Eclipse Galileo C и MinGW?

Я много читал о том, как добавить значок в приложение, построенное с помощью Visual Studio, но я понятия не имею, как это сделать с Eclipse Galileo / C / MinGW.

может ли кто-нибудь написать описание или дать мне ссылку на описание ?

4 ответов


в Windows, значки, а также некоторые другие элементы (курсоры, рисунки, ...) должны быть указаны в файле ресурсов, который после компиляции будет подключен к программе.

сначала пример того, как добавить значок в программу Windows, которая проиллюстрирует его использование в Eclipse. Вот простая программа, которая просто создает окно, посмотрите, когда мы заполняем WNDCLASSEX, значок приложения ссылается там:

ресурсы.h - этот файл может быть использован для присвоения значения идентификатору ресурса, и поэтому вместо этого используйте значение:

#define AppIcon 101

следующий файл-это файл ресурсов, вы можете создать его вручную или из Eclipse, а также, чтобы создать его в Eclipse, щелкните правой кнопкой мыши каталог, который вы хотите, чтобы он был (в этом случае src) и выберите New -> File. Там напишите нужное имя и нажмите Finish. Чтобы отредактировать его из Eclipse, щелкните его правой кнопкой мыши и выберите Open with -> Text Editor.

ресурсы.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 <windows.h>
#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 tab.
Там вы увидите Pre-build steps -> Command. Этот команда, которую вы заполните, будет выполнена до начала компиляции, поэтому вы скажете ей скомпилировать файл ресурсов. Как вы используете MinGW компилятор ресурсов windres:

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

как вы можете видеть я буду устанавливать скомпилированный файл ресурсов в папке Resources, вы можете оставить его там, где хотите (и поэтому имя файла, оно не должно быть названо resources.rc).

теперь перейти к Tool Settings tab.
Вот, иди в MinGW C Linker -> Miscellaneous, и другими объекты добавьте созданный ранее объектный файл, в этом случае необходимо добавить:

Resources/resources.o

поскольку это приложение для Windows, добавьте опцию -mwindows флаги компоновщика в верхней части той же вкладке.

готово, при создании проекта Eclipse сначала скомпилирует файл ресурсов, а затем свяжет сгенерированный объект как любой другой объектный файл вашего проекта.

я надеюсь, это достаточно ясно, чтобы прочитать это.


Eclipse не настроен на просмотр файлов ресурсов. ЖУК. Таким образом, у них также есть шаги, чтобы добавить его в обработку. Вот шаги на июнь. [http://wiki.eclipse.org/CDT/User/FAQ#How_to_handle_Resource-Script-Files_.27.2A.rc.27_with_CDT.3F][1]

как обращаться с ресурсом-скриптом-файлами'*.rc ' с CDT? В настоящее время обработка windres.exe с CDT невозможно. Вы не можете добавить .rc-файл для проекта, который будет скомпилирован и связан автоматически. Это уже поднято как ошибка в bugzilla.

один из способов-создать шаг предварительной сборки. Под меню Проект / Свойства | C / C++ - Сборка | Настройки / Шаги Сборки | Шаги Предварительной Сборки заполните командную строку: windres --use-temp-file-i..\Myproject будет.rc-o..\MyProject_rc\MyProject_rc.о Сделайте объект известным компоновщику. Под меню Проект / Свойства | C / C++ - Сборка / Настройки Настройки Инструмента | Компоновщик MinGW C++ / Разное | Другие Объекты нажмите на значок "Добавить", заполните линия: "C:\MyWorkspace\MyProject\MyProject_rc\MyProject_rc.о" "MyWorkspace" и "MyProject" заменить на то, что подходит для вашей цели.

вы должны добавить папку .\MyProject_rc, прежде чем строить.

путь к windres.exe должен быть известен eclipse.


то, как я это сделал, было путем создания файла

.rc

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

затем вызвать windres через командную строку с

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

он скомпилирует несколько файлов для вас -- держите тот, который называется .res и переименуйте его как libicon.а. Наконец, включите его в свою программу, добавив его в качестве библиотеки в

Проект - > Свойства - > Сборка - > Настройки - > Компоновщик C++ - > Библиотеки

(убедитесь, что вы сказали Eclipse, где найти файл, используя раздел пути к библиотеке ниже).

надеюсь, что это помогает!


Я сначала застегиваю все значки, которые хочу использовать в проекте. Затем переименовать the .zip to a .Джар

создайте папку ресурсов, если у вас ее еще нет (я использую " lib") Затем поместите файл jar в папку ресурсов.

затем одно простое дополнение к свойствам проекта:

щелкнув правой кнопкой мыши и настроив "путь сборки Java" - выберите библиотеки. Нажмите на Добавить Банки кнопка и добавить иконы.банку в библиотеки-тогда сохранить.

теперь его легко выделить нужный значок изображения внутри редактор конструктора окон например, как jar, содержащий ваши значки, появляется в окне выбора режима выбора изображения в списке ресурсов Classpath. Все работает так, как должно, и прекрасно компилируется.