首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

折分窗口中动态创造CTreeCtrl不能拖曳?需要特别熟悉控件消息机制的人回答

2012-09-10 
折分窗口中动态创建CTreeCtrl不能拖曳?需要特别熟悉控件消息机制的人回答。在SDI工程,左边创建了一个Dialog

折分窗口中动态创建CTreeCtrl不能拖曳?需要特别熟悉控件消息机制的人回答。
在SDI工程,左边创建了一个DialogBar,里面放了一个CTreeCtrl控件,再在这个CtreeCtrl(父窗口)上动态创建一个派生子CTreeCtrl控件(子窗口),这个子CTreeCtrl控件无法实现拖曳,lbuttondown,lbuttonup,onmousemove都可以响应,唯独TVN_BEGINDRAG响应不了,而我新建一个基于对话框的工程,动态创建CtreeCTrl是可以实现的(直接在对话框上创建,而不是以另一个CtreeCtrl为父窗口创建)。 什么去掉CtreeCtrl的TVS_DISABLEDRAG之类的就不要说了,没那简单。

[解决办法]
我不清楚你怎么写的,我测试一下是可以的~
我测试代码大致如下:

C/C++ code
CDialogBar派生类中定义一个InitDialogBar函数,在该函数中创建子CNewTreeCtrl(派生自CTreeCtrl控件)控件,然后在调用CNewTreeCtrl::InitChildTree()函数,CNewTreeCtrl::InitChildTree()函数中创建子控件的子控件void CNewDialogBar::InitDialogBar(){ // 在dialogbar控件中创建子树控件    ASSERT(GetSafeHwnd());    if(NULL  == m_tree.GetSafeHwnd()) // m_tree变量为CNewTreeCtrl类型    {        CRect rect;        rect.SetRect(10, 10, 300, 200);        m_tree.Create(WS_VISIBLE | WS_CHILD, rect, this, 0x11);        m_tree.InitChildTree();    }    m_tree.InsertItem(_T("AAA"));    m_tree.InsertItem(_T("BBB"));}void CNewTreeCtrl::InitChildTree(){// 在父树控件中创建它自己的子树控件    ASSERT(GetSafeHwnd());    if(NULL == m_tree.GetSafeHwnd()) // m_tree定义为CTreeCtrl类型对象,定义为CNewTreeCtrl类的成员变量    {        CRect rect;        GetClientRect(&rect);        rect.DeflateRect(CSize(10, 10));        m_tree.Create(WS_VISIBLE | WS_BORDER | WS_CHILD | TVS_FULLROWSELECT, rect, this, 0x111);        m_tree.InsertItem(_T("DDDD"));        m_tree.InsertItem(_T("EEEE"));    }}// 这个是CNewTreeCtrl类的WM_NOTIFY消息响应函数,处理它子树的WM_BEGINDRAG消息BOOL CNewTreeCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) {    // TODO: Add your specialized code here and/or call the base class    NMHDR* pHdr = (NMHDR*)lParam;    ASSERT(NULL != pHdr);    if(0x111 == wParam)    {        if((TVN_BEGINDRAGA == pHdr->code) || (TVN_BEGINDRAGW == pHdr->code))            AfxMessageBox(_T("DRAG"));    }    return CTreeCtrl::OnNotify(wParam, lParam, pResult);} 

热点排行