Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать динамическое WxMenu? 
:(
    Опции темы
1datr
Дата 5.9.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



На платформе WxWidgets хочу сделать меню у которого есть динамические пункты и при нажатии на эти пункты должна вызываться одно и то же событие с разными параметрами. Как передать эти параметры?
Вот функция которая создает новые пункты меню
Код

void datchikiFrm::AddPuncts()
{
    // Add images from directory ‘path’
    wxDir dir;
    if (dir.Open(wxGetCwd()+"\\data\\"))
        {
        wxString filename;
        bool cont = dir.GetFirst(&filename, wxT("*.*"), wxDIR_FILES);
        int i=0;
        while ( cont )
            {
            wxFileName fname(filename);
            // Create a menu item
            wxMenuItem* pItem = new wxMenuItem(this->WxMenuBar1->GetMenu(0), ID_MNU_______1006, wxT(fname.GetName()));                            
            this->WxMenuBar1->GetMenu(0)->Insert(0,pItem);
            // set the handler
           // this->WxMenuBar1->GetMenu(0)->Connect(ID_MNU_______1006+i,wxEVT_COMMAND_MENU_SELECTED,wxCommandEventHandler(datchikiFrm::OpenFile),&filename);            
            cont = dir.GetNext(&filename);
            i++;
            }                
        }
}

Вот эту функцию надо вызывать, filename должен быть параметром
Код

/*
* OpenFile
*/
//void datchikiFrm::OpenFile(wxCommandEvent& WXUNUSED(event))
void datchikiFrm::OpenFile(wxCommandEvent& event)
{

    // open file and compile it
    wxTextFile file;
    //this->WxMenuBar1->
    file.Open(wxT(wxGetCwd()+"\\data\\"+filename+".txt"));
    file.Close();
}

PM MAIL   Вверх
Amp
Дата 5.9.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Когда добавляется пункт меню, передается его идентификатор, который впоследствии можно получить через wxCommandEvent::GetId()

Код

for(size_t i = 0; i < cntr; i++)
{
    menu->Append(MENU_ID + i, labels[i]);
    ...
}


void MyFrame::OnMyMenu(wxCommandEvent &event)
{
   if(event.GetId() == MENU_ID + 1) { ... }
   else if (event.GetId() == MENU_ID + 5) { ... }

   ...
}


Обработку событий можно установить, либо через wxID_ANY, с последующим event.Skip() в обработчике (чтобы события от других меню не отвалились)

Код

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(wxID_ANY, MyFrame::OnMyMenu)
        ...
END_EVENT_TABLE()


Либо, через EVT_MENU_RANGE, где первыми двумя параметрами указывается диапазон в пределах которого изменяются идентификаторы. Более правильный вариант.

Код

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU_RANGE(MENU_ID, MENU_ID_MAX, MyFrame::OnMyMenu)
        ...
END_EVENT_TABLE()




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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