📄 xhtmltreetestdlg.cpp
字号:
{
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d item expanded/collapsed at '%s'"), m_nLineNo++,
m_Tree.GetItemText(hItem));
DumpInfo(hItem);
}
}
return 0;
}
//=============================================================================
// OnCheckbox
//
// This function shows how to handle WM_XHTMLTREE_CHECKBOX_CLICKED messages
// from XHtmlTree.
//
LRESULT CXHtmlTreeTestDlg::OnCheckbox(WPARAM wParam, LPARAM lParam)
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnCheckbox\n"));
XHTMLTREEMSGDATA *pData = (XHTMLTREEMSGDATA *)wParam;
ASSERT(pData);
BOOL bChecked = lParam;
if (pData)
{
HTREEITEM hItem = pData->hItem;
if (hItem)
{
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d checkbox %schecked at '%s'"), m_nLineNo++,
bChecked ? _T("") : _T("un"),
m_Tree.GetItemText(hItem));
DumpInfo(hItem);
UINT uState = m_Tree.GetItemState(hItem, TVIS_STATEIMAGEMASK);
uState = uState >> 12;
int nStateImage = m_Tree.GetStateImage(hItem);
TRACE(_T("bChecked=%d uState=%X nStateImage=%d\n"), bChecked, uState, nStateImage);
if (m_pCheckedItemsDlg)
OnShowChecked();
}
}
return 0;
}
//=============================================================================
void CXHtmlTreeTestDlg::DumpInfo(HTREEITEM hItem)
//=============================================================================
{
CString str = _T("");
if (hItem)
{
str = m_Tree.GetItemText(hItem);
TRACE(_T("DumpInfo: 0x%X <%s>.....\n"), hItem, str);
str.Format(_T(" bChecked=%d nChildren=%d nChecked=%d bExpanded=%d bHasBeenExpanded=%d nDisabled=%d"),
m_Tree.GetCheck(hItem), m_Tree.GetChildrenCount(hItem),
m_Tree.GetChildrenCheckedCount(hItem),
m_Tree.IsExpanded(hItem),
m_Tree.GetHasBeenExpanded(hItem),
m_Tree.GetChildrenDisabledCount(hItem));
if (m_bLog)
m_List.Printf(CXListBox::Black, CXListBox::White, 0,
_T("%04d %s"), m_nLineNo++, str);
TRACE(_T("DumpInfo: %s GetCheck()=%d GetEnable()=%d\n"),
str, m_Tree.GetCheck(hItem), m_Tree.IsEnabled(hItem));
TCHAR s[100];
_stprintf(s, _T("Item Info - 0x%X"), hItem);
if (m_Tree.IsSeparator(hItem)) //+++1.6
_tcscat(s, _T(" (Separator)"));
m_ItemInfo.SetWindowText(s);
int nImage, nSelImage;
m_Tree.GetItemImage(hItem, nImage, nSelImage);
_itot(nImage, s, 10);
if (nImage == TV_NOIMAGE)
_tcscpy(s, _T("TV_NOIMAGE"));
m_ItemImage.SetWindowText(s);
m_IsChecked.SetWindowText(m_Tree.GetCheck(hItem) ? _T("TRUE") : _T("FALSE"));
m_NoChecked.SetWindowText(_itot(m_Tree.GetChildrenCheckedCount(hItem), s, 10));
m_NoChildren.SetWindowText(_itot(m_Tree.GetChildrenCount(hItem), s, 10));
m_NoSeparators.SetWindowText(_itot(m_Tree.GetSeparatorCount(hItem), s, 10));
m_Expanded.SetWindowText(m_Tree.IsExpanded(hItem) ? _T("Yes") : _T("No"));
}
HTREEITEM hRoot = m_Tree.GetRootItem();
if (hRoot)
{
int nTotalChildren = m_Tree.GetChildrenCount(hRoot);
int nTotalCheckedChildren = m_Tree.GetChildrenCheckedCount(hRoot);
TRACE(_T("nTotalChildren=%d nTotalCheckedChildren=%d\n"), nTotalChildren, nTotalCheckedChildren);
str.Format(_T("Tree contains %d children, %d %s checked."),
nTotalChildren,
nTotalCheckedChildren,
(nTotalCheckedChildren == 1) ? _T("is") : _T("are"));
m_TreeInfo.SetWindowText(str);
}
}
//=============================================================================
// OnAppCommand will be called when user clicks on "American Staghound" link
// wParam = parameter #3 from XHTMLTREE_APP_COMMAND
// lParam = HTREEITEM of item
LRESULT CXHtmlTreeTestDlg::OnAppCommand1(WPARAM wParam, LPARAM lParam)
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnAppCommand1: wParam=%d lParam=%X\n"), wParam, lParam);
TCHAR plaintext[1000];
CXHtmlDraw hd;
hd.GetPlainText(m_Tree.GetItemText((HTREEITEM)lParam),
plaintext, sizeof(plaintext)/sizeof(TCHAR)-1);
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d app command 1: '%s' wParam = %u lParam = %X"),
m_nLineNo++, plaintext, wParam, lParam);
CString s;
s.Format(_T("got WM_APP_COMMAND_1 for '%s'\n\nwParam = %u lParam = %X"),
plaintext, wParam, lParam);
::PlaySound(_T("woofwoof"), AfxGetApp()->m_hInstance,
SND_RESOURCE|SND_ASYNC|SND_NOWAIT|SND_NODEFAULT);
XMessageBox(m_hWnd, s, _T("XHtmlTreeTest"),
MB_OK | MB_ICONINFORMATION | MB_NOSOUND);
return 0;
}
//=============================================================================
// OnAppCommand2 will be called when user clicks on "Greyhound" link
// wParam = parameter #3 from XHTMLTREE_APP_COMMAND
// lParam = HTREEITEM of item
LRESULT CXHtmlTreeTestDlg::OnAppCommand2(WPARAM wParam, LPARAM lParam)
//=============================================================================
{
TRACE(_T("in CXHtmlTreeTestDlg::OnAppCommand2: wParam=%d lParam=%X\n"), wParam, lParam);
TCHAR plaintext[1000];
CXHtmlDraw hd;
hd.GetPlainText(m_Tree.GetItemText((HTREEITEM)lParam),
plaintext, sizeof(plaintext)/sizeof(TCHAR)-1);
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d app command 2: '%s' wParam = %u lParam = %X"),
m_nLineNo++, plaintext, wParam, lParam);
CString s;
s.Format(_T("got WM_APP_COMMAND_2 for '%s'\n\nwParam = %u lParam = %X"),
plaintext, wParam, lParam);
XMessageBox(m_hWnd, s, _T("XHtmlTreeTest"),
MB_OK | MB_ICONINFORMATION | MB_NOSOUND);
return 0;
}
//=============================================================================
void CXHtmlTreeTestDlg::OnChangeEdit1()
//=============================================================================
{
GetDlgItem(IDC_UPDATE)->EnableWindow(TRUE);
}
//=============================================================================
void CXHtmlTreeTestDlg::OnCollapseAll()
//=============================================================================
{
if (m_bLog)
m_List.Printf(CXListBox::Green, CXListBox::White, 0,
_T("%04d Collapsing all items"), m_nLineNo++);
m_Tree.CollapseAll();
m_Tree.SetFocus();
}
//=============================================================================
void CXHtmlTreeTestDlg::OnExpandAll()
//=============================================================================
{
if (m_bLog)
m_List.Printf(CXListBox::Green, CXListBox::White, 0,
_T("%04d Expanding all items"), m_nLineNo++);
m_Tree.ExpandAll();
m_Tree.SetFocus();
}
//=============================================================================
void CXHtmlTreeTestDlg::OnCheckAll()
//=============================================================================
{
if (m_bLog)
m_List.Printf(CXListBox::Green, CXListBox::White, 0,
_T("%04d Toggling checkbox for all items"), m_nLineNo++);
m_Tree.CheckAll(m_bCheckAll);
m_bCheckAll = !m_bCheckAll;
m_Tree.SetFocus();
}
//=============================================================================
void CXHtmlTreeTestDlg::OnUpdateTree()
//=============================================================================
{
UpdateTree(TRUE);
m_Tree.SetFocus();
}
//=============================================================================
void CXHtmlTreeTestDlg::UpdateTree(BOOL bReInit)
//=============================================================================
{
UpdateData(TRUE);
if (bReInit)
if (m_bLog)
m_List.Printf(CXListBox::Green, CXListBox::White, 0,
_T("%04d Reinitializing tree"), m_nLineNo++);
m_ItemImage.SetWindowText(_T(""));
m_IsChecked.SetWindowText(_T(""));
m_NoChecked.SetWindowText(_T(""));
m_NoChildren.SetWindowText(_T(""));
m_Expanded.SetWindowText(_T(""));
m_TreeInfo.SetWindowText(_T(""));
UpdateData(TRUE);
m_Tree.Initialize(m_bCheckBoxes, TRUE)
.SetSmartCheckBox(m_bSmartCheckBoxes)
.SetHtml(m_bHtml)
.SetStripHtml(m_bStripHtml)
.SetImages(m_bImages)
.SetReadOnly(m_bReadOnly)
.SetDragOps(XHTMLTREE_DO_DEFAULT)
//.SetSeparatorColor(RGB(0,0,255))
.SetDropCursors(IDC_NODROP, IDC_DROPCOPY, IDC_DROPMOVE);
//m_Tree.SetInsertMarkColor(RGB(255,0,0));
TRACE(_T("setting image list\n"));
if (m_bImages)
m_Tree.SetImageList(&m_Images, TVSIL_NORMAL);
else
m_Tree.SetImageList(NULL, TVSIL_NORMAL);
m_Tree.SetTextColor(m_rgbText);
if (m_bReadOnly)
m_Tree.SetBkColor(m_Tree.GetDisabledColor(GetSysColor(COLOR_WINDOW)));
else
m_Tree.SetBkColor(m_rgbBackground);
if (m_nInput == 0)
LoadTextFileFromResource(_T("IDU_DOGS1"));
else if (m_nInput == 1)
LoadTextFileFromResource(_T("IDU_DOGS2"));
else if (m_nInput == 2)
LoadXmlFileFromResource(_T("IDU_DOGS3"));
else if (m_nInput == 3)
LoadXmlFileFromResource(_T("IDU_DOGS4"));
else if (m_nInput == 4)
{
//+++1.6 multiple roots
LoadTextFileFromResource(_T("IDU_DOGS2"), 1);
LoadTextFileFromResource(_T("IDU_DOGS2"), 2);
LoadTextFileFromResource(_T("IDU_DOGS2"), 3);
LoadTextFileFromResource(_T("IDU_DOGS2"), 4);
LoadTextFileFromResource(_T("IDU_DOGS2"), 5);
}
if (m_bLog)
m_List.Printf(CXListBox::Blue, CXListBox::White, 0,
_T("%04d %d items loaded from resource '%s'"),
m_nLineNo++, m_nCount, m_strResourceName);
CString strTitle;
strTitle.LoadString(AFX_IDS_APP_TITLE);
strTitle += _T(" - ");
strTitle += m_strResourceName;
SetWindowText(strTitle);
}
//=============================================================================
void CXHtmlTreeTestDlg::OnShowChecked()
//=============================================================================
{
if ((m_pCheckedItemsDlg == NULL) ||
(!::IsWindow(m_pCheckedItemsDlg->m_hWnd)))
{
m_pCheckedItemsDlg = new CCheckedItemsDialog(this, m_ptCheckedItems);
}
int nChecked = 0;
CString str = _T("");
HTREEITEM hItem = m_Tree.GetFirstCheckedItem();
while (hItem)
{
CString s;
s.Format(_T("0x%08X "), hItem);
CString strText = m_Tree.GetItemText(hItem, TRUE);
if (!str.IsEmpty())
str += _T("\r\n");
str += s;
str += strText;
nChecked++;
hItem = m_Tree.GetNextCheckedItem(hItem);
}
if (nChecked == 0)
{
str = _T("No checked items at this time.");
}
if (m_pCheckedItemsDlg)
m_pCheckedItemsDlg->SetText(str);
m_Tree.SetFocus();
}
//=============================================================================
// OnInitTreeToolTip
//
// This message is received when tooltip is being initialized.
//=============================================================================
#ifdef XHTMLTOOLTIPS
LRESULT CXHtmlTreeTestDlg::OnInitTreeToolTip(WPARAM, LPARAM lParam)
#else
LRESULT CXHtmlTreeTestDlg::OnInitTreeToolTip(WPARAM, LPARAM)
#endif
{
TRACE(_T("in CXHtmlTreeTestDlg::OnInitTreeToolTip\n"));
#ifdef XHTMLTOOLTIPS
CPPToolTip * pToolTip = (CPPToolTip *) lParam;
if (pToolTip && IsWindow(pToolTip->m_hWnd))
{
pToolTip->SetColorBk(RGB(255, 255, 255), RGB(240, 247, 255), RGB(192, 192, 208));
pToolTip->SetEffectBk(13, 5);
pToolTip->SetDelayTime(PPTOOLTIP_TIME_AUTOPOP, 8000);
}
#endif
return 0;
}
//=============================================================================
// OnDisplayTreeToolTip
//
// This message is received when tooltip is about to be displayed.
// Return FALSE to allow the display, TRUE to prevent it.
//=============================================================================
#ifdef XHTMLTOOLTIPS
LRESULT CXHtmlTreeTestDlg::OnDisplayTreeToolTip(WPARAM wParam, LPARAM lParam)
#else
LRESULT CXHtmlTreeTestDlg::OnDisplayTreeToolTip(WPARAM wParam, LPARAM)
#endif
{
TRACE(_T("in CXHtmlTreeTestDlg::OnDisplayTreeToolTip\n"));
LRESULT lResult = 0;
XHTMLTREEMSGDATA *pData = (XHTMLTREEMSGDATA *)wParam;
ASSERT(pData);
HTREEITEM hItem = pData->hItem;
#ifdef XHTMLTOOLTIPS
CPPToolTip * pToolTip = (CPPToolTip *) lParam;
if (hItem && pToolTip && IsWindow(pToolTip->m_hWnd))
{
// do custom stuff here
}
else
{
lResult = 1; // don't display
}
#endif
CString strText = m_Tree.GetItemText(hItem);
TRACE(_T("hItem=%X strText=<%s>\n"), hItem, strText);
if (_tcsncmp(strText, _T("Galgo"), 5) == 0)
{
// zero tip width will use default width
m_Tree.SetItemNote(hItem,
_T("This is alternate text. For standard tooltip, it is limited to 80 characters."),
0);
}
return lResult;
}
//=============================================================================
// OnCheckedItemsDialogClosing
//
// This message is received when the checked items dialog closes.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -