有一个CTreeView类,
通过  ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)响应TVN_SELCHANGED消息。现在面临一个问题:只有在不同鼠标在ITEM之间变化时,此消息才能响应。而我想作的是:当这个view获得焦点时,自动响应此消息。
也就是,如何通过程序发出TVN_SELCHANGED消息,而不是通过鼠标点击?如何作???

解决方案 »

  1.   

    如何通过程序发出TVN_SELCHANGED消息
    ==SendMessage,直接给控件发TVN_SELCHANGED消息
      

  2.   

    我是这么作的,但出错!!!void CMyView::OnNMSetfocus(NMHDR *pNMHDR, LRESULT *pResult)
    {
    //
    SendMessage(WM_NOTIFY, TVN_SELCHANGED);  *pResult = 0;
    }
      

  3.   

    直接调OnSelchanged不就得了
      

  4.   

    》》直接调OnSelchanged不就得了
    也不行,出错!!
      

  5.   

    >> 你要自己填结构
    能详细说说吗?比较急!!
      

  6.   

    我觉得你无非是想调用OnSelChanged中的处理而已。完全可以将OnSelChanged中的处理单独封装成一个函数,然后分别在OnSelChanged和OnNMSetfocus调用就行了。
      

  7.   

    NMTREEVIEW nmtree;
    ZeroMemory(&nmtree, sizeof(NMTREEVIEW));
    int lResult = 0;
    OnSelchanged((NMHDR* )&nmtree, &lResult);
      

  8.   

    试过!但为什么当获得焦点后,OnNMSetfocus进入很多次?void CMyView::OnNMSetfocus(NMHDR *pNMHDR, LRESULT *pResult)
    {
    NMTREEVIEW nmtree;
    ZeroMemory(&nmtree, sizeof(NMTREEVIEW));
    LRESULT lResult = 0;
    OnSelchanged((NMHDR* )&nmtree, &lResult); *pResult = 0;
    }