当点击另外一个按钮就要给树控件发送TVN_SELCHANGED消息,但树控件上没有改变当前选中的节点.
请问如何实现?
窗口的消息映射:
BEGIN_MSG_MAP(CEditAttrDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
// REFLECTED_NOTIFY_CODE_HANDLER()
// REFLECTED_NOTIFY_HANDLER(IDC_TREE, TVN_SELCHANGED, OnSelchangedTree)
NOTIFY_HANDLER(IDC_TREE, TVN_SELCHANGED, OnSelchangedTree)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
在点击Cancel按钮时需要发送TVN_SELCHANGED,我的代码:
NMTREEVIEW   vi;   
memset((void*)&vi,0,sizeof(NMTREEVIEW));   
vi.hdr.hwndFrom = m_Tree.m_hWnd;   
vi.hdr.idFrom = ::GetWindowLong(m_Tree.m_hWnd,GWL_ID);   
vi.hdr.code = TVN_SELCHANGED;   
vi.action = TVN_SELCHANGED;   
//vi.itemOld   =   hOld;   
//vi.itemNew   =   hNew;   

::SendMessage(m_Tree.m_hWnd,WM_NOTIFY,(WPARAM)vi.hdr.idFrom,(LPARAM)&vi);
但没有效果.

解决方案 »

  1.   

    TVN_SELCHANGED是树控件给父窗口发的通知消息.... 你刚好弄反...
      

  2.   

    TVN_SELCHANGED 是一个通知消息,是由树控件在自身选择项改变时给其父窗口发出的通知,你要改变树控件的当前选择项,应该给树控件发送TVM_SELECTITEM, 或者使用TreeView_Select宏
      

  3.   

    用这个TreeView_Select宏没有反映,因为没有改变选中的树节点.所以是不会触发TVN_SELCHANGED事件的.
    我的要求是在没有改变选中树节点的前提下触发TVN_SELCHANGED这个事件
      

  4.   

    Notify消息是由父窗口接收的,你应该给父窗口发送这个消息,不是给树控件
      

  5.   

    Notify消息的传递是逐渐上溯,由当前子类向父类不断查找比对的啊