📄 xhtmltreetestdlg.cpp
字号:
//
LRESULT CXHtmlTreeTestDlg::OnCheckedItemsDialogClosing(WPARAM, LPARAM lParam)
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnCheckedItemsDialogClosing\n"));
m_ptCheckedItems.x = GET_X_LPARAM(lParam);
m_ptCheckedItems.y = GET_Y_LPARAM(lParam);
TRACEPOINT(m_ptCheckedItems);
m_pCheckedItemsDlg = NULL;
return 0;
}
//=============================================================================
void CXHtmlTreeTestDlg::OnFind()
//=============================================================================
{
SetFocus();
CFindDialog dlg;
dlg.m_strFind = m_strFind;
dlg.m_nFindStart = m_nFindStart;
dlg.m_nFindDir = m_nFindDir;
dlg.m_bCheck = m_bFindCheck;
dlg.m_rect = m_rectFind;
int rc = dlg.DoModal();
m_strFind = dlg.m_strFind;
m_nFindStart = dlg.m_nFindStart;
m_nFindDir = dlg.m_nFindDir;
m_bFindCheck = dlg.m_bCheck;
m_rectFind = dlg.m_rect;
if (rc == IDOK)
{
Find();
}
m_Tree.SetFocus();
}
//=============================================================================
void CXHtmlTreeTestDlg::FindNext()
//=============================================================================
{
m_nFindDir = 1;
Find();
}
//=============================================================================
void CXHtmlTreeTestDlg::FindPrev()
//=============================================================================
{
m_nFindDir = 0;
Find();
}
//=============================================================================
void CXHtmlTreeTestDlg::Find()
//=============================================================================
{
if (!m_strFind.IsEmpty())
{
HTREEITEM hItem = m_Tree.GetSelectedItem();
if ((hItem == NULL) || (m_nFindStart == 1) || m_bFindCheck)
hItem = m_Tree.GetRootItem();
if (hItem)
{
BOOL bContinue = TRUE;
while (bContinue)
{
HTREEITEM hItemFound = m_Tree.FindItem(m_strFind, FALSE,
m_nFindDir == 1, FALSE, !m_bFindCheck, hItem);
TRACE(_T("hItemFound=%X\n"), hItemFound);
if (hItemFound)
{
if (m_bFindCheck)
{
if ((m_bSmartCheckBoxes && !m_Tree.ItemHasChildren(hItemFound)) ||
!m_bSmartCheckBoxes)
{
m_Tree.SetCheck(hItemFound);
}
hItem = hItemFound;
}
else
{
m_Tree.SelectItem(hItemFound);
bContinue = FALSE;
}
}
else
{
if (!m_bFindCheck)
{
CString s;
s.Format(_T("Cannot find string '%s'"), m_strFind);
XMessageBox(m_hWnd, s, _T("XHtmlTreeTest"),
MB_OK | MB_ICONEXCLAMATION | MB_NOSOUND);
}
bContinue = FALSE;
}
}
if (m_bFindCheck)
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d %d items checked after search for '%s'"),
m_nLineNo++, m_Tree.GetCheckedCount(), m_strFind);
}
}
}
//=============================================================================
BOOL CXHtmlTreeTestDlg::PreTranslateMessage(MSG* pMsg)
//=============================================================================
{
if ((pMsg->hwnd == 0) || !IsWindow(pMsg->hwnd))
return TRUE;
m_ToolTips.RelayEvent(pMsg);
TranslateAccelerator(m_hWnd, m_hAccel, pMsg);
if ((pMsg->hwnd == 0) || !IsWindow(pMsg->hwnd))
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
//=============================================================================
void CXHtmlTreeTestDlg::OnColors()
//=============================================================================
{
CColorDlg dlg;
dlg.m_rgbText = m_rgbText;
dlg.m_rgbBackground = m_rgbBackground;
if (dlg.DoModal() == IDOK)
{
m_rgbText = dlg.m_rgbText;
m_rgbBackground = dlg.m_rgbBackground;
m_Tree.SetTextColor(m_rgbText);
m_Tree.SetBkColor(m_rgbBackground);
m_Tree.RedrawWindow();
}
}
//=============================================================================
void CXHtmlTreeTestDlg::OnClose()
//=============================================================================
{
CDialog::OnCancel();
}
//=============================================================================
void CXHtmlTreeTestDlg::OnCancel()
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnCancel\n"));
// override the base class OnCancel() --
// prevent the ESC key from cancelling the dialog
//CDialog::OnCancel();
}
//=============================================================================
void CXHtmlTreeTestDlg::OnBeginlabeleditTree1(NMHDR* /*pNMHDR*/, LRESULT* pResult)
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnBeginlabeleditTree1\n"));
//TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d received TVN_BEGINLABELEDIT"),
m_nLineNo++);
*pResult = FALSE; // return FALSE to allow edit
}
//=============================================================================
void CXHtmlTreeTestDlg::OnEndlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult)
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnEndlabeleditTree1\n"));
*pResult = TRUE; // return TRUE to accept edit
NMTVDISPINFO* pTVDispInfo = (NMTVDISPINFO*) pNMHDR;
HTREEITEM hItem = pTVDispInfo->item.hItem;
ASSERT(hItem);
LPTSTR pszText = pTVDispInfo->item.pszText;
BOOL bComplete = pszText && (*pszText != _T('\0'));
if (!bComplete)
*pResult = FALSE; // don't allow empty label
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d received TVN_ENDLABELEDIT: edit %s"),
m_nLineNo++, bComplete ? _T("complete") : _T("canceled"));
if (pszText && (*pszText != _T('\0')))
m_Edit.SetWindowText(pszText);
SetTimer(1, 50, NULL); // set timer to update bread crumb bar - the item
// text has not yet been updated in the tree
}
//=============================================================================
void CXHtmlTreeTestDlg::OnLog()
//=============================================================================
{
m_bLog = !m_bLog;
UpdateData(FALSE);
}
//=============================================================================
LRESULT CXHtmlTreeTestDlg::OnAppCommandSel(WPARAM wParam, LPARAM)
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnAppCommandSel: wParam=%X\n"), wParam);
if (wParam)
{
m_Tree.SelectItem((HTREEITEM)wParam);
}
return 0;
}
//=============================================================================
void CXHtmlTreeTestDlg::OnMouseMove(UINT nFlags, CPoint point)
//=============================================================================
{
m_BreadCrumbBar.RelayMouseMove(m_hWnd);
CDialog::OnMouseMove(nFlags, point);
}
//=============================================================================
void CXHtmlTreeTestDlg::OnLButtonUp(UINT nFlags, CPoint point)
//=============================================================================
{
m_BreadCrumbBar.RelayClick(m_hWnd);
CDialog::OnLButtonUp(nFlags, point);
}
//=============================================================================
void CXHtmlTreeTestDlg::OnTimer(UINT nIDEvent)
//=============================================================================
{
KillTimer(nIDEvent);
SetBreadCrumbBar(NULL);
CDialog::OnTimer(nIDEvent);
}
#ifdef XHTMLDRAGDROP
//=============================================================================
LRESULT CXHtmlTreeTestDlg::OnBeginDrag(WPARAM wParam, LPARAM lParam)
//
// Message handler for WM_XHTMLTREE_BEGIN_DRAG:
// wParam = pointer to XHTMLTREEMSGDATA struct
// lParam = pointer to XHTMLTREEDRAGMSGDATA struct
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnBeginDrag\n"));
XHTMLTREEMSGDATA *pMsg = (XHTMLTREEMSGDATA *) wParam;
ASSERT(pMsg);
XHTMLTREEDRAGMSGDATA *pData = (XHTMLTREEDRAGMSGDATA *) lParam;
LRESULT lResult = 0;
if (pMsg && pData)
{
CString strCopyMove = _T("move");
if (pData->bCopyDrag)
strCopyMove = _T("copy");
CString strItem = m_Tree.GetItemText(pData->hItem);
TRACE(_T("starting %s drag on '%s'\n"), strCopyMove, strItem);
if (strItem == _T("Longdog"))
lResult = 1;
if (m_bLog && (lResult == 0))
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d starting %s drag on '%s'"),
m_nLineNo++, strCopyMove, strItem);
else if (m_bLog && (lResult == 1))
m_List.Printf(CXListBox::Red, CXListBox::White, 0,
_T("%04d rejecting drag of '%s'"),
m_nLineNo++, strItem);
}
else
{
TRACE(_T("ERROR bad param\n"));
ASSERT(FALSE);
}
return lResult; // return 0 to allow drag
}
//=============================================================================
LRESULT CXHtmlTreeTestDlg::OnEndDrag(WPARAM wParam, LPARAM lParam)
//
// Message handler for WM_XHTMLTREE_END_DRAG:
// wParam = pointer to XHTMLTREEMSGDATA struct
// lParam = pointer to XHTMLTREEDRAGMSGDATA struct; 0 = drag terminated
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnEndDrag\n"));
XHTMLTREEMSGDATA *pMsg = (XHTMLTREEMSGDATA *) wParam;
ASSERT(pMsg);
XHTMLTREEDRAGMSGDATA *pData = (XHTMLTREEDRAGMSGDATA *) lParam;
LRESULT lResult = 0;
if (pMsg)
{
if (pData)
{
CString strItem = m_Tree.GetItemText(pData->hItem);
CString strDropTarget = _T("");
if (((UINT_PTR)pData->hAfter & 0xFFFF0000) == 0xFFFF0000)
strDropTarget = m_Tree.GetItemText(pData->hNewParent);
//strTextAfter.Format(_T("0x%X"), hAfter);
else if (pData->hAfter)
strDropTarget = m_Tree.GetItemText(pData->hAfter);
TRACE(_T("ending drag: dropping '%s' on '%s'\n"), strItem, strDropTarget);
if (strDropTarget == _T("Longdog"))
lResult = 1;
if (m_bLog && (lResult == 0))
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d ending drag: dropping '%s' on '%s'"),
m_nLineNo++, strItem, strDropTarget);
else if (m_bLog && (lResult == 1))
m_List.Printf(CXListBox::Red, CXListBox::White, 0,
_T("%04d ending drag: rejecting drop of '%s' on '%s'"),
m_nLineNo++, strItem, strDropTarget);
DumpInfo(m_Tree.GetSelectedItem());
}
else
{
// lParam = 0 ==> drag was terminated by user (left button up
// when not on item, ESC key, right mouse button down)
if (m_bLog)
m_List.Printf(CXListBox::Red, CXListBox::White, 0,
_T("%04d drag terminated by user"), m_nLineNo++);
}
}
return lResult; // return 0 to allow drop
}
//=============================================================================
LRESULT CXHtmlTreeTestDlg::OnDropHover(WPARAM wParam, LPARAM lParam)
//
// Message handler for WM_XHTMLTREE_DROP_HOVER:
// wParam = pointer to XHTMLTREEMSGDATA struct
// lParam = pointer to XHTMLTREEDRAGMSGDATA struct
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnDropHover\n"));
XHTMLTREEMSGDATA *pMsg = (XHTMLTREEMSGDATA *) wParam;
ASSERT(pMsg);
XHTMLTREEDRAGMSGDATA *pData = (XHTMLTREEDRAGMSGDATA *) lParam;
LRESULT lResult = 0;
if (pMsg && pData)
{
CString strItem = m_Tree.GetItemText(pData->hItem);
CString strTextHover = m_Tree.GetItemText(pData->hAfter);
TRACE(_T("dragging '%s' over '%s'\n"), strItem, strTextHover);
if (strTextHover == _T("Longdog"))
lResult = 1;
#if 0 // -----------------------------------------------------------
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d dragging '%s' over '%s'"),
m_nLineNo++, strItem, strTextHover);
#endif // -----------------------------------------------------------
}
else
{
TRACE(_T("ERROR bad param\n"));
ASSERT(FALSE);
}
return lResult;
}
//=============================================================================
LRESULT CXHtmlTreeTestDlg::OnScrollSpeed(WPARAM wParam, LPARAM)
//=============================================================================
{
CXNamedColors nc(_T("BtnFace"));
COLORREF rgbOn = RGB(0,255,0);
COLORREF rgbOff = nc.GetRGB();
m_ScrollSpeed1.SetBackgroundColor((wParam >= 1) ? rgbOn : rgbOff);
m_ScrollSpeed2.SetBackgroundColor((wParam >= 2) ? rgbOn : rgbOff);
m_ScrollSpeed3.SetBackgroundColor((wParam >= 3) ? rgbOn : rgbOff);
return 0;
}
#endif // XHTMLDRAGDROP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -