Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Wx] Ассоциация пунктов меню с тулбаром, как это делать грамотно? 
V
    Опции темы
Static
Дата 3.2.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Подскажите, кто знает. Вот помнится мне, в Билдере сразу такая фича была - там можно было элементу тулбара прямо указать, с каким пунктом меню он ассоциирован. Используя code:blocks'овский wxSmith я такого не нашел. Не нашел и в документации к wxWidgets. Конечно, не исключено, что я слепой smile, но все-таки охота получить совет. Стоит ли в обработчике каждого менюайтема вызывать элемент тулбара или наоборот, или еще как-то... может надо с window_id крутить (я кстати, до сих пор особо не понял, нафиг они smile )
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
taiven
Дата 3.2.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



можно например так попробовать:
Код

void OnOpenDoc(wxCommandEvent &event);

Код

Connect(OPEN_MENU_ITEM_ID,
        wxEVT_COMMAND_MENU_SELECTED,
        wxCommandEventHandler(MainWindow::OnOpenDoc));

Connect(TOOLBAR_OPEN_BUTTON_ID,
        wxEVT_COMMAND_BUTTON_CLICKED,
        wxCommandEventHandler(MainWindow::OnOpenDoc));




Это сообщение отредактировал(а) taiven - 3.2.2009, 15:52
PM   Вверх
Static
Дата 3.2.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



бесспорно...
Тут вопрос стоит даже не столько "как?", сколько "что выбрать?". Ибо вариантов множество.

P.S. Спасибо за комментарий.
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
t_rex
Дата 4.2.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Эээ.. так а ведь кнопки на тулбаре генерят не BUTTON_CLICKED, а MENU_SELECTED. Поэтому достаточно в EVENT_TABLE сделать запись с указанием идентификатора меню и обработчика соьытия, а потом это событие будет приходить и от тулбара и от пункта меню
--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей
PM MAIL WWW ICQ Skype GTalk   Вверх
Static
Дата 4.2.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



хм. Чуть подробней, если можно. Каким образом получить одно и то же событие от пункта меню и кнопки тулбара? 
Т.е. в EVENT_TABLE напишу я обработчик для....эээ....ну вот классический пример:

Код

BEGIN_EVENT_TABLE(MyFrame, WxFrame)
       EVT_MENU(ID_ABOUT, MyFrame::OnAbout)
END_EVENT_TABLE()


После этого, насколько я понимаю, у меня пункт меню, у которого айди=ID_ABOUT, будет вызывать OnAbout. А событие от тулбара где брать? 

P.S. Мне кажется, я что-то элементарное упустил в самом начале знакомства с wxWidgets  smile 
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
t_rex
Дата 4.2.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Событие - это такая штука, которая привязывается не к самому пункту меню или кнопке на тулбаре, а к идентификатору и типу команды.
wxButton генерит wxCommandEvent с типом wxEVT_COMMAND_BUTTON_CLICKED и для обработки события от кнопки надо прописывать в EVENT_TABLE пункт EVT_BUTTON()
На форме может быть десяток кнопок с одинаковыми идентификаторами, а обработчик у них будет один на всех потому что идентификатор + тип события совпадают.

Дальше.. пункт меню и кнопка на тулбаре тоже генерят wxCommandEvent, но с друшим типом. И пункт меню и кнопка тулбара генерят тип события wxEVT_COMMAND_MENU_SELECTED поэтому если у тебя на форме есть пункт меню wxID_ABOUT  и кнопка на тулбаре с таким же идентификатором (кстати есть для эбаутбокса стандартный идентификатор, свой не надо лепить), то в EVENT_TABLE для них будет одна общая запись с типом EVT_MENU и идентификатором wxID_ABOUT.

Добавлено через 10 минут и 36 секунд
Код

/////////////////////////////////////////////////////////////////////////////
// Name:        wxTestMainFrame.cpp
// Purpose:     
// Author:      Volodymir (T-Rex) Tryapichko
// Modified by: 
// Created:     23/01/2008 19:25:24
// RCS-ID:      
// Copyright:   Volodymir (T-Rex) Tryapichko, 2008
// Licence:     
/////////////////////////////////////////////////////////////////////////////

// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"

#ifdef __BORLANDC__
#pragma hdrstop
#endif

#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif

////@begin includes
////@end includes

#include "wxTestMainFrame.h"
#include "wxTestApp.h"
#include "new.xpm"

////@begin XPM images
////@end XPM images


/*!
 * wxTestMainFrame type definition
 */

IMPLEMENT_CLASS( wxTestMainFrame, wxFrame )


/*!
 * wxTestMainFrame event table definition
 */

BEGIN_EVENT_TABLE( wxTestMainFrame, wxFrame )

////@begin wxTestMainFrame event table entries
    EVT_MENU( wxID_EXIT, wxTestMainFrame::OnExitClick )

////@end wxTestMainFrame event table entries

END_EVENT_TABLE()


/*!
 * wxTestMainFrame constructors
 */

wxTestMainFrame::wxTestMainFrame()
{
    Init();
}

wxTestMainFrame::wxTestMainFrame( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
    Init();
    Create( parent, id, caption, pos, size, style );
}


/*!
 * wxTestMainFrame creator
 */

bool wxTestMainFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
////@begin wxTestMainFrame creation
    wxFrame::Create( parent, id, caption, pos, size, style );

    CreateControls();
    Centre();
////@end wxTestMainFrame creation
    return true;
}


/*!
 * wxTestMainFrame destructor
 */

wxTestMainFrame::~wxTestMainFrame()
{
////@begin wxTestMainFrame destruction
////@end wxTestMainFrame destruction
}


/*!
 * Member initialisation
 */

void wxTestMainFrame::Init()
{
////@begin wxTestMainFrame member initialisation
////@end wxTestMainFrame member initialisation
}


/*!
 * Control creation for wxTestMainFrame
 */

void wxTestMainFrame::CreateControls()
{    
////@begin wxTestMainFrame content construction
    wxTestMainFrame* itemFrame1 = this;

    wxMenuBar* menuBar = new wxMenuBar;
    wxMenu* itemMenu3 = new wxMenu;
    itemMenu3->Append(wxID_EXIT, _("Exit\tAlt+F4"), _T(""), wxITEM_NORMAL);
    menuBar->Append(itemMenu3, _("File"));
    itemFrame1->SetMenuBar(menuBar);

    wxStatusBar* itemStatusBar5 = new wxStatusBar( itemFrame1, ID_MAIN_STATUSBAR, wxST_SIZEGRIP|wxNO_BORDER );
    itemStatusBar5->SetFieldsCount(2);
    itemFrame1->SetStatusBar(itemStatusBar5);

    wxToolBar* itemToolBar6 = CreateToolBar( wxTB_FLAT|wxTB_HORIZONTAL, ID_TOOLBAR );
    wxBitmap itemtool7Bitmap(itemFrame1->GetBitmapResource(wxT("new.xpm")));
    wxBitmap itemtool7BitmapDisabled;
    itemToolBar6->AddTool(wxID_EXIT, _T(""), itemtool7Bitmap, itemtool7BitmapDisabled, wxITEM_NORMAL, _T(""), wxEmptyString);
    itemToolBar6->Realize();
    itemFrame1->SetToolBar(itemToolBar6);

////@end wxTestMainFrame content construction
}


/*!
 * Should we show tooltips?
 */

bool wxTestMainFrame::ShowToolTips()
{
    return true;
}

/*!
 * Get bitmap resources
 */

wxBitmap wxTestMainFrame::GetBitmapResource( const wxString& name )
{
    // Bitmap retrieval
////@begin wxTestMainFrame bitmap retrieval
    wxUnusedVar(name);
    if (name == _T("new.xpm"))
    {
        wxBitmap bitmap(new_xpm);
        return bitmap;
    }
    return wxNullBitmap;
////@end wxTestMainFrame bitmap retrieval
}

/*!
 * Get icon resources
 */

wxIcon wxTestMainFrame::GetIconResource( const wxString& name )
{
    // Icon retrieval
////@begin wxTestMainFrame icon retrieval
    wxUnusedVar(name);
    return wxNullIcon;
////@end wxTestMainFrame icon retrieval
}


/*!
 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_EXIT
 */

void wxTestMainFrame::OnExitClick( wxCommandEvent& event )
{
    Close();
}


--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей
PM MAIL WWW ICQ Skype GTalk   Вверх
Static
Дата 4.2.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

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

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


 




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


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

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