Форум программистов CodeGuru
20 Июнь 2018, 12:58:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Класс CMenu не опознает родимые функции...  (Прочитано 19788 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BallON
Интересующийся
**
Офлайн Офлайн

Сообщений: 17


Просмотр профиля
« : 30 Ноябрь 2008, 16:57:36 »

После подключения меню к диалоговому окну и попытке применить к нему функцию GetMenuInfo получил сообщение об ошибке:
-- error C2039: 'SetMenuInfo' : is not a member of 'CMenu'
-- see declaration of 'CMenu'

И действительно, заглянув в файл afxwin.h в списке функций класса CMenu не оказалось ни GetMenuInfo, ни SetMenuInfo, ни доброй части других функций, о наличии которых сообщает добрая MSDN...

Среда разработки Visual Studio 6. Может lib сильно отстала от жизни в MSDN?

Можно ли как-то помочь в этой ситуации (искал какие-нибудь обновления на VC++ 6.0, но ничего толкового обнаружено не было -- никаких обновлений для библиотек MFC...)?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 06 Декабрь 2008, 12:06:52 »

Среда разработки Visual Studio 6. Может lib сильно отстала от жизни в MSDN?
lib - в смысле, MFC ?
Ну вообще, в MSDN про последние версии пишут.
В MFC достаточно много добавлений было со времен VC 6.0.

Сейчас, к сожалению, под рукой нет VC 6.0, чтобы посмотреть.
Но вообще, как я понимаю, CMenu::SetMenuInfo и CMenu::GetMenuInfo - это прокси-методы для API-функций SetMenuInfo и GetMenuInfo. А API-функции SetMenuInfo и GetMenuInfo появились только в Windows 98. Да к тому же в онлайновом MSDN для CMenu::SetMenuInfo и CMenu::GetMenuInfo есть статьи только для Visual Studio, начиная с 2003-й.

Из чего возникают большие подозрения, что в h-никах MFC 4.2 таких методов действительно нет.

Можно ли как-то помочь в этой ситуации (искал какие-нибудь обновления на VC++ 6.0, но ничего толкового обнаружено не было -- никаких обновлений для библиотек MFC...)?

Есть сервис паки для VC. У меня лежит 6-й версии за 2004-й год. Надо думать, это последний. Но не факт, что там MFC обновляется.

Что еще можно сделать. Поставить 2003-ю студию, посмотреть соответствующий h-ник, и соотвествующий inl-файл, и скопировать код к себе в проект.
Записан

BallON
Интересующийся
**
Офлайн Офлайн

Сообщений: 17


Просмотр профиля
« Ответ #2 : 07 Декабрь 2008, 22:47:47 »

Спасибо за развернутый ответ.   Пеффко !

А вот еще один интересный момент (правда к меню не имеет отношения:
--------------------------------------------------
В своем проекте мне нужно заменить некоторые файлы из папки, которая обязательно присутствует на компьютерах пользователей. Причем, чтобы сохранить старые версии этих файлов, я создаю в этом целевом каталоге новую папку "old_LEVEL", куда предварительно копирую старое содержимое перед тем, как его уничтожить.
Но вопрос касается вовсе не работы с каталогами и файлами...

По ходу формирования путей к файлам столкнулся с непредвиденной проблемой -- строки класса CString иногда игнорируют операцию "+"

Пример:
Код:
----------------------------------------
CString s_Path;
CString s_old_folder;
CString s_GAME_folder = ""C:\\Program Files\\Bitmap Brothers\\Z\\";
...
CString strEd = "102";
...
...

s_Path = s_GAME_folder + "LEVEL" + strEd;
s_old_folder = s_Path + "\\old_LEVEL" + strEd;
----------------------------------------------------------------
Казалось бы, должно получиться:
s_Path - { C:\Program Files\Bitmap Brothers\Z\LEVEL102 }
s_old_folder - { C:\Program Files\Bitmap Brothers\Z\LEVEL102\old_LEVEL102 }

Вместо этого в s_old_folder копируется только строка s_Path и всё!!! Никаких сообщений по этому поводу не поступает. Ошибка определяется только по неработоспособности кода...
Что интересно, в эту строку потом вообще ничего нельзя добавить.   Непонимающий

Отчего возникают такие сюрпризы и как с ними бороться?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #3 : 08 Декабрь 2008, 00:37:28 »

Оно всегда так, или если вместо строки "\\old_LEVEL" что нибудь другое поставить, все будет норм ?
Если сделать
Код:
s_old_folder = s_Path + CString("\\old_LEVEL") + strEd;
прокатит ?
просто сейчас под руками VC нет.

Вообще, в MSDN описываются какие то баги с CString. Надо поискать...
Записан

BallON
Интересующийся
**
Офлайн Офлайн

Сообщений: 17


Просмотр профиля
« Ответ #4 : 10 Декабрь 2008, 01:30:59 »

Нет  Шпион К сожалению результат одинаков:

На картинке результаты работы обеих записей... В обоих случаях игнорируется последняя добавляемая строка ".DAT"  Ухмылка

Гарантированно работает только так:

Т.е. к строке последовательно добавляем:
+ буфер
+ строка
+ буфер
+ строка
и т.д.
Так ничего не теряется, хотя, конечно, хотелось бы по-простому, по-рабоче-крестьянски  Ламер

А вот еще вопрос, если можно:
-----------------------------------------------------------
Как управлять свойствами Visidle и Disabled стандартных контролов, таких как Radio-кнопки и простой List, добавленных в редакторе диалога?
Хочется сделать их серенькими и недоступными, если они в данный момент без надобности. Но в функциях класса CListBox нет доступа к статусу элемента (и изменению)...
Записан
Valery
Пользователь
***
Офлайн Офлайн

Сообщений: 83


Просмотр профиля
« Ответ #5 : 10 Декабрь 2008, 22:30:03 »

Visible ModifyStyle
Disable   EnableWindow
По моему так
С уважением Валерий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!