Возникла необходимость создать дерево не в шаблоне диалога, а непосредственно в коде программы. Как положено, вызываю Create, создаю дерево и все вроде работает кроме:
1. Не приходит сообщение TVN_SELCHANGED. Причем, что интересно, NM_CLICK приходит.
2. (менее важно) Как я не устанавливал стиль WS_BORDER появилась только скучная черная рамка, а не рельефная, как хотелось бы.
Кто знает как с этим справиться?
Здравствуйте CooLer, Вы писали:
CL>Возникла необходимость создать дерево не в шаблоне диалога, а непосредственно в коде программы. Как положено, вызываю Create, создаю дерево и все вроде работает кроме:
CL>1. Не приходит сообщение TVN_SELCHANGED. Причем, что интересно, NM_CLICK приходит.
Проверить еще раз message map entry для TVN_SELCHANGED.
CL>2. (менее важно) Как я не устанавливал стиль WS_BORDER появилась только скучная черная рамка, а не рельефная, как хотелось бы.
Надо поставить расширенный стиль WS_EX_CLIENTEDGE, а WS_BORDER устанавливать не надо.
Здравствуйте CooLer, Вы писали:
CL>Возникла необходимость создать дерево не в шаблоне диалога, а непосредственно в коде программы. Как положено, вызываю Create, создаю дерево и все вроде работает кроме: CL>1. Не приходит сообщение TVN_SELCHANGED. Причем, что интересно, NM_CLICK приходит. CL>2. (менее важно) Как я не устанавливал стиль WS_BORDER появилась только скучная черная рамка, а не рельефная, как хотелось бы. CL>Кто знает как с этим справиться?
Я бы помотрел в RC-файле описание ентого элемента в диалоге (точнее флаги), а затем их бы и использовал в при создании элемента вручную. Естессно после удаления из шаблона диалога элемента.
Здравствуйте CooLer, Вы писали:
CL>Возникла необходимость создать дерево не в шаблоне диалога, а непосредственно в коде программы. Как положено, вызываю Create, создаю дерево и все вроде работает кроме: CL>1. Не приходит сообщение TVN_SELCHANGED. Причем, что интересно, NM_CLICK приходит. CL>2. (менее важно) Как я не устанавливал стиль WS_BORDER появилась только скучная черная рамка, а не рельефная, как хотелось бы. CL>Кто знает как с этим справиться?
ON_NOTIFY(TVN_SELCHANGED, ID_TREE, OnSelchangedTree)
И все работает.
Re[2]: CTreeCtrl
От:
Аноним
Дата:
13.04.02 08:15
Оценка:
Здравствуйте Vicont, Вы писали:
V>Здравствуйте CooLer, Вы писали:
CL>>Возникла необходимость создать дерево не в шаблоне диалога, а непосредственно в коде программы. Как положено, вызываю Create, создаю дерево и все вроде работает кроме: CL>>1. Не приходит сообщение TVN_SELCHANGED. Причем, что интересно, NM_CLICK приходит. CL>>2. (менее важно) Как я не устанавливал стиль WS_BORDER появилась только скучная черная рамка, а не рельефная, как хотелось бы. CL>>Кто знает как с этим справиться?
V>ON_NOTIFY(TVN_SELCHANGED, ID_TREE, OnSelchangedTree) V>И все работает.
Вы будете смеяться, но я именно так и пишу! Но оно не работает!!! (Может руки кривые?) Однако ON_NOTIFY(NM_CLICK, ID_TREE, OnSelchangedTree) работает
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте CooLer, Вы писали:
CL>>Возникла необходимость создать дерево не в шаблоне диалога, а непосредственно в коде программы. Как положено, вызываю Create, создаю дерево и все вроде работает кроме:
CL>>1. Не приходит сообщение TVN_SELCHANGED. Причем, что интересно, NM_CLICK приходит.
AF>Проверить еще раз message map entry для TVN_SELCHANGED.
Одну из строчек я закоментариваю. Если первую — все работает. А если убарть вторую — не фурычит!
CL>>2. (менее важно) Как я не устанавливал стиль WS_BORDER появилась только скучная черная рамка, а не рельефная, как хотелось бы.
AF>Надо поставить расширенный стиль WS_EX_CLIENTEDGE, а WS_BORDER устанавливать не надо.
А как установить расширеный стиль? Пробовал так:
LONG oes = ::GetWindowLong(m_GroupTree.m_hWnd,GWL_EXSTYLE);
::SetWindowLong(m_GroupTree.m_hWnd,GWL_EXSTYLE,oes | WS_EX_CLIENTEDGE);
Не помогает. Рамка пропадает совсем. Даже та, которая была :-(
Здравствуйте CooLer, Вы писали:
CL>LONG oes = ::GetWindowLong(m_GroupTree.m_hWnd,GWL_EXSTYLE); CL>::SetWindowLong(m_GroupTree.m_hWnd,GWL_EXSTYLE,oes | WS_EX_CLIENTEDGE);
CL>Не помогает. Рамка пропадает совсем. Даже та, которая была
А ты в Create этот стиль пропиши, после обычных стилей. И Border выкинь.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте Vicont, Вы писали:
V>>Здравствуйте CooLer, Вы писали:
CL>>>Возникла необходимость создать дерево не в шаблоне диалога, а непосредственно в коде программы. Как положено, вызываю Create, создаю дерево и все вроде работает кроме: CL>>>1. Не приходит сообщение TVN_SELCHANGED. Причем, что интересно, NM_CLICK приходит. CL>>>2. (менее важно) Как я не устанавливал стиль WS_BORDER появилась только скучная черная рамка, а не рельефная, как хотелось бы. CL>>>Кто знает как с этим справиться?
V>>ON_NOTIFY(TVN_SELCHANGED, ID_TREE, OnSelchangedTree) V>>И все работает.
А>Вы будете смеяться, но я именно так и пишу! Но оно не работает!!! (Может руки кривые?) Однако ON_NOTIFY(NM_CLICK, ID_TREE, OnSelchangedTree) работает
Я тоже долго над этим бился...
Но потом полез в COMMCTRL.H...
И поставил в ON_NOTIFY() не TVN_SELCHANGED, а TVN_SELCHANGEDW и все заработало... Для меня это пока загадка — почему посылается мессага для UNICODE...