Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MFC CMenu, Где THIS? 
:(
    Опции темы
Coocky
Дата 22.3.2004, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Да ли домашнее задание,перевести меню с аглицкого на русское.Меню содержит подменю.
Ну все понятно с реализацией,только ошибочка возникает...
Итак:работаю с AppWizard.Меню прикреплено изначально к диалогу.
И вот что происходит в программе:
[code] СMenu *pmenu;CMenu submenu;
submenu=pmenu->GetSubMenu ( int pos) //вот тут-то и отладчик дает ошибку : thisa нема(извините за Украинский язык smile.gif )
Че я только не делал :и присоединял меню вручную,и загружал и т.д.(даже с МСДН скатал код,как строчку подменять-всеравно void biggrin.gif )
Че делать?(А лучше код рабочий


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Borisff2003
Дата 23.3.2004, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



А вот так специально написанно
СMenu *pmenu;CMenu submenu;
или все же?
СMenu *pmenu;CMenu *submenu;
--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
Coocky
Дата 23.3.2004, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62




Цитата
А вот так специально написанно
СMenu *pmenu;CMenu submenu;
или все же?
СMenu *pmenu;CMenu *submenu

Извините,господа,я торопился и поэтому забыл звезду поставить(я даже скобки не все поставил smile.gif ) Конечно,если прототип меню
Код
CMenu *GetSubMenu(int pos) const;//интересно а компилятор мне б позволил :D

Но я делал даже так
Код
submenu//обьект моего класса
CMenu *pmenu;
pmenu=submenu.GetSubMenu(int pos);//все равно-нето

Я ж даже с МСДН перекатывал
Ну короче,код для работы со строками субменю напишите(не забудьте:меню изначально присоеденено к окну диалога!)
З.Ы.Может компилятор не лицензионный biggrin.gif

Это сообщение отредактировал(а) Coocky - 23.3.2004, 16:34


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
bel_nikita
Дата 24.3.2004, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Сходи на http://www.firststeps.ru
Там есть пример про Англицкий и Русский меню.

PS: Ну, если это то, что тебе надоsmile.gif


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
DKeN
Дата 24.3.2004, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.3.2004

Репутация: нет
Всего: нет



Coocky
submenu=pmenu->GetSubMenu(0) странно, такая запись обычно юзается когда используется всплывающее (Popup Menu) меню.

и еще запиши так:

submenu.LoadMenu(ID_MENU);
pmenu=submenu.GetSubMenu(0);
тогда ошибки не будет:-)
PM WWW ICQ YIM   Вверх
Coocky
Дата 24.3.2004, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Цитата
submenu=pmenu->GetSubMenu(0) странно, такая запись обычно юзается когда используется всплывающее (Popup Menu) меню.
Все правильно,друзья,меню всплывающее,но оно уже присоеденено к окну в AppWizard
Я уже и отсоединял и присоединял меню и загружал и что только не делал,но в процессе выполнения возникает ошибка.
Цитата
Там есть пример про Англицкий и Русский меню.

PS: Ну, если это то, что тебе надо

Подменяю меню я без проблем ,у меня задание перевести
Цитата
submenu.LoadMenu(ID_MENU);
pmenu=submenu.GetSubMenu(0);
тогда ошибки не будет:-)

Да, кстати,так я делал-ошибки нет,но Modify не работает(надо ж перевод сделать,вставить русский текст)
Че то я запутался...
У меня есть меню
Код
                Еnglish menu

            Save->             пункт1
                               пункт2
                               пункт3


            Save As->        пункт10
                               пункт20
                               пункт30


           Close->             пункт100
                               пункт200
                               пункт300

Все чисто схематично.Вот и нужно перевести все от Еnglish menu до пункт300

Это сообщение отредактировал(а) Coocky - 24.3.2004, 23:17


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
DKeN
Дата 24.3.2004, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.3.2004

Репутация: нет
Всего: нет



так погодь у тя должно быть либо 2 меню на разных языках, либо по второму пути, заменить текст менюшек.

Если проект в VC, то могу обяснить как это делается, так как делал подобное в своих прогах.

Либо я чтото не допонял:-(
PM WWW ICQ YIM   Вверх
Coocky
Дата 24.3.2004, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



У меня есть меню на аглицком,написаное по шаблону и присоедененое с помощью ресурсов к окну.Есть кнопка,при нажатии на которую происходит замена(превод меню) на русский,просто ,другими словами его модификация.(Я меняю строки заранее подготовлеными на русском)


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 25.3.2004, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Цитата
pmenu=submenu.GetSubMenu(0);

И все же-почему не видет VS мои POP_Menu-они же есть


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
DKeN
Дата 25.3.2004, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.3.2004

Репутация: нет
Всего: нет



итак приведу пример моих функций, может кому полезно будет:
Тут свои классы подобные MFC + WinAPI
Функция перебирает элементы меню + подменю, и вызывает для каждого элемента функцию изменяющую строку меню на новую.
Цитата

void UpdateMenuLanguage(Window *wnd,char *namelng,UINT nID_START,BOOL bCreate)
{
if(wnd==NULL) return;

File lng;
lng.SetFile(NAMEFILELNG);

HMENU hMenu=GetMenu(wnd->GetHWND()); //для главного меню, можно подставить хендл своего меню
int count=GetMenuItemCount(hMenu);

for(int i=0;i<count;i++) //main
{
  ModifyMenuLanguage(hMenu,i,nID_START,lng,namelng,bCreate);

  HMENU hSub=GetSubMenu(hMenu,i);
  if(hSub)
  {
  int countsub=GetMenuItemCount(hSub);//проверяем естьли элементы у подменю
 
  for(int j=0;j<countsub;j++) //main
  {
    ModifyMenuLanguage(hSub,j,nID_START+count,lng,namelng,bCreate);

    HMENU hSub2=GetSubMenu(hSub,j);
    if(hSub2)
    {
    int countsub2=GetMenuItemCount(hSub2);
 
    for(int j2=0;j2<countsub2;j2++) //main
    {
      ModifyMenuLanguage(hSub2,j2,nID_START+countsub+count,lng,namelng,bCreate);
    }

    }
  }
  }
}

if(bCreate==FALSE)
  DrawMenuBar(wnd->GetHWND());
}

Функция модификации меню, загружает строку из ини-файла и меняет ее у меню.
Цитата

void ModifyMenuLanguage(HMENU hMenu,int i,UINT nID_START,File &lng,char *namelng,BOOL bCreate)
{
  int nID=GetMenuItemID(hMenu,i);
 
  if(nID > 0)
  {
  if(bCreate)
  {
    char text[MAX_PATH];
    GetMenuString(hMenu,nID,text,sizeof(text),MF_BYCOMMAND);

    if(text[0])
    lng.WriteResID(namelng,nID,text);
  }
  else
  {
    char *ch=lng.ReadResID(namelng,nID);
    resItems.AddItem(nID,ch);
   
    if(ch[0])
    ModifyMenu(hMenu,nID,MF_BYCOMMAND|MF_STRING,nID,ch);
  }
  }
  else
  {
  if(bCreate)
  {
    char text[MAX_PATH];
    GetMenuString(hMenu,i,text,sizeof(text),MF_BYPOSITION);

    if(text[0])
    lng.WriteResID(namelng,nID_START+i,text);
  }
  else
  {
    char *ch=lng.ReadResID(namelng,nID_START+i);
    resItems.AddItem(nID_START+i,ch);

    if(ch[0])
    ModifyMenu(hMenu,i,MF_BYPOSITION|MF_STRING,0,ch);
  }

  }
}

Добавлено @ 18:48
Coocky
приведи полее полный код! кусочки так чтобы представлять полную картину.
PM WWW ICQ YIM   Вверх
Coocky
Дата 27.3.2004, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Вроде бы все хорошо и понятно,только вот не не удобно мне через HMENU работать... sad.gif
Да и некоторе функции непонятны
Код
lng.WriteResID(namelng,nID,text);

или
Код
lng.ReadResID(namelng,nID);

Понял что запись/чтение,а вот чего....
Вообще-то немного громоздко получилось,но работает.
И еще:
Код
resItems
Что это за обьект?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0984 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.