| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > незаконно выделяет айтем |
| Автор: tonchitos 12.5.2008, 16:26 | ||||
| в общем дело так...есть у меня дерево CTreeCtrl на виде, наследованном от сформвью... есть у мя контекстное меню...при выборе пункта контекстного меню...выделяется с кокой-то стати узел дерева какой-то, а чаще первый... обработчик нажатия на пункт меню - пустой совсем...стала отлаживать...портится внутри где-то мфсшного кода...из моего обработчика все нормально выходит... BEGIN_MESSAGE_MAP(CreadMDLView, CFormView) ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_TREE1, &CreadMDLView::OnTvnBeginlabeleditTree1) ON_NOTIFY(TVN_ENDLABELEDIT, IDC_TREE1, &CreadMDLView::OnTvnEndlabeleditTree1) ON_NOTIFY(NM_RCLICK, IDC_TREE1, &CreadMDLView::OnNMRclickTree1) // появление меню при нажатии... ON_COMMAND(ID_BACK, &CreadMDLView::OnBackClick) ON_COMMAND(ID_NEXT, &CreadMDLView::OnNextClick) ON_COMMAND(ID_PROPERTIES, &CreadMDLView::viewProperties) // обработка выбора пункта меню.. // ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CreadMDLView::OnTvnSelchangedTree1) ON_NOTIFY(NM_DBLCLK, IDC_TREE1, &CreadMDLView::OnNMDblclkTree1) // ON_WM_SIZE() ON_WM_MOVING() END_MESSAGE_MAP()
Вот фигли при выходе из viewProperties() и путешествия по коду мфс портится выделенный айтем...в смысле другой выделяецо... |
| Автор: Earnest 12.5.2008, 16:34 |
| Во-первых, вывод контекстного меню повесь на WM_CONTEXTMENU А во-вторых, уточни: если ты закомментируешь вторую красную строчку (c voewProperties) , то все нормально работает? |
| Автор: tonchitos 12.5.2008, 16:41 |
| ну если нет обработчика, то соответственно нажатия не присходит, то соответственно все нормально |
| Автор: Earnest 12.5.2008, 16:45 |
| Какого нажатия? Где там у тебя нажатие? Имеещь в виду, что пункт меню задизэбден и нажать нельзя? Ну так поставь временно UPDATE с Enable (true) - нужно проверить... И еще... этот пункт, который выделяется, визуально совпадает со строкой меню? Добавлено через 1 минуту и 55 секунд И вызов меню все-таки перевесь... |
| Автор: tonchitos 12.5.2008, 17:02 |
| если так m_PopupMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, this); то и без обработчика доступно и все равно выделяет какой то айтем левый... Добавлено через 14 минут и 17 секунд в общем так.. сделала с вмконтекстменю... тот обработчик убрала и обработку правого клика тоже... теперь так...до клика на пункт меню портится выделение... |
| Автор: tonchitos 12.5.2008, 17:24 |
| при входе в void CreadMDLView::OnContextMenu(CWnd *pWnd, CPoint pos) все нормально а вот после этой строчки...все плехо m_PopupMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, AfxGetMainWnd()); |
| Автор: Earnest 13.5.2008, 11:12 | ||
| Странно все как-то... какая-то грязь... Попробуй поймать это изменение: сделай обработчик LVN_ITEMCHANGED (или CHANGING), поставь точку прерывания на условие изменения состояния и попробуй посмотреть по стеку, откуда ноги растут:
|
| Автор: tonchitos 13.5.2008, 14:31 |
| фууух, е мое...на самом деле после того как перевесила на ON_WM_CONTEXTMENU() все работать адеквтно стало...это просо я невнимательная... короче момент такой...если выделить левой кнопкой мыши айтем, и нажать на правую появится меню и все ок... а если выделить правой кнопкой айтем дерева,то меню то вызывается, но выделение остается на старом пункте.. вот такая новая проблемка... |
| Автор: Earnest 14.5.2008, 20:01 |
| А правая кнопка выделение по-умолчанию не меняет. Хочешь менять - обрабатывай сама. |
| Автор: tonchitos 15.5.2008, 15:43 |
| да..так и сделала...хит тестом... в мсдне пример приведе даже для такого случая... |