我用以下语句在主窗口中放置了一个树控件。 请教如何捕获到该控件的消息,
例如:我在该控件上点击鼠标左键,怎样能弹出一个消息框。       /* 初始 -- 树 */
hWndTree = CreateWindow(WC_TREEVIEW, "aaa", WS_VISIBLE|WS_CHILD|WS_BORDER|TVS_HASLINES|TVS_HASBUTTONS|WS_DLG         FRAME, 0,0,rect.right/4,rect.bottom, hWnd, NULL, hInst, NULL);

解决方案 »

  1.   

    建议用向导加一个 CTreeCtrl 的成员变量
    然后写一个NM_RCLICK 的通知响应函数
    步骤如下:
    1.在对话框模板中拖放一个“Tree Control”控件
    2.删除CreateWindow 一句,在类向导的“Member Variables”页面,选中IDC_TREE1(如你未将其改名),单击“Add Variable...”命令,输入变量名
    m_treeTree1HandleKeeper
    3.在你的类的头文件中加
    afx_msg void NotifyRClickTree1(NMHDR* pNotifyStruct, LRESULT* result);
    4.在你的类的CPP 文件中,END_MESSAGE_MAP() 前插入:
      ON_NOTIFY (NM_RCLICK, IDC_TREE1, NotifyRClickTree1)
    5.
    void CMyDlg::NotifyRClickTree1(NMHDR* pNotifyStruct, LRESULT* result)
    {
      if (result)  *result = 0;
      
      CMenu             menuLoader, *pPopup;
      menuLoader.LoadMenu (IDR_POPUP_TREE1);
      pPopup = menuLoader.GetSubMenu (0); // the Popup. 
      if (NULL  ==  pPopup)
        return ;
      CPoint ptPopup; GetCursorPos (&ptPopup);
      pPopup->TrackPopupMenu (TPM_LEFTALIGN, ptPopup.x, ptPopup.y, this);
      return ;
    }
    6.该没问题了吧!
      

  2.   

    这要子分类消息,用自己定义的窗体过程代替原来系统注册的窗体过程,用SetWindowLong()可以,用SubClassWindow()也可以吧!你去查查MSDN,或者看看window program,都会有的!这个问题很常见的!