我想通过左击树状控件,获得它的节点. 我试了如下代码,还是不行,很是郁闷,望有高人指点一二.void CDeviceMapView::OnNMClickTreeDevice(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
CPoint myPoint;
DWORD count = 0;
GetCursorPos(&myPoint);
ScreenToClient(&myPoint);
UINT uFlags;
HTREEITEM hItem = m_device.HitTest(myPoint, &uFlags); if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
 m_device.Select(hItem, TVGN_CARET);
}
*pResult = 0;
}hItem 总是0x00000000,但我确实点中了节点

解决方案 »

  1.   

    ScreenToClient修改为:
    m_device.ScreenToClient
      

  2.   

    CPoint myPoint; GetCursorPos(&myPoint);
    m_treeDevList.ScreenToClient(&myPoint); UINT uFlags;
    HTREEITEM hItem = m_treeDevList.HitTest(myPoint, &uFlags);
      

  3.   

    或者
    DWORD dwPos = GetMessagePos();
    CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); m_treeDevList.ScreenToClient(&point); 

             UINT uFlags;
    HTREEITEM hItem = m_treeDevList.HitTest(myPoint, &uFlags);
      

  4.   

    void CMyTreeCtrl::OnContextMenu(CWnd* pWnd, CPoint ptMousePos) 
    {
    // if Shift-F10
    if (ptMousePos.x == -1 && ptMousePos.y == -1)
    ptMousePos = (CPoint) GetMessagePos(); ScreenToClient(&ptMousePos); UINT uFlags;
    HTREEITEM htItem;

    htItem = HitTest( ptMousePos, &uFlags ); if( htItem == NULL )
    return;

    m_hActiveItem = htItem; CMenu menu;
    CMenu* pPopup; // the font popup is stored in a resource
    menu.LoadMenu(IDR_TREEITEM_CONTEXTMENU);
    pPopup = menu.GetSubMenu(0);
    ClientToScreen(&ptMousePos);
    pPopup->TrackPopupMenu( TPM_LEFTALIGN, ptMousePos.x, ptMousePos.y, this );
    }
      

  5.   

    Example// The pointer to my tree control.
    extern CTreeCtrl* pmyTreeCtrl;
    // The point to test.
    extern CPoint myPoint;// Select the item that is at the point myPoint.
    UINT uFlags;
    HTREEITEM hItem = pmyTreeCtrl->HitTest(myPoint, &uFlags);if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
    {
       pmyTreeCtrl->Select(hItem, TVGN_CARET);
    }以上是msdn中的例子
    你的m_device是树控件吗?
    调试中检测一下是否有值呢?