奇怪问题,请帮我看看 我从CTreeCtrl类派生出CMytree,由这个派生类创建的对象在CDialog中一切正常,把CDialog改为CDialogBar之后,为什么接收不到TVN_ENDLABELEDIT消息?奇怪的是,从网上下载的例子,代码和我的基本一致,也是在CDialogBar上建的Tree,但这个例子确可以正常响应TVN_ENDLABELEDIT 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网上下载的例子(其中CTree是我加的)://///////////////////////////////////////////////////////////////////////////// CIEBar dialogCIEBar::CIEBar(CWnd* pParent /*=NULL*/) : CDialogBar(){ }void CIEBar::DoDataExchange(CDataExchange* pDX){ CDialogBar::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIEBar) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CIEBar, CDialogBar) //{{AFX_MSG_MAP(CIEBar) //}}AFX_MSG_MAPEND_MESSAGE_MAP()BOOL CIEBar::InitIEBar(){ // create the tree control pTreeCtrl = new CTree();//CTreeCtrl(); ASSERT(pTreeCtrl); if(!pTreeCtrl->Create(WS_CHILD | WS_VISIBLE | TVS_EDITLABELS , CRect(0,0,0,0), this, 101)) { TRACE0("Failed to create tree control!"); return FALSE; } // create the tool tip if(!m_TipCtrl.Create(this)) return FALSE; return TRUE;}BOOL CIEBar::PreTranslateMessage(MSG* pMsg) { //m_TipCtrl.RelayEvent(pMsg); return CWnd::PreTranslateMessage(pMsg);}CTreeCtrl* CIEBar::GetTreeCtrl(){ if(pTreeCtrl) return pTreeCtrl; else return NULL;}/////////////////////////////////////////////////////////////////////////////// CTreeCTree::CTree(){}CTree::~CTree(){}BEGIN_MESSAGE_MAP(CTree, CTreeCtrl) //{{AFX_MSG_MAP(CTree) ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndlabeledit) //}}AFX_MSG_MAPEND_MESSAGE_MAP()void CTree::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) { TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR; if(pTVDispInfo->item.pszText!=0) { SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText); *pResult = TRUE; } else *pResult = FALSE;}///////////////////////////////////////////////////////////CMainFrameint CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); if(!m_IEBar.Create(this, IDD_IEBAR, CBRS_LEFT, 100) || !m_IEBar.InitIEBar()) return -1; CTreeCtrl* pTreeCtrl = m_IEBar.GetTreeCtrl(); ASSERT(pTreeCtrl); // modify tree styles pTreeCtrl->ModifyStyle(NULL, TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS); HTREEITEM t_hRoot = pTreeCtrl->InsertItem("root"); for(int i=0; i<40; i++) { CString t_ItemStr; t_ItemStr.Format("node %d", i+1); pTreeCtrl->InsertItem(t_ItemStr, t_hRoot); } m_IEBar.EnableDocking(CBRS_ORIENT_HORZ); DockControlBar(&m_IEBar); return 0;}我自己的://///////////////////////////////////////////////////////////////////////////// CTreeDlg dialogCTreeDlg::CTreeDlg(CWnd* pParent /*=NULL*/) : CDialogBar(){ //{{AFX_DATA_INIT(CTreeDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT}void CTreeDlg::DoDataExchange(CDataExchange* pDX){ CDialogBar::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTreeDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CTreeDlg, CDialogBar) //{{AFX_MSG_MAP(CTreeDlg) ON_WM_CREATE() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CTreeDlg message handlersint CTreeDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialogBar::OnCreate(lpCreateStruct) == -1) return -1; m_tree=new CMyTree(); m_tree->Create(WS_CHILD | WS_VISIBLE | TVS_EDITLABELS,CRect(0,0,200,400),this,101); m_tree->InsertItem("AAAAA"); return 0;}BOOL CTreeDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class return CWnd::PreTranslateMessage(pMsg);}/////////////////////////////////////////////////////////////////////////////// CMyTreeCMyTree::CMyTree(){}CMyTree::~CMyTree(){}BEGIN_MESSAGE_MAP(CMyTree, CTreeCtrl) //{{AFX_MSG_MAP(CMyTree) ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndlabeledit) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyTree message handlersvoid CMyTree::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) { TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR; // TODO: Add your control notification handler code here if(pTVDispInfo->item.pszText!=0) { this->SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText); *pResult = TRUE; } else *pResult = FALSE;}/////////////////////////////////////////////////////////////////////CMainFrameint CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); if(!m_treedlg.Create(this, IDD_TREEDLG, CBRS_LEFT, 100)) return -1; CTreeCtrl *pTreeCtrl=m_treedlg.m_tree; pTreeCtrl->ModifyStyle(NULL, TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS); HTREEITEM t_hRoot = pTreeCtrl->InsertItem("root"); for(int i=0; i<40; i++) { CString t_ItemStr; t_ItemStr.Format("node %d", i+1); pTreeCtrl->InsertItem(t_ItemStr, t_hRoot); } m_treedlg.EnableDocking(CBRS_ORIENT_HORZ); DockControlBar(&m_treedlg); //m_treedlg.EnableDocking(CBRS_ALIGN_LEFT); //DockControlBar(&m_treedlg); return 0;} 想学网络编程,求前辈给意见 程序错误还是其他问题?帮忙看一下!(源码已经给出)问题解决马上结帖…… 如何卸载指定的USB设备,已知idVendor,idProduct,有没有专用的API 如何获取视图的指针 让程序一秒中处理一条SQL语句用Sleep(1000)感觉程序忙,有没有更好的办法,请指导! 请教各位VC大侠关于VC操作WORD的问题 请问如何得到修改注册表的程序的名字? debug版运行正常,为啥release运行不正常? 十万火急!CMSCOMM的create()问题,请大侠救急! 如何用程序切换输入法? windwos中一个文件能有多大? 对话框的调用(急,在线等待)
/////////////////////////////////////////////////////////////////////////////
// CIEBar dialogCIEBar::CIEBar(CWnd* pParent /*=NULL*/)
: CDialogBar()
{
}void CIEBar::DoDataExchange(CDataExchange* pDX)
{
CDialogBar::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIEBar)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIEBar, CDialogBar)
//{{AFX_MSG_MAP(CIEBar) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CIEBar::InitIEBar()
{
// create the tree control
pTreeCtrl = new CTree();//CTreeCtrl();
ASSERT(pTreeCtrl);
if(!pTreeCtrl->Create(WS_CHILD | WS_VISIBLE | TVS_EDITLABELS , CRect(0,0,0,0), this, 101))
{
TRACE0("Failed to create tree control!");
return FALSE;
} // create the tool tip
if(!m_TipCtrl.Create(this))
return FALSE;
return TRUE;
}BOOL CIEBar::PreTranslateMessage(MSG* pMsg)
{
//m_TipCtrl.RelayEvent(pMsg);
return CWnd::PreTranslateMessage(pMsg);
}CTreeCtrl* CIEBar::GetTreeCtrl()
{
if(pTreeCtrl)
return pTreeCtrl;
else
return NULL;
}/////////////////////////////////////////////////////////////////////////////
// CTreeCTree::CTree()
{
}CTree::~CTree()
{
}
BEGIN_MESSAGE_MAP(CTree, CTreeCtrl)
//{{AFX_MSG_MAP(CTree)
ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndlabeledit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void CTree::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
if(pTVDispInfo->item.pszText!=0)
{
SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText);
*pResult = TRUE;
}
else
*pResult = FALSE;}/////////////////////////////////////////////////////////
//CMainFrameint CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
} // TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar); if(!m_IEBar.Create(this, IDD_IEBAR, CBRS_LEFT, 100) || !m_IEBar.InitIEBar())
return -1;
CTreeCtrl* pTreeCtrl = m_IEBar.GetTreeCtrl();
ASSERT(pTreeCtrl);
// modify tree styles
pTreeCtrl->ModifyStyle(NULL,
TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);
HTREEITEM t_hRoot = pTreeCtrl->InsertItem("root");
for(int i=0; i<40; i++)
{
CString t_ItemStr;
t_ItemStr.Format("node %d", i+1);
pTreeCtrl->InsertItem(t_ItemStr, t_hRoot);
} m_IEBar.EnableDocking(CBRS_ORIENT_HORZ);
DockControlBar(&m_IEBar);
return 0;
}我自己的:
/////////////////////////////////////////////////////////////////////////////
// CTreeDlg dialog
CTreeDlg::CTreeDlg(CWnd* pParent /*=NULL*/)
: CDialogBar()
{
//{{AFX_DATA_INIT(CTreeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CTreeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogBar::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTreeDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTreeDlg, CDialogBar)
//{{AFX_MSG_MAP(CTreeDlg)
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CTreeDlg message handlersint CTreeDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogBar::OnCreate(lpCreateStruct) == -1)
return -1;
m_tree=new CMyTree();
m_tree->Create(WS_CHILD | WS_VISIBLE | TVS_EDITLABELS,CRect(0,0,200,400),this,101); m_tree->InsertItem("AAAAA");
return 0;
}BOOL CTreeDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
return CWnd::PreTranslateMessage(pMsg);
}
/////////////////////////////////////////////////////////////////////////////
// CMyTreeCMyTree::CMyTree()
{
}CMyTree::~CMyTree()
{
}
BEGIN_MESSAGE_MAP(CMyTree, CTreeCtrl)
//{{AFX_MSG_MAP(CMyTree)
ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndlabeledit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CMyTree message handlersvoid CMyTree::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
if(pTVDispInfo->item.pszText!=0)
{
this->SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText);
*pResult = TRUE;
}
else
*pResult = FALSE;
}
///////////////////////////////////////////////////////////////////
//CMainFrame
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
} // TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar); if(!m_treedlg.Create(this, IDD_TREEDLG, CBRS_LEFT, 100))
return -1;
CTreeCtrl *pTreeCtrl=m_treedlg.m_tree;
pTreeCtrl->ModifyStyle(NULL,
TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);
HTREEITEM t_hRoot = pTreeCtrl->InsertItem("root");
for(int i=0; i<40; i++)
{
CString t_ItemStr;
t_ItemStr.Format("node %d", i+1);
pTreeCtrl->InsertItem(t_ItemStr, t_hRoot);
} m_treedlg.EnableDocking(CBRS_ORIENT_HORZ);
DockControlBar(&m_treedlg);
//m_treedlg.EnableDocking(CBRS_ALIGN_LEFT);
//DockControlBar(&m_treedlg); return 0;
}