Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713

#define в ресурсах приложения MFC

30.01.2015, 10:34. Показов 1885. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть необходимость в зависимости от #define MY_DENIFE менять иконку у приложения. Не могу понять в чем косяк..

собственно:
в *.rc делаю:
C++
1
IDR_MAINFRAME           ICON    DISCARDABLE     MAIN_ICON_PATH

в начале файла Resource.h подключаю файл с таким содержанием
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifdef MAIN_ICON_PATH 
#undef MAIN_ICON_PATH 
#endif //MAIN_ICON_PATH
 
#undef MAIN_ICON_PATH
#define MAIN_ICON_PATH "res\\ICO.ico"
 
#ifdef MY_DENIFE
    #pragma message (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   ИДЕТ КОМПИЛЯЦИЯ ДЛЯ XXXX")
    #undef MAIN_ICON_PATH
    #define MAIN_ICON_PATH "res\\ICO1.ico"
#else 
    #pragma message (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   ИДЕТ КОМПИЛЯЦИЯ ДЛЯ ВСЕХ ")
#endif //MY_DENIFE
 
#pragma message ("ИСПОЛЬЗУЕМАЯ ИКОНКА: ")
#pragma message (MAIN_ICON_PATH)
В ИТОГЕ: всегда появляется иконка от #define MAIN_ICON_PATH "res\\ICO.ico", не зависимо от MY_DENIFE
Хотя MY_DENIFE пишет корректные сообщения и используемая иконка отображается тоже верно.
например:
Кликните здесь для просмотра всего текста

при обьявленном MY_DENIFE пишет:
--------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>> ИДЕТ КОМПИЛЯЦИЯ ДЛЯ XXXX
ИСПОЛЬЗУЕМАЯ ИКОНКА:
res\\ICO1.ico
--------------------------
Но отображается иконка "res\\ICO.ico"


Другой момент, если все убрать и оставить в файле только
#define MAIN_ICON_PATH "res\\ICO1.ico" или #define MAIN_ICON_PATH "res\\ICO.ico"
то все ок собирается,.. везде верные иконки.
но очень надо завязатся на define

до этого ни разу с definами в ресурсах не баловался.. Help


ПС: знаю, что иконки на компе кешируются, проблема актуальна
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2015, 10:34
Ответы с готовыми решениями:

Изменить строку в ресурсах приложения
вот столкнулся с такой проблемой: if (openFileDialog1.ShowDialog() == DialogResult.OK) { ...

Папки и файлы в ресурсах приложения
Есть программа которая формирует отчеты в html. Так же есть css и js файлы, которые располагаются в нескольких подпапках и их программа не...

Работа с файлами, сохраненными в ресурсах приложения
Постараюсь правильно объяснить задачу, которую не могу решить. Работаю в Visual Studio 2012. Как я понял в сам файл приложения можно...

6
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.01.2015, 16:25
Aloir, где определяется MY_DENIFE? Где еще определяется MAIN_ICON_PATH? Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
 
// ...
 
#ifdef MY_DENIFE
    #pragma message (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   ИДЕТ КОМПИЛЯЦИЯ ДЛЯ XXXX")
    #define MAIN_ICON_PATH "res\\ICO.ico"
#else
    #pragma message (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   ИДЕТ КОМПИЛЯЦИЯ ДЛЯ ВСЕХ ")
    #define MAIN_ICON_PATH "res\\ICO1.ico"
#endif
 
#pragma message ("ИСПОЛЬЗУЕМАЯ ИКОНКА: ")
#pragma message (MAIN_ICON_PATH)
 
// ...
1
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
30.01.2015, 16:35  [ТС]
schdub, определяется в настройках проекта (препроц)

пробовал, не катит..
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.01.2015, 16:43
Цитата Сообщение от schdub Посмотреть сообщение
Где еще определяется MAIN_ICON_PATH?
Aloir, как определяется MY_DENIFE? Что выводится при компиляции? А если при смене значения MY_DENIFE делать Clean и Rebuild?
1
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
31.01.2015, 02:42  [ТС]
schdub, Да, конечно пробывал.
MY_DENIFE на изображении, просто обьявляю

интересно, что если сделать так, то все верно отрабатывает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifdef MAIN_ICON_PATH 
#undef MAIN_ICON_PATH 
#endif //MAIN_ICON_PATH
 
#define MY_DENIFE //<<<<<<<<<<<<обьявляем тут его,а не в препроцессоре
 
#undef MAIN_ICON_PATH
#define MAIN_ICON_PATH "res\\ICO.ico"
 
#ifdef MY_DENIFE
    #pragma message (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   ИДЕТ КОМПИЛЯЦИЯ ДЛЯ XXXX")
    #undef MAIN_ICON_PATH
    #define MAIN_ICON_PATH "res\\ICO1.ico"
#else 
    #pragma message (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   ИДЕТ КОМПИЛЯЦИЯ ДЛЯ ВСЕХ ")
#endif //MY_DENIFE
Миниатюры
#define в ресурсах приложения MFC  
Вложения
Тип файла: rar TestAppMFC.rar (205.4 Кб, 12 просмотров)
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
31.01.2015, 23:32
Aloir, а почему бы в коде не загружать иконку в зависимости от определения MY_DENIFE:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ...
 
CTestAppMFCDlg::CTestAppMFCDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CTestAppMFCDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(
#if (MY_DENIFE == 1)
        IDR_ICO1
#else
        IDR_ICO
#endif
    );
}
 
// ...
Eсли хотите определить MY_DENIFE, то явно указывате его значение, например, MY_DENIFE=1 в Preprocessor Definitions.

Ваш код собрать не могу, т.к. у меня нет всех необходимых заголовочных файлов MFC, успользуемых в вашем проекте.
1
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
01.02.2015, 02:12  [ТС]
Лучший ответ Сообщение было отмечено schdub как решение

Решение

schdub, мне надо менять иконку самого exe-ка
а в приложении все понятно, там я даже на define не завязывался бы..

да уже определял и так и этак..


хм, вроде решил проблему.. перенес объявление с ветки C/C++ - Preprocessor Definitions. , в ветку Resource/general - Preprocessor Definitions.

Как я понял, есть отдельный компилятор для файлов ресурсов и для файлов исходников.. надо пойти пошарить.

спасибо за внимание, вопрос решен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2015, 02:12
Помогаю со студенческими работами здесь

Хранить шаблон Word в ресурсах приложения
Ув. Специалисты, имеется такая задумка, в решение visual studio 2010 (vb.) надо добавить шаблон док-та WORD (зашить его в exe),для того...

Можно ли использовать DLL в ресурсах приложения
Доброго времени суток. Имеется программа, которая использует две dll библиотеки, в частности freeglut.dll и DevIL.dll, а также 3D...

Можно ли хранить файл с текстом в ресурсах приложения
Здравствуйте. Если мне нужно подгрузить большой (ну скажем, предложений 10-15) текст, то как лучше поступить? Можно, кончено, считать при...

Можно ли хранить файлы doc в ресурсах приложения
можно ли в Properties записать док файл? (шаблон) если можно то, какой это тип данных? Как это сделать?!

Сохранить данные в текстовый файл, расположенный в ресурсах приложения
Здравствуйте,у меня вопрос,мне нужен способ,с помощью которого я смогу хранить данные типа string и double, в текстовом файле к примеру ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru