|
|
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
Суть в том, что делаю проект Vstudio6, тип проекта win32 application - без мастеров, добавляю в него два *.h и два *.cpp в них наследую классы соответственно от CFrameWnd и CWinApp пишу код запускаю все работает, теперь следующий шаг - добавляю меню, иконку и курсор, делаю Insert->Resource добавляю получившийся файл к проекту, рисую меню, картинки и т.д. потом запускаю проект и смотрю в отладчике что у меня вызов LoadIcon ("ID_ICO_ARROW") или LoadCursor (...) возвращают всегда нуль т.е. не находят ресурса..., пробовал через MAKEINTRESOURCE таже фигня, кусок кода Create (.... , "MY_MENU", ...) также сыпется - не может найти ресурс меню, и ресурсы диалоговых окон, что я сделал не так, по памяти последний раз поступал также пару месяцев назад все работало - забыл что ли какой важный камешек??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2004, 13:10 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
LoadIcon(ID_ICO_ARROW) Без кавычек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2004, 13:53 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
>>> LoadIcon(ID_ICO_ARROW) Sorry, зарапортавался, если бы в коде написал неправильно, то оно бы не скомпилилось, а так компилится но всегда эти функции LoadXXX () возвращают нуль - вот в чем беда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2004, 14:05 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
Тьфу, вообще задурили Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2004, 14:08 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
А что говорит GetLastError() ? А что если посмотреть в resource.h этот идентивикатор и подставить в LoadIcon((LPCTSTR)цыфру_сюда)? А если воспользовать функцией LoadImage? (которая, кстати, лучше, чем LoadIcon...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2004, 14:42 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
Ежели без мастеров, так может Код: plaintext 1. 2. 3. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2004, 15:46 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
сделал так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. получил месага бокс - "указанный тип ресурса в файле образа отсутствует" чтобы не обвинили в идиотизме вот вам пример картинки с деревом проект (приложено) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2004, 16:23 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Код: plaintext И покажи на картинке закладку с ресурсами и с этой иконкой, на всякий случай :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2004, 08:05 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
Заработало, наконец, но вопросов больше чем было до ошибки, далее пример рабочего кода с комментариями и вопросом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: plaintext Итак вопрос: получается что на вход загрузить ресурс можно передавать только число с идентификатором ресурса - но тут я достал с полки книжку и вижу там пример кода где загрузка того же меню идет через строку. И получается также что хотя в msdn есть две версии функции LoadIcon, & etc. отличающиеся параметрами msdn2003 HICON LoadIcon( LPCTSTR lpszResourceName ) const; HICON LoadIcon( UINT nIDResource ) const; Parameters lpszResourceName Points to a null-terminated string that contains the name of the icon resource. You can also use a CString for this argument. nIDResource Specifies the ID number of the icon resource. Но первый вариант не будет работать если подать строку содержащую имя данного ресурса, т.е. в msdn написана фигня в доказательство привожу картинку где внизу в debug-watch значение переменной alsoBad = 0, прав ли я или как ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2004, 12:49 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
авторт.е. в msdn написана фигня Гы, когда я был маленький, то тоже радостно бегал к большим людям с криком: "Я нашёл ошибку в заголовке WinAPI!!!" Причём, правки этих ошибок помогали, проги начинали работать правильно (пример тому TCHAR неправильно использованный) но большие умные люди хитро ухмылялись и говорили мне, в чём я не прав. И я грустный шёл работаь дальше... :) Ну это так... ЛО. авторправ ли я или как ? Или как. Ты сам дал имена своим ресурсам типа 0х66 или 122, причём дефайном! Дефайны при компиляции заменяются начисто, забывая свои текстовые идентификаторы. Поэтому Код: plaintext Про msdn2003 lpszResourceName Points to a null-terminated string that contains the name of the icon resource. всё правильно. Ресурсы могут иметь строчные идентификаторы. Для примера, открой ресурсы обычного виндовского калькулятора, там основная иконка названа как "Calc" или открой телнет, там иконка названа как "TELNET". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2004, 15:17 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
>>> ы, когда я был маленький, то тоже радостно бегал к большим людям с криком: "Я нашёл ошибку в заголовке WinAPI!!!" Причём, правки этих ошибок помогали, проги начинали работать правильно ( ... Может сейчас размахнуться и переписать все win api под себя, никто за команду не хочет :) Ок, понял, но еще остался вопрос, я свято верил что имя которое я задаю в Код: plaintext Код: plaintext 1. 2. 3. если я неправ и это имя исчезает то зачем тогда создавать версию функции которая принимает на вход поинтер на char * - LPCTSTR ведь это одно и тоже что и просто unsigned int - DWORD и прочее - 4 байта и в африке 4-е байта когда я увидел фрагмент кода с этим преобразованим я оочень удивился, получается ведь получающийся LPCTSTR указывает не на строку а на фиг знает что, и для нас важным является только значение данного указателя, а не то что находится по нему. Что самое прикольное я держу перед собой буку по MFC - старый шилдт, за 19.. год и у него в подобной ситуации используется автор LoadCursor ("MYCURSOR") да и сам помню что делал также и все работало, сорсов старых под руками к сожалению нет, последний раз писал на mfc довольно давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2004, 16:38 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
Собственно, в документации все написано: автор lpIconName Points to a null-terminated string that contains the name of the icon resource to be loaded. Alternatively, this parameter can contain the resource identifier in the low-order word and zero in the high-order word. Use the MAKEINTRESOURCE macro to create this value. То есть если старший байт равен нулю, то параметр воспинимается как числовой индентификатор, в противном случае как указатель на строку. Очевидно, заранее предполагается, что данные не могут располагаться в в младших 65 к памяти , что и гарантирует что в старшем слове указателя всегда будет число, отличное от нуля. Почему разрабы из MS так задумали, спросить лучше у них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2004, 17:09 |
|
||
|
Добавление ресурсов к проекту
|
|||
|---|---|---|---|
|
#18+
Поскольку с такой же проблемой продолбался несколько дней напролет (голову свернул), а в инете инфы на этот вопрос вообще никакой (все говорят, что можно так и так, но про маленькую особенность все молчат) оставляю для потомков. Дело в том, что с такой же ситуацией я столкнулся разгребая часть чужих сурсов, пытаясь переделать под себя. Там речь шла о Тул-Баре с загрузкой скинов.. Поскольку весь код (кроме указанного LoadIcon) этого тулбара успешно заработала после непродолжительной доработки напильником, хотелось бы, чтобы и эта часть работала как у разработчика. Причем, если грузить непосредственно по ID (а не по строке), все работает ОК. Но это меня неустраивало как кастрация кода разработчика, ибо там через имя ресурса была допустима загрузка из скинов. Я кучу времени сравнивал свою прогу и прогу, откуда я выцеплял этот тулбар, пытаясь разобраться. Решение нашлось абсолютно случайно, когда я уже забил на это и продолжил набивать ресурсы иконками. Дело в том, что идентификатор ресурса может быть указан в кавычках . Причем разницы в .rc файле никакой (!) - что с кавычками, что без - так и не понял, где это уточняется, но поменять можно в окне properties. По умолчанию идентификаторы создаются без кавычек - в этом и был подводный камень. Но как-то случайно при переименовании этих идентификаторов они оказались в кавычках и выделились из общего списка ресурсов. Удачи :) P.S. Извините за объем текста - эмоции по прошествии почти недельных мучений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 16:58 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32621625&tid=2032940]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
67ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 345ms |

| 0 / 0 |
