// BookMarkView.cpp : implementation file | |
// | |
#include "stdafx.h" | |
#include "ReaderVC.h" | |
#include "ChildFrm.h" | |
#include "BookMarkView.h" | |
#include "ReaderVCDoc.h" | |
#include "ReaderVCView.h" | |
#ifdef _DEBUG | |
#define new DEBUG_NEW | |
#undef THIS_FILE | |
static char THIS_FILE[] = __FILE__; | |
#endif | |
///////////////////////////////////////////////////////////////////////////// | |
// CBookMarkView | |
IMPLEMENT_DYNCREATE(CBookMarkView, CTreeView) | |
CBookMarkView::CBookMarkView() | |
{ | |
m_pFram = NULL; | |
m_pDoc = NULL; | |
} | |
CBookMarkView::~CBookMarkView() | |
{ | |
} | |
BEGIN_MESSAGE_MAP(CBookMarkView, CTreeView) | |
//{{AFX_MSG_MAP(CBookMarkView) | |
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged) | |
//}}AFX_MSG_MAP | |
END_MESSAGE_MAP() | |
///////////////////////////////////////////////////////////////////////////// | |
// CBookMarkView drawing | |
void CBookMarkView::OnDraw(CDC* pDC) | |
{ | |
CReaderVCDoc* pDoc = GetDocument(); | |
// TODO: add draw code here | |
} | |
///////////////////////////////////////////////////////////////////////////// | |
// CBookMarkView diagnostics | |
#ifdef _DEBUG | |
void CBookMarkView::AssertValid() const | |
{ | |
CTreeView::AssertValid(); | |
} | |
void CBookMarkView::Dump(CDumpContext& dc) const | |
{ | |
CTreeView::Dump(dc); | |
} | |
CReaderVCDoc* CBookMarkView::GetDocument() // non-debug version is inline | |
{ | |
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CReaderVCDoc))); | |
return (CReaderVCDoc*)m_pDocument; | |
} | |
#endif //_DEBUG | |
///////////////////////////////////////////////////////////////////////////// | |
// CBookMarkView message handlers | |
void CBookMarkView::OnInitialUpdate() | |
{ | |
CTreeView::OnInitialUpdate(); | |
CReaderVCDoc* pDoc = GetDocument(); | |
if (! m_pFram || !m_pFram->m_pView) | |
return; | |
m_pDoc = m_pFram->m_pView->GetPDFDoc(); | |
if(m_pDoc == NULL) return; | |
int num = m_pFram->m_pView->GetTotalPages(); | |
CString strName = pDoc->GetTitle(); | |
FPDF_BOOKMARK bookmark1 = NULL; | |
////////////////////////////////////////////////////////////////////////// | |
//insert items | |
// CTreeCtrl &treeCtrl = this->GetTreeCtrl(); | |
// m_hItemRoot = treeCtrl.InsertItem(strName,0,0,TVI_ROOT,TVI_FIRST); | |
// treeCtrl.SetItemData(m_hItemRoot,0); | |
// bookmark1 = FPDFBookmark_GetFirstChild(m_pDoc, NULL); | |
// if (bookmark1 == NULL)//insert the page index to tree | |
// { | |
// for (int i=0; i<num; i++) | |
// { | |
// CString str; | |
// str.Format(_T("Page%d"), i+1); | |
// HTREEITEM hItem = treeCtrl.InsertItem(str); | |
// treeCtrl.SetItemData(hItem, i); | |
// } | |
// }else{ | |
// while(bookmark1 != NULL) { | |
// this->InsertChildItem(bookmark1, m_hItemRoot, treeCtrl); | |
// bookmark1 = FPDFBookmark_GetNextSibling(m_pDoc,bookmark1); | |
// } | |
// } | |
// treeCtrl.Expand(m_hItemRoot,TVE_EXPAND); | |
// | |
// LONG nStyle = ::GetWindowLong(this->m_hWnd, GWL_STYLE); | |
// nStyle |= TVS_LINESATROOT; | |
// nStyle |= TVS_HASLINES; | |
// nStyle |= TVS_HASBUTTONS; | |
// ::SetWindowLong(this->m_hWnd, GWL_STYLE, nStyle); | |
} | |
void CBookMarkView::InsertChildItem(FPDF_BOOKMARK bookmark, HTREEITEM hItem, CTreeCtrl &treectrl) | |
{ | |
// CString strTitle; | |
// DWORD dwItemData = 0; | |
// WCHAR buffer[1024]; | |
// CString str; | |
// int strlenth = 0; | |
// unsigned long pdf_actType = 0; | |
// //FPDF_BOOKMARK | |
// FPDF_DEST dest = NULL; | |
// FPDF_ACTION action = NULL; | |
// | |
// memset(buffer,0,1024*sizeof(WCHAR)); | |
// strlenth = FPDFBookmark_GetTitle(bookmark, buffer, 0); | |
// int nlen = WideCharToMultiByte(CP_ACP,0,buffer,-1,NULL,NULL,NULL,NULL); | |
// char *buffer1 = new char[nlen]; | |
// memset(buffer1,0,nlen); | |
// WideCharToMultiByte(CP_ACP,0,buffer,strlenth,buffer1,nlen,NULL,NULL); | |
// buffer1[nlen -1] = '\0'; | |
// /* int strl = strlen(buffer1); | |
// strTitle = buffer;// | |
// strTitle = strTitle.Left(strl-1);*/ | |
// hItem = treectrl.InsertItem(buffer1, 0, 0, hItem, TVI_LAST); | |
// action = FPDFBookmark_GetAction(bookmark); | |
// if (action != NULL) | |
// { | |
// pdf_actType = FPDFAction_GetType(action); | |
// if (pdf_actType == 1) | |
// { | |
// dest = FPDFAction_GetDest(m_pDoc, action); | |
// dwItemData = FPDFDest_GetPageIndex(m_pDoc, dest); | |
// int nZoomMode = FPDFDest_GetZoomMode(dest); | |
// if(nZoomMode == 1) | |
// { | |
// double nStartX = FPDFDest_GetZoomParam(dest, 0); | |
// double nStartY = FPDFDest_GetZoomParam(dest, 1); | |
// CPoint pos((int)nStartX, (int)nStartY); | |
// m_PosMap.SetAt(hItem, pos); | |
// } | |
// treectrl.SetItemData(hItem, dwItemData); | |
// | |
// }else{ | |
// dwItemData = 0; | |
// treectrl.SetItemData(hItem, dwItemData); | |
// } | |
// | |
// }else{ | |
// dest = FPDFBookmark_GetDest(m_pDoc, bookmark); | |
// dwItemData = FPDFDest_GetPageIndex(m_pDoc, dest); | |
// treectrl.SetItemData(hItem, dwItemData); | |
// } | |
// | |
// bookmark = FPDFBookmark_GetFirstChild(m_pDoc, bookmark); | |
// while(bookmark != NULL) | |
// { | |
// this->InsertChildItem(bookmark, hItem, treectrl); | |
// bookmark = FPDFBookmark_GetNextSibling(m_pDoc, bookmark); | |
// } | |
// delete buffer1; | |
} | |
void CBookMarkView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) | |
{ | |
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; | |
// TODO: Add your control notification handler code here | |
HTREEITEM hItem; | |
DWORD dwPageIdex= 0; | |
if(m_pDoc == NULL) return; | |
hItem = GetTreeCtrl().GetSelectedItem(); | |
dwPageIdex = GetTreeCtrl().GetItemData(hItem); | |
CPoint p; | |
if(0 == m_PosMap.Lookup(hItem, p)) | |
{ | |
p.x = 0; | |
p.y = 0; | |
} | |
m_pFram->m_pView->LoadPDFPage(m_pDoc, dwPageIdex, p); | |
m_pFram->m_pView->Invalidate(); | |
*pResult = 0; | |
} | |