📄 leftview.cpp
字号:
// LeftView.cpp : implementation file
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "LeftView.h"
#include "Demo_OutlookDoc.h"
#include "Demo_OutlookView.h"
#include "RightView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLeftView
IMPLEMENT_DYNCREATE(CLeftView, CTreeView)
CLeftView::CLeftView()
{
}
CLeftView::~CLeftView()
{
}
BEGIN_MESSAGE_MAP(CLeftView, CTreeView)
//{{AFX_MSG_MAP(CLeftView)
ON_WM_CREATE()
ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLeftView drawing
void CLeftView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CLeftView diagnostics
#ifdef _DEBUG
void CLeftView::AssertValid() const
{
CTreeView::AssertValid();
}
void CLeftView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLeftView message handlers
int CLeftView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTreeView::OnCreate(lpCreateStruct) == -1)
return -1;
m_TreeCtrl = &GetTreeCtrl();
m_TreeCtrl->ModifyStyle (0, TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT);
m_Font.CreatePointFont (85, _T("Tahoma"));
m_TreeCtrl->SetFont (&m_Font);
PopulateTreeControls();
return 0;
}
static CString csTreeItems[] =
{
_T("Outlook Today - [Mailbox - Kirk Stowell]"),
_T("Public Folders"),
_T("Calendar"),
_T("Contacts"),
_T("Deleted Items (4)"),
_T("Drafts"),
_T("Inbox (50)"),
_T("Journal"),
_T("Notes"),
_T("Outbox"),
_T("Sent Items"),
_T("Tasks")
};
static UINT nImages[] =
{
IDI_ICON_OUTLOOK,
IDI_ICON_PUBLIC,
IDI_ICON_CALENDAR,
IDI_ICON_CONTACTS,
IDI_ICON_DELETED,
IDI_ICON_DRAFTS,
IDI_ICON_INBOX,
IDI_ICON_JOURNAL,
IDI_ICON_NOTES,
IDI_ICON_OUTBOX,
IDI_ICON_SENT,
IDI_ICON_TASKS
};
void CLeftView::PopulateTreeControls()
{
// create the image list for the tree control
// and set the tree style using defaults
// Set the image list for the menu control
m_ImageList.Create (16, 16, true, 2, 1);
HICON hIcon;
for (int i =0; i < 12; ++i) {
hIcon= AfxGetApp()->LoadIcon (nImages[i]);
m_ImageList.Add (hIcon);
}
m_TreeCtrl->SetImageList( &m_ImageList, TVSIL_NORMAL );
// add the parent items
m_htParent = m_TreeCtrl->InsertItem( csTreeItems[0], 0, 0 );
m_TreeCtrl->InsertItem( csTreeItems[1], 1, 1 );
// add childeren items
AddTreeChildren( m_htParent );
m_TreeCtrl->Expand(m_htParent, TVE_EXPAND);
}
void CLeftView::AddTreeChildren( HTREEITEM htiParent )
{
HTREEITEM hti1, hti2;
m_TreeCtrl->InsertItem( csTreeItems[2], 2, 2, htiParent );
m_TreeCtrl->InsertItem( csTreeItems[3], 3, 3,htiParent );
hti1 = m_TreeCtrl->InsertItem( csTreeItems[4], 4, 4, htiParent );
m_TreeCtrl->InsertItem( csTreeItems[5], 5, 5, htiParent );
hti2 = m_TreeCtrl->InsertItem( csTreeItems[6], 6, 6, htiParent );
m_TreeCtrl->InsertItem( csTreeItems[7], 7, 7, htiParent );
m_TreeCtrl->InsertItem( csTreeItems[8], 8, 8, htiParent );
m_TreeCtrl->InsertItem( csTreeItems[9], 9, 9, htiParent );
m_TreeCtrl->InsertItem( csTreeItems[10], 10, 10, htiParent );
m_TreeCtrl->InsertItem( csTreeItems[11], 11, 11, htiParent );
m_TreeCtrl->SetItemState( hti1, TVIS_BOLD, TVIS_BOLD );
m_TreeCtrl->SetItemState( hti2, TVIS_BOLD, TVIS_BOLD );
}
// GetLastItem - Gets last item in the branch
// Returns - Last item
// hItem - Node identifying the branch. NULL will
// return the last item in outine
HTREEITEM CLeftView::GetLastItem( HTREEITEM hItem )
{
// Last child of the last child of the last child ...
HTREEITEM htiNext;
if( hItem == NULL ){
// Get the last item at the top level
htiNext = m_TreeCtrl->GetRootItem();
while( htiNext ){
hItem = htiNext;
htiNext = m_TreeCtrl->GetNextSiblingItem( htiNext );
}
}
while( m_TreeCtrl->ItemHasChildren( hItem ) ){
htiNext = m_TreeCtrl->GetChildItem( hItem );
while( htiNext ){
hItem = htiNext;
htiNext = m_TreeCtrl->GetNextSiblingItem( htiNext );
}
}
return hItem;
}
// GetNextItem - Get next item as if outline was completely expanded
// Returns - The item immediately below the reference item
// hItem - The reference item
HTREEITEM CLeftView::GetNextItem( HTREEITEM hItem )
{
HTREEITEM hti;
if( m_TreeCtrl->ItemHasChildren( hItem ) )
return m_TreeCtrl->GetChildItem( hItem ); // return first child
else{
// return next sibling item
// Go up the tree to find a parent's sibling if needed.
while( (hti = m_TreeCtrl->GetNextSiblingItem( hItem )) == NULL ){
if( (hItem = m_TreeCtrl->GetParentItem( hItem ) ) == NULL )
return NULL;
}
}
return hti;
}
// GetNextItem - Get previous item as if outline was completely expanded
// Returns - The item immediately above the reference item
// hItem - The reference item
HTREEITEM CLeftView::GetPrevItem( HTREEITEM hItem )
{
HTREEITEM hti;
hti = m_TreeCtrl->GetPrevSiblingItem(hItem);
if( hti == NULL )
hti = m_TreeCtrl->GetParentItem(hItem);
else
hti = GetLastItem(hti);
return hti;
}
// FindItem - Finds an item that contains the search string
// Returns - Handle to the item or NULL
// str - String to search for
// bCaseSensitive - Should the search be case sensitive
// bDownDir - Search direction - TRUE for down
// bWholeWord - True if search should match whole words
// hItem - Item to start searching from. NULL for
// - currently selected item
HTREEITEM CLeftView::FindItem(CString &str,
BOOL bCaseSensitive /*= FALSE*/,
BOOL bDownDir /*= TRUE*/,
BOOL bWholeWord /*= FALSE*/,
HTREEITEM hItem /*= NULL*/)
{
int lenSearchStr = str.GetLength();
if( lenSearchStr == 0 ) return NULL;
HTREEITEM htiSel = hItem ? hItem : m_TreeCtrl->GetSelectedItem();
HTREEITEM htiCur = bDownDir ?GetNextItem( htiSel ) : GetPrevItem( htiSel );
CString sSearch = str;
if( htiCur == NULL )
{
if( bDownDir ) htiCur = m_TreeCtrl->GetRootItem();
else htiCur = GetLastItem( NULL );
}
if( !bCaseSensitive )
sSearch.MakeLower();
while( htiCur && htiCur != htiSel )
{
CString sItemText = m_TreeCtrl->GetItemText( htiCur );
if( !bCaseSensitive )
sItemText.MakeLower();
int n;
while( (n = sItemText.Find( sSearch )) != -1 )
{
// Search string found
if( bWholeWord )
{
// Check preceding char
if( n != 0 )
{
if( isalpha(sItemText[n-1]) ||
sItemText[n-1] == '_' ){
// Not whole word
sItemText = sItemText.Right(
sItemText.GetLength() - n -
lenSearchStr );
continue;
}
}
// Check succeeding char
if( sItemText.GetLength() > n + lenSearchStr
&& ( isalpha(sItemText[n+lenSearchStr]) ||
sItemText[n+lenSearchStr] == '_' ) )
{
// Not whole word
sItemText = sItemText.Right( sItemText.GetLength()
- n - sSearch.GetLength() );
continue;
}
}
if( IsFindValid( htiCur ) )
return htiCur;
else break;
}
htiCur = bDownDir ? GetNextItem( htiCur ) : GetPrevItem( htiCur );
if( htiCur == NULL )
{
if( bDownDir ) htiCur = m_TreeCtrl->GetRootItem();
else htiCur = GetLastItem( NULL );
}
}
return NULL;
}
// IsFindValid - Virtual function used by FindItem to allow this
// function to filter the result of FindItem
// Returns - True if item matches the criteria
// Arg - Handle of the item
BOOL CLeftView::IsFindValid( HTREEITEM )
{
return TRUE;
}
void CLeftView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// Get the right pane from CMainFrame.
CDemo_OutlookView* pMainView;
pMainView = (CDemo_OutlookView*)
((CMainFrame*)GetParentFrame())->m_wndSplitter.GetPane (0,1);
// Get the list view pane contained in the right pane.
CRightView* pView;
pView = (CRightView*)pMainView->m_wndSplitter.GetPane (0,1);
int nImage;
HTREEITEM hti = m_TreeCtrl->GetSelectedItem();
if (hti)
{
m_TreeCtrl->GetItemImage (hti, nImage, nImage);
m_cs[0].Format ("%d",nImage);
m_cs[1] = m_TreeCtrl->GetItemText (hti);
// Add string to list control.
pView->PopulateList(m_cs);
}
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -