создал приложение в котором используется дерево (объект 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);
}
может кто сталкивался???
кстати если с клавиатуры ентером вызвать метод, то проблема тоже не возникает
Здравствуйте, 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
Здравствуйте, 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
в моем случае это не помогает
интересный момент, если запустить прогу в Microsoft Visual Studio — вылетит после даблклика с ошибкой, если выгрузить студию и запустить полученую прогу — ошибок не возникает...


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