⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xhtmltreetestdlg.cpp

📁 读取XML信息
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				while (*cp && isdigit(*cp))
					cp++;
			}

			if (*cp == _T('~'))
			{
				cp++;
				strNote = cp;
				TRACE(_T("strNote=<%s>\n"), strNote);
			}
		}

		// line not empty - add item
		TVINSERTSTRUCT tvis      = { 0 };
		tvis.item.mask           = TVIF_TEXT;
		tvis.item.pszText        = &szLine[index];
		tvis.item.cchTextMax     = (int)_tcslen(&szLine[index]);
		tvis.hParent             = hParent[nLevel];
		tvis.item.iImage         = TV_NOIMAGE;
		tvis.item.iSelectedImage = TV_NOIMAGE;
		tvis.item.mask          |= TVIF_IMAGE | TVIF_SELECTEDIMAGE;
		tvis.item.mask          |= TVIF_PARAM;
		tvis.item.lParam         = nItem++;

		if (nLevel == 0)
		{
			// set image for level 0 items
			ASSERT(nImage < 9);
			tvis.item.iImage = tvis.item.iSelectedImage = nImage;
			nImage++;
		}

		HTREEITEM hItem = m_Tree.InsertItem(&tvis, &xhtd);
		ASSERT(hItem);

		//hItems[m_nCount] = hItem;

		if (!strNote.IsEmpty())
			m_Tree.SetItemNote(hItem, strNote, nNoteWidth);

		m_nCount++;

		//if (m_nCount > 2)
		//	break;

		if (nLevel < 4)
		{
			hParent[nLevel+1] = hItem;
		}

		if (nLevel == 0)
			nLevel++;
	}
	//m_Tree.SetCheck(hItems[m_nCount-2], TRUE);
	//m_Tree.SetCheck(hItems[m_nCount-1], TRUE);
	//m_Tree.SetCheck(hItems[m_nCount-1], FALSE);
	//m_Tree.SetReadOnly(TRUE);

	rtf.Close();
}

//=============================================================================
void CXHtmlTreeTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
//=============================================================================
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

//=============================================================================
void CXHtmlTreeTestDlg::OnPaint() 
//=============================================================================
{
	CPaintDC dc(this); // device context for painting
	if (IsIconic())
	{

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();

		// paint CXBreadCrumbBar objects
		m_BreadCrumbBar.Draw(m_hWnd, FALSE);
	}
}

//=============================================================================
HCURSOR CXHtmlTreeTestDlg::OnQueryDragIcon()
//=============================================================================
{
	return (HCURSOR) m_hIcon;
}

//=============================================================================
void CXHtmlTreeTestDlg::SetBreadCrumbBar(HTREEITEM hItem)
//=============================================================================
{
	TRACE(_T("in CXHtmlTreeTestDlg::SetBreadCrumbBar\n"));

	// display item breadcrumb trail
	const TCHAR sepchar = _T('~');
	CStringArray sa;
	CPtrArray pa;

	if (hItem == NULL)
		hItem = m_Tree.GetSelectedItem();

	m_Tree.GetItemPath(hItem, sa, pa);

	CString strPath = _T("");
	int i = 0;
	int n = sa.GetSize();
	CString s = _T("");

	// accumulate breadcrumbs, separate with '~'
	for (i = 0; i < n; i++)
	{
		if (!strPath.IsEmpty())
			strPath += sepchar;
		s.Format(_T("<a href=\"app:WM_APP_COMMAND_SEL%d\">"), i);
		// last breadcrumb is inactive
		if (i < (n-1))
			strPath += s;
		s = sa[i];
		if (s.IsEmpty())
			s = _T(' ');	// ensure breadcrumb element is not empty
		int index = s.Find(_T('('));
		// remove parenthetical remarks to shorten string
		if (index >= 0)
			s = s.Left(index);
		if (s.IsEmpty())
			s = _T(' ');	// ensure breadcrumb element is not empty
		strPath += s;
		if (i < (n-1))
			strPath += _T("</a>");
	}
	TRACE(_T("strPath=<%s>\n"), strPath);

	APP_COMMAND *AppCommands = new APP_COMMAND [pa.GetSize()];

	int ncmd = 0;
	for (ncmd = 0; ncmd < pa.GetSize(); ncmd++)
	{
		AppCommands[ncmd].hWnd       = m_hWnd;
		AppCommands[ncmd].uMessage   = WM_APP_COMMAND_SEL;
		AppCommands[ncmd].wParam     = (WPARAM)pa[ncmd];
		s.Format(_T("WM_APP_COMMAND_SEL%d"), ncmd);
		AppCommands[ncmd].pszCommand = _tcszdup(s);
	}

	CRect rect;
	m_BreadCrumb.GetWindowRect(&rect);
	ScreenToClient(&rect);

	CXBreadCrumbBar::XHTMLDRAWSTRUCT ds;
	LOGFONT lf;
	memset(&lf, 0, sizeof(LOGFONT));
	CFont *pFont = GetFont();	// get font for the dialog
	if (pFont)
		pFont->GetLogFont(&lf);
	ds.bBold = TRUE;
	ds.bLogFont = TRUE;
	memcpy(&ds.lf, &lf, sizeof(LOGFONT));

	ds.crBackground = GetSysColor(COLOR_BTNFACE);
	ds.rect = rect;

	m_BreadCrumbBar.SetCrumbs(strPath, sepchar)
				   .SetSeparator(_T(" > "))
				   .SetAppCommands(AppCommands, ncmd)
				   .InitDrawStruct(&ds, FALSE);

	m_BreadCrumbBar.Draw(m_hWnd, FALSE);

	for (ncmd = 0; ncmd < pa.GetSize(); ncmd++)
	{
		if (AppCommands[ncmd].pszCommand)
			delete [] AppCommands[ncmd].pszCommand;
	}
	delete [] AppCommands;
}

//=============================================================================
// OnSelchangedTree1
//
// This function shows how to handle TVN_SELCHANGED messages from XHtmlTree.
//
void CXHtmlTreeTestDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
//=============================================================================
{
	NMTREEVIEW* pNMTreeView = (NMTREEVIEW*)pNMHDR;
	
	HTREEITEM hItem = pNMTreeView->itemNew.hItem;

	CString strItem = m_Tree.GetItemText(hItem);
	TRACE(_T("in CXHtmlTreeTestDlg::OnSelchangedTree1:  <%s>\n"), strItem);

	GetDlgItem(IDC_UPDATE)->EnableWindow(FALSE);
	m_Edit.EnableWindow(TRUE);
	m_Edit.SetWindowText(strItem);

	if (hItem)
	{
		if (m_bLog)
			m_List.Printf(CXListBox::Blue, CXListBox::White, 0, 
				_T("%04d  selection changed to '%s'"), m_nLineNo++, strItem);

		DumpInfo(hItem);

		SetBreadCrumbBar(hItem);
	}

	*pResult = 0;
}

//=============================================================================
// OnRclickTree1
//
// This function shows how to handle NM_RCLICK messages
//
void CXHtmlTreeTestDlg::OnRclickTree1(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
//=============================================================================
{
	TRACE(_T("in CXHtmlTreeTestDlg::OnRclickTree1\n"));

	// get the mouse position from this message
	const MSG* pMessage = GetCurrentMessage();
	ASSERT(pMessage);

	if (pMessage)
	{
		CPoint point = pMessage->pt;	// get the point from the message
		LogRightClick(_T("NM_RCLICK"), point);
	}

	*pResult = 0;
}

//=============================================================================
// OnContextMenu
//
// This function shows how to handle WM_CONTEXTMENU messages
//
void CXHtmlTreeTestDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
//=============================================================================
{
	TRACE(_T("in CXHtmlTreeTestDlg::OnContextMenu\n"));

	if (pWnd->m_hWnd == m_Tree.m_hWnd)
		LogRightClick(_T("WM_CONTEXTMENU"), point);
}

//=============================================================================
void CXHtmlTreeTestDlg::LogRightClick(LPCTSTR lpszMsg, CPoint point) 
//=============================================================================
{
	CPoint pt = point;
	m_Tree.ScreenToClient(&pt);
	UINT flags = 0;
	HTREEITEM hItem = m_Tree.HitTest(pt, &flags);

	// check if mouse clicked anywhere on item 
	if (hItem && (flags & (TVHT_ONITEM | TVHT_ONITEMBUTTON | TVHT_ONITEMRIGHT | TVHT_ONITEMINDENT)))
	{
		if (m_bLog)
			m_List.Printf(CXListBox::Blue, CXListBox::White, 0, 
				_T("%04d  right click (%s) on item 0x%X - '%s'"), 
				m_nLineNo++, lpszMsg, hItem, m_Tree.GetItemText(hItem, TRUE));
		
		if (_tcsicmp(lpszMsg, _T("WM_CONTEXTMENU")) == 0)
		{
			CMenu menu;
			VERIFY(menu.CreatePopupMenu());

			if (m_Tree.IsEnabled(hItem))
			{
				VERIFY(menu.AppendMenu(MF_STRING, ID_DISABLE, _T("Disable")));
				VERIFY(menu.AppendMenu(MF_STRING|MF_GRAYED, ID_ENABLE, _T("Enable")));
			}
			else
			{
				VERIFY(menu.AppendMenu(MF_STRING|MF_GRAYED, ID_DISABLE, _T("Disable")));
				VERIFY(menu.AppendMenu(MF_STRING, ID_ENABLE, _T("Enable")));
			}

			VERIFY(menu.AppendMenu(MF_SEPARATOR, 0, _T("")));
			VERIFY(menu.AppendMenu(MF_STRING, ID_TREE_DELETE, _T("Delete")));

			VERIFY(menu.AppendMenu(MF_SEPARATOR, 0, _T("")));
			VERIFY(menu.AppendMenu(MF_STRING, ID_TREE_SEPARATOR, _T("Insert Separator")));

			m_hTrackItem = hItem;

			VERIFY(menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, point.x, point.y, this, NULL));
		}
	}
	else
	{
		if (m_bLog)
			m_List.Printf(CXListBox::Blue, CXListBox::White, 0, 
				_T("%04d  right click (%s), not on item"), 
				m_nLineNo++, lpszMsg);
	}
}

//=============================================================================
void CXHtmlTreeTestDlg::OnDisable()
//=============================================================================
{
	if (m_hTrackItem)
		m_Tree.EnableBranch(m_hTrackItem, FALSE);
	m_hTrackItem = 0;
	DumpInfo(m_Tree.GetSelectedItem());
}

//=============================================================================
void CXHtmlTreeTestDlg::OnEnable()
//=============================================================================
{
	if (m_hTrackItem)
		m_Tree.EnableBranch(m_hTrackItem, TRUE);
	m_hTrackItem = 0;
	DumpInfo(m_Tree.GetSelectedItem());
}

//=============================================================================
void CXHtmlTreeTestDlg::OnSeparator()
//=============================================================================
{
	TRACE(_T("in CXHtmlTreeTestDlg::OnSeparator\n"));
	if (m_hTrackItem)
		m_Tree.InsertSeparator(m_hTrackItem);
	m_hTrackItem = 0;
	DumpInfo(m_Tree.GetSelectedItem());
}

//=============================================================================
void CXHtmlTreeTestDlg::OnDelete()
//=============================================================================
{
	TRACE(_T("in CXHtmlTreeTestDlg::OnDelete\n"));
	if (m_hTrackItem)
		m_Tree.DeleteItem(m_hTrackItem);
	m_hTrackItem = 0;
	DumpInfo(m_Tree.GetSelectedItem());
}

//=============================================================================
// OnUpdate() is called when the user clicks the Update button to update
// the item text with the text from the edit box.
//
void CXHtmlTreeTestDlg::OnUpdate() 
//=============================================================================
{
	CString strItem = _T("");
	m_Edit.GetWindowText(strItem);
	strItem.Replace(_T("\r\n"), _T(" "));

	HTREEITEM hItem = m_Tree.GetSelectedItem();
	ASSERT(hItem);

	if (hItem)
	{
		if (strItem.IsEmpty())
		{
			strItem = m_Tree.GetItemText(hItem);
			m_Edit.SetWindowText(strItem);
		}
		else
		{
			if (m_bLog)
				m_List.Printf(CXListBox::Green, CXListBox::White, 0, 
					_T("%04d  Updating item text"), m_nLineNo++);
			m_Tree.SetItemText(hItem, strItem);
			m_Tree.SetItemTextColor(hItem, RGB(255,0,0));
			SetBreadCrumbBar(hItem);
		}
	}

	GetDlgItem(IDC_UPDATE)->EnableWindow(FALSE);
}

//=============================================================================
// OnExpanded
//
// This function shows how to handle WM_XHTMLTREE_ITEM_EXPANDED messages 
// from XHtmlTree.
//
LRESULT CXHtmlTreeTestDlg::OnExpanded(WPARAM wParam, LPARAM /*lParam*/)
//=============================================================================
{
	TRACE(_T("in CXHtmlTreeTestDlg::OnExpanded\n"));

	XHTMLTREEMSGDATA *pData = (XHTMLTREEMSGDATA *)wParam;
	ASSERT(pData);

	if (pData)
	{
		HTREEITEM hItem = pData->hItem;

		if (hItem)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -