wxwidgets проблема евентов в wxTreeCtrl
От: yuretskii  
Дата: 16.01.09 12:23
Оценка:
создал приложение в котором используется дерево (объект wxTreeCtrl)
имею 2 евента для нужной мне операции

EVT_TREE_ITEM_ACTIVATED(ID_GROUP_TREE, TestMainFrame::OnGroupTreeSelected)
EVT_MENU(ID_EDIT_GROUP, TestMainFrame::OnEditGroup)

вот функции


void TestMainFrame::OnEditGroup(wxCommandEvent & event)
{
    EditGroup();    
}


void TestMainFrame::OnGroupTreeSelected(wxTreeEvent & event)
{
    EditGroup();
}



а вот остальное


void TestMainFrame::EditGroup()
{

    item = m_GroupTree->GetSelection();
    
    if(item.IsOk()){
    
        MyTreeItemData * data = (MyTreeItemData *)m_GroupTree->GetItemData(item);
        int id = data->GetID();
        if(id > 0)
        {
            wxString grp_name = data->Get_name();
            wxString grp_desc = data->Get_desc();
            GroupForm * grp = new GroupForm(this);
            grp->SetGroupName(grp_name);
            if(grp_desc.size() > 0) grp->SetGroupDescription(grp_desc);
            if(grp->ShowModal() == wxID_OK)
            {
                int size_name = (grp->GetGroupName()).size();

                wxString name_to_save = grp->GetGroupName();
                wxString desc_to_save = grp->GetGroupDesc();

                if(size_name < 1 || (grp_name == name_to_save && grp_desc == desc_to_save)){
                    wxMessageBox(wxT("Пустые значения не допустимы."));
                }else{
                    db = new DB(db_filename, 0);
                                        
                    db->EditGroup(id, name_to_save, desc_to_save);

                    delete(db);

                    FillTreeGroup();
                }
            }
            grp->Destroy();
        }
    }
    
}




если метод вызывается по клику на меню — все нормально
если даблкликом на итем дерева, то по окончанию срабатывания метода выскакивает ошибка


Windows has triggered a breakpoint in Soft.exe.
This may be due to a corruption of the heap, which indicates a bug in Soft.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while Soft.exe has focus.
The output window may have more diagnostic information.

а в студии подгружается файл window.cpp с курсором в положении выхода из функции(строка 2238)


WXLRESULT wxWindowMSW::MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
    if ( m_oldWndProc )
        return ::CallWindowProc(CASTWNDPROC m_oldWndProc, GetHwnd(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam);
    else
        return ::DefWindowProc(GetHwnd(), nMsg, wParam, lParam);
}



может кто сталкивался???
wxwidgets event wxtreectrl
Re: wxwidgets проблема евентов в wxTreeCtrl
От: yuretskii  
Дата: 16.01.09 12:34
Оценка:
кстати если с клавиатуры ентером вызвать метод, то проблема тоже не возникает
Re: wxwidgets проблема евентов в wxTreeCtrl
От: Begemot_ Россия http://softvoile.com/
Дата: 18.01.09 07:19
Оценка:
Здравствуйте, yuretskii, Вы писали:

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


void MainFrame::OnTreeItemActivated(wxTreeEvent &event)
{    // именно сообщением. что бы сначала полностью обработался двойной щелчок, и только потом 
    // выполнялся код .......
    wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, ID_PASTEITEMTOTARGET);
    e.SetEventObject(this);
    GetEventHandler()->AddPendingEvent(e);
}


у тебя должно быть
ID_EDIT_GROUP в место ID_PASTEITEMTOTARGET
Блог шароварщика
Микроблог про wxWidgets
--
Блог шароварщика ::Микроблог про wxWidgets
Re[2]: wxwidgets проблема евентов в wxTreeCtrl
От: yuretskii  
Дата: 19.01.09 12:05
Оценка:
Здравствуйте, Begemot_, Вы писали:

B_>Здравствуйте, yuretskii, Вы писали:


B_>У меня несколько другая проблема (специфическая для моего приложения), но можешь попробовать подход, кажется может помочь и тебе — вместо вызова метода на прямую посылаем события выбора меню



B_>
B_>void MainFrame::OnTreeItemActivated(wxTreeEvent &event)
B_>{    // именно сообщением. что бы сначала полностью обработался двойной щелчок, и только потом 
B_>    // выполнялся код .......
B_>    wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, ID_PASTEITEMTOTARGET);
B_>    e.SetEventObject(this);
B_>    GetEventHandler()->AddPendingEvent(e);
B_>}
B_>


B_>у тебя должно быть

B_>ID_EDIT_GROUP в место ID_PASTEITEMTOTARGET


в моем случае это не помогает
Re[3]: wxwidgets проблема евентов в wxTreeCtrl
От: yuretskii  
Дата: 19.01.09 12:45
Оценка:
интересный момент, если запустить прогу в Microsoft Visual Studio — вылетит после даблклика с ошибкой, если выгрузить студию и запустить полученую прогу — ошибок не возникает...

в чем может быть проблема?
Re[4]: wxwidgets проблема евентов в wxTreeCtrl
От: Begemot_ Россия http://softvoile.com/
Дата: 19.01.09 18:05
Оценка:
Здравствуйте, yuretskii, Вы писали:

Y>интересный момент, если запустить прогу в Microsoft Visual Studio — вылетит после даблклика с ошибкой, если выгрузить студию и запустить полученую прогу — ошибок не возникает...


Y>в чем может быть проблема?


А ты случайно F12 не нажимаешь, не эмулируешь?
Блог шароварщика
Микроблог про wxWidgets
--
Блог шароварщика ::Микроблог про wxWidgets
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.