本人遇到一个小问题,希望大侠们给个解决方法,非常感谢我想实现对“树”的一个节点选择,然后弹出相应对话框的功能。
我发现当我选择一个节点后,该节点得到焦点,窗口可以弹出;但是当我关掉弹出窗口,再一次选择该节点后,就没有反应!我的初衷是当我再次选择该节点的时候应该再一次弹出对应窗口,不知道有什么解决办法么?在线等待中!附上代码:void CUSBoperateDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM hItem=pNMTreeView->itemNew.hItem;
if(hItem == NULL)
return;
CString strItemText=m_tree.GetItemText(hItem); if(strItemText.CompareNoCase(_T("本机配置"))==0)
{
CLocalSet lsdlg;
lsdlg.DoModal();
return;
}
*pResult = 0;
}
我发现当我选择一个节点后,该节点得到焦点,窗口可以弹出;但是当我关掉弹出窗口,再一次选择该节点后,就没有反应!我的初衷是当我再次选择该节点的时候应该再一次弹出对应窗口,不知道有什么解决办法么?在线等待中!附上代码:void CUSBoperateDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM hItem=pNMTreeView->itemNew.hItem;
if(hItem == NULL)
return;
CString strItemText=m_tree.GetItemText(hItem); if(strItemText.CompareNoCase(_T("本机配置"))==0)
{
CLocalSet lsdlg;
lsdlg.DoModal();
return;
}
*pResult = 0;
}
void CAboutDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
CRect rc;
m_Tree1.GetWindowRect(rc);
ScreenToClient(rc);
pt.x -= rc.left;
pt.y -= rc.top;
HTREEITEM hItem = m_Tree1.HitTest(pt);
CString sInfo = m_Tree1.GetItemText(hItem);
AfxMessageBox(sInfo);
*pResult = 0;
}
当然,可以优化。
void CUSBoperateDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
CRect rc;
m_tree.GetWindowRect(rc);
ScreenToClient(rc);
pt.x -= rc.left;
pt.y -= rc.top; HTREEITEM hItem=pNMTreeView->itemNew.hItem;
if(hItem == NULL)
return;
CString strItemText=m_tree.GetItemText(hItem);
AfxMessageBox(strItemText);
*pResult = 0;
}我去吃饭了,呵呵,多谢你的关注!
你怎么还用HTREEITEM hItem=pNMTreeView->itemNew.hItem;不是见鬼了么。
void CReadXmlDlg::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CFileFind filefd;
HTREEITEM parent;
HTREEITEM item = m_Tree.GetSelectedItem();
if(m_Tree.GetChildItem(item))return;
parent = item;
CString rootstr = m_Tree.GetItemText(item);
CString temp;
CString tempPath;
CString lstr;
CString XmlPath;
if(rootstr.Find("\\") == 2)
{
lstr.Format("%s*.*",rootstr);
}
else
{
CString strparent;
while(1)
{
parent = m_Tree.GetParentItem(parent);
strparent = m_Tree.GetItemText(parent);
if(strparent.Find("\\") == 2)
goto end;
temp += strparent;
tempPath=strparent+tempPath; temp += "\\";
tempPath ="\\"+tempPath;
}
end:
CString root = m_Tree.GetItemText(parent);
//MessageBox("root:"+root+"tempPath:"+tempPath+"rootstr:"+rootstr);
lstr.Format("%s%s%s\\*.*",root,temp,rootstr);
XmlPath.Format("%s%s\\%s",root,tempPath,rootstr);
//MessageBox("root:"+root+"tmp:"+temp+"rootstr:"+rootstr);
}
BOOL bfinded = filefd.FindFile(lstr);
while(bfinded)
{
bfinded = filefd.FindNextFile();
CString filepath;
//if(filefd.IsDirectory()&&!filefd.IsDots())
if(!filefd.IsDots())
{
SHGetFileInfo(filefd.GetFilePath(),0,&fileinfo,sizeof(fileinfo),
SHGFI_ICON);
imindex = m_ImageList.Add(fileinfo.hIcon);
m_Tree.InsertItem(filefd.GetFileName(),imindex,imindex,item);
}
}
//XmlPath=XmlPath+"\\";
m_EditXMLpath.SetWindowText(XmlPath);
*pResult = 0;
}
XmlPath.Format("%s%s\\%s",root,tempPath,rootstr);
就是获取当前XML文件的完全路径,实际上什么文件都一样获取完全路径,只是我把它用于XML读写,才命名为XmlPath.