// ReaderVCView.h : interface of the CReaderVCView class | |
// | |
///////////////////////////////////////////////////////////////////////////// | |
#if !defined(AFX_READERVCVIEW_H__9AFC449C_26D0_4906_ABAE_1298871862E2__INCLUDED_) | |
#define AFX_READERVCVIEW_H__9AFC449C_26D0_4906_ABAE_1298871862E2__INCLUDED_ | |
#if _MSC_VER > 1000 | |
#pragma once | |
#endif // _MSC_VER > 1000 | |
#include "ExportPage.h" | |
#include "afxtempl.h" | |
#include <wininet.h> | |
#include <afxinet.h> | |
#include <afxctl.h> | |
typedef struct | |
{ | |
CString m_strFind; | |
int m_nFlag; | |
int m_nDirection; | |
BOOL m_bFirst; | |
wchar_t *m_pCurFindBuf; //unicode code | |
int m_nStartPageIndex; // the page index for starting find | |
int m_nStartCharIndex; //start index | |
}FindInfo; | |
typedef struct | |
{ | |
double m_dbLeft; | |
double m_dbTop; | |
double m_dbRight; | |
double m_dbBottom; | |
}PDFRect; | |
#define IsALTpressed() (GetKeyState(VK_MENU) < 0) | |
#define IsCTRLpressed() (GetKeyState(VK_CONTROL) < 0) | |
#define IsSHIFTpressed() (GetKeyState(VK_SHIFT)&0x8000) | |
#define IsINSERTpressed() (GetKeyState(VK_INSERT) & 0x01) | |
// void Sample_PageToDevice(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page,double page_x,double page_y, int* device_x, int* device_y); | |
// | |
// void Sample_Invalidate(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom); | |
// | |
// void Sample_DeviceToPage(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page,int device_x, int device_y, double* page_x, double* page_y); | |
// | |
// void Sample_SetCaret(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page,double page_x, double page_y, int nWidth, int nHeight); | |
// | |
// void Sample_Release(struct _FPDF_FORMFILLINFO* pThis); | |
// | |
// | |
// int Sample_SetTimer(struct _FPDF_FORMFILLINFO* pThis, int uElapse, TimerCallback lpTimerFunc); | |
// | |
// void Sample_KillTimer(struct _FPDF_FORMFILLINFO* pThis,int nID); | |
// | |
// void Sample_SetCursor(struct _FPDF_FORMFILLINFO* pThis,int nCursorType); | |
// | |
// void Sample_OnChange(struct _FPDF_FORMFILLINFO* pThis); | |
// | |
// FPDF_BOOL Sample_IsSHIFTKeyDown(struct _FPDF_FORMFILLINFO* pThis); | |
// | |
// FPDF_BOOL Sample_IsCTRLKeyDown(struct _FPDF_FORMFILLINFO* pThis); | |
// | |
// FPDF_BOOL Sample_IsALTKeyDown(struct _FPDF_FORMFILLINFO* pThis) ; | |
// | |
// FPDF_BOOL Sample_IsINSERTKeyDown(struct _FPDF_FORMFILLINFO* pThis) ; | |
class CReaderVCDoc; | |
typedef unsigned long FX_DWORD; | |
static int CALLBACK FontEnumProc(const LOGFONTA *plf, const TEXTMETRICA *lpntme, FX_DWORD FontType, LPARAM lParam) | |
{ | |
FPDF_AddInstalledFont((void*)lParam, plf->lfFaceName, plf->lfCharSet); | |
return 1; | |
} | |
#define FXDWORD_FROM_MSBFIRST2(i) (((unsigned char)(i) << 24) | ((unsigned char)((i) >> 8) << 16) | ((unsigned char)((i) >> 16) << 8) | (unsigned char)((i) >> 24)) | |
class CSampleFontInfo : public FPDF_SYSFONTINFO | |
{ | |
public: | |
CSampleFontInfo() | |
{ | |
m_hDC = CreateDCA("DISPLAY", NULL, NULL, NULL); | |
} | |
HDC m_hDC; | |
void ReleaseImpl() | |
{ | |
DeleteDC(m_hDC); | |
delete this; | |
} | |
void EnumFontsImpl(void* pMapper) | |
{ | |
LOGFONTA lf; | |
lf.lfCharSet = DEFAULT_CHARSET; | |
lf.lfFaceName[0] = 0; | |
lf.lfPitchAndFamily = 0; | |
::EnumFontFamiliesExA(m_hDC, &lf, FontEnumProc, (LPARAM)pMapper, 0); | |
} | |
void* MapFontImpl(int weight, int bItalic, int charset, int pitch_family, const char* face, int* bExact) | |
{ | |
return ::CreateFontA(-10, 0, 0, 0, weight, bItalic, 0, 0, | |
charset, OUT_TT_ONLY_PRECIS, 0, 0, pitch_family, face); | |
} | |
unsigned long GetFontDataImpl(void* hFont, unsigned int table, unsigned char* buffer, unsigned long buf_size) | |
{ | |
HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont); | |
buf_size = ::GetFontData(m_hDC, FXDWORD_FROM_MSBFIRST2(table), 0, buffer, buf_size); | |
::SelectObject(m_hDC, hOldFont); | |
if (buf_size == GDI_ERROR) return 0; | |
return buf_size; | |
} | |
unsigned long GetFaceNameImpl(void* hFont, char* buffer, unsigned long buf_size) | |
{ | |
HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont); | |
unsigned long ret = ::GetTextFaceA(m_hDC, buf_size, buffer); | |
::SelectObject(m_hDC, hOldFont); | |
if (buf_size == GDI_ERROR) return 0; | |
return ret; | |
} | |
int GetFontCharsetImpl(void* hFont) | |
{ | |
TEXTMETRIC tm; | |
HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont); | |
::GetTextMetrics(m_hDC, &tm); | |
::SelectObject(m_hDC, hOldFont); | |
return tm.tmCharSet; | |
} | |
void DeleteFontImpl(void* hFont) | |
{ | |
::DeleteObject(hFont); | |
} | |
}; | |
typedef struct _FPDF_FILE | |
{ | |
FPDF_FILEHANDLER fileHandler; | |
FILE* file; | |
}FPDF_FILE; | |
class CReaderVCView : public CView, public FPDF_FORMFILLINFO | |
{ | |
protected: // create from serialization only | |
CReaderVCView(); | |
DECLARE_DYNCREATE(CReaderVCView) | |
// Attributes | |
public: | |
CReaderVCDoc* GetDocument(); | |
CChildFrame *m_pFram; | |
// Operations | |
public: | |
// Overrides | |
// ClassWizard generated virtual function overrides | |
//{{AFX_VIRTUAL(CReaderVCView) | |
public: | |
virtual void OnDraw(CDC* pDC); // overridden to draw this view | |
virtual BOOL PreCreateWindow(CREATESTRUCT& cs); | |
virtual void OnInitialUpdate(); | |
virtual BOOL PreTranslateMessage(MSG* pMsg); | |
protected: | |
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); | |
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); | |
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); | |
virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView); | |
//}}AFX_VIRTUAL | |
// Implementation | |
public: | |
CExportPage* m_pExportPageDlg; | |
FPDF_PAGE GetPage(){ return m_pPage;} | |
void SyncScroll(); | |
CRect SelectSegment(CPoint pt_lt, CPoint pt_rb); | |
void GetRects(int nStart, int nEnd); | |
void CreateCaret(CPoint pt); | |
BOOL GetCharIndexByPoint(CPoint pt, int &nIndex); | |
void LoadMyCursor(int nflag = 0); | |
void DeleteAllRect(); | |
void DrawAllRect(CDC *pDC); | |
void DrawReverse(CDC *pDC, CRect rect); | |
void FindNext(int nDirection); | |
void FindText(CString strFind, BOOL bCase, BOOL bWholeword, int Direction); | |
void ScalPage(double dbScal); | |
void GotoPage(int index); | |
BOOL SetPDFDocument(FPDF_DOCUMENT pDoc, int nPageNum); | |
void DrawPage(int nRotate, CDC *pDC); | |
void SetPageMetrics(FPDF_PAGE pPage); | |
void SetScalFactor(double dbScal); | |
void GetNewPageSize(int &nsizeX, int &nsizeY); | |
BOOL LoadPDFPage(FPDF_DOCUMENT doc, int nIndex, CPoint pos = CPoint(0,0)); | |
FPDF_DOCUMENT GetPDFDoc(){ return m_pDoc;} | |
int GetTotalPages(){ return m_nTotalPage;} | |
BOOL DeviceToPage(CPoint pt, double& page_x, double& page_y); | |
BOOL PageToDevice(double page_x, double page_y, CPoint& pt); | |
int GetCurrentPageIndex() { return m_nPageIndex; } | |
static BOOL HttpDataPut(CString csData, CString csAppName, CString csObject, CString csServer, | |
CString csUserName, CString csPassword, INTERNET_PORT nPort, BOOL IsHTTPS); | |
static BOOL NeedAuth(CHttpFile *pHttpFile); | |
static BOOL HttpDataPost(CString csData, CString csAppName, CString csObject, CString csServer, CString csUserName, | |
CString csPassword, INTERNET_PORT nPort , BOOL IsHTTPS, CString csContentType, CString csAddHeader, CString &csResponse); | |
static void CreateLocalPath(CString &csPath); | |
virtual ~CReaderVCView(); | |
#ifdef _DEBUG | |
virtual void AssertValid() const; | |
virtual void Dump(CDumpContext& dc) const; | |
#endif | |
protected: | |
public: | |
void PageToDeviceImpl(FPDF_PAGE page,double page_x,double page_y, int* device_x, int* device_y); | |
void DeviceToPageImpl(FPDF_PAGE page,int device_x, int device_y, double* page_x, double* page_y); | |
void InvalidateImpl(FPDF_PAGE page, double left, double top, double right, double bottom); | |
void OutputSelectedRectImpl(FPDF_PAGE page, double left, double top, double right, double bottom); | |
void SetCaretImpl(FPDF_PAGE page,double page_x, double page_y, int nWidth, int nHeight); | |
void ReleaseImpl(); | |
int SetTimerImpl(int uElapse, TimerCallback lpTimerFunc); | |
void KillTimerImpl(int nID); | |
FPDF_SYSTEMTIME GetLocalTimeImpl(); | |
void SetCurorImpl(int nCursorType); | |
void ExecuteNamedActionImpl(FPDF_BYTESTRING namedaction); | |
void OnChangeImpl(); | |
bool IsSHIFTKeyDownImpl(); | |
bool IsCTRLKeyDownImpl(); | |
bool IsALTKeyDownImpl(); | |
bool IsINSERTKeyDownImpl(); | |
BOOL SubmitFormImpl(void* pBuffer, int nLength, CString strURL); | |
FPDF_PAGE GetPageImpl(FPDF_DOCUMENT document,int nPageIndex); | |
int GetRotationImpl(FPDF_PAGE page); | |
CString GetFilePath(); | |
FPDF_PAGE GetCurrentPageImpl(FPDF_DOCUMENT document); | |
// friend FPDF_DOCUMENT _FPDF_GetCurDocument(struct _FPDF_FORMFILLINFO* pThis); | |
// friend FPDF_PAGE _FPDF_GetCurPage(struct _FPDF_FORMFILLINFO* pThis); | |
private: | |
// FPDF_APP m_App; | |
// FPDF_FORMFILLINFO m_formFiledInfo; | |
private: | |
// FPDF_APP GetFPDFApp() {return m_App;} | |
unsigned int ComposeFlag(); | |
private: | |
CMap<int, int, FPDF_PAGE, FPDF_PAGE> m_pageMap; | |
FPDF_FORMHANDLE m_pApp; | |
FPDF_BITMAP m_bmp; | |
//for render pdf | |
FPDF_DOCUMENT m_pDoc; | |
FPDF_PAGE m_pPage; | |
int m_nTotalPage; | |
int m_nRotateFlag; | |
double m_dbScaleFactor; | |
int m_nPageIndex; | |
double m_dbPageWidth; | |
double m_dbPageHeight; | |
int m_nStartX; | |
int m_nStartY; | |
int m_nActualSizeX; | |
int m_nActualSizeY; | |
//for search text | |
FPDF_TEXTPAGE m_pTextPage; | |
FindInfo m_FindInfo; | |
FPDF_SCHHANDLE m_pSCHHandle; | |
PDFRect * m_rtFind; | |
int m_nRectNum; | |
//for select text | |
BOOL m_bSelect; | |
BOOL m_bHand; | |
BOOL m_bSnap; | |
BOOL m_bHasChar; //whether can get a char when left button be clicked | |
CPoint m_ptLBDown; | |
CPoint m_ptLBUp; | |
CPoint m_ptOld; | |
int m_nStartIndex; //char index | |
int m_nOldIndex; | |
int m_nEndIndex; | |
CArray <PDFRect, PDFRect> m_rtArray; | |
CRect m_rtOld; | |
// | |
int m_nPosH; | |
int m_nPosV; | |
// for links | |
FPDF_PAGELINK m_pLink; | |
BOOL m_bBookmark; | |
public: | |
wchar_t* m_pwsResponse; | |
private: | |
CArray<CRect, CRect&> m_SelectArray; | |
static CMap<int, int,TimerCallback, TimerCallback> m_mapTimerFuns; | |
public: | |
static void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime ) | |
{ | |
TimerCallback callback = NULL; | |
m_mapTimerFuns.Lookup(idEvent, callback); | |
if(callback) | |
(*callback)(idEvent); | |
} | |
// Generated message map functions | |
protected: | |
//{{AFX_MSG(CReaderVCView) | |
afx_msg void OnDocFirstpage(); | |
afx_msg void OnDocGotopage(); | |
afx_msg void OnDocLastpage(); | |
afx_msg void OnDocNextpage(); | |
afx_msg void OnDocPrepage(); | |
afx_msg void OnClockwise(); | |
afx_msg void OnCounterclockwise(); | |
afx_msg void OnViewActualSize(); | |
afx_msg void OnViewFitPage(); | |
afx_msg void OnViewFitWidth(); | |
afx_msg void OnViewZoomIn(); | |
afx_msg void OnViewZoomOut(); | |
afx_msg void OnViewZoomTo(); | |
afx_msg void OnEditFind(); | |
afx_msg void OnFilePrint(); | |
afx_msg void OnLButtonDown(UINT nFlags, CPoint point); | |
afx_msg void OnLButtonUp(UINT nFlags, CPoint point); | |
afx_msg void OnMouseMove(UINT nFlags, CPoint point); | |
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); | |
afx_msg void OnToolSnapshot(); | |
afx_msg void OnToolSelect(); | |
afx_msg void OnToolHand(); | |
afx_msg void OnToolPdf2txt(); | |
afx_msg void OnSize(UINT nType, int cx, int cy); | |
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); | |
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); | |
afx_msg void OnToolExtractlinks(); | |
afx_msg void OnDestroy(); | |
afx_msg void OnUpdateDocFirstpage(CCmdUI* pCmdUI); | |
afx_msg void OnUpdateDocLastpage(CCmdUI* pCmdUI); | |
afx_msg void OnUpdateDocNextpage(CCmdUI* pCmdUI); | |
afx_msg void OnUpdateDocPrepage(CCmdUI* pCmdUI); | |
afx_msg void OnUpdateToolHand(CCmdUI* pCmdUI); | |
afx_msg void OnUpdateToolSnapshot(CCmdUI* pCmdUI); | |
afx_msg void OnUpdateToolSelect(CCmdUI* pCmdUI); | |
afx_msg void OnViewBookmark(); | |
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); | |
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); | |
afx_msg void OnEditCopy(); | |
afx_msg void OnRenderbitmap(); | |
afx_msg void OnExportPdfToBitmap(); | |
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); | |
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); | |
afx_msg void OnFileSave(); | |
afx_msg void OnTestJS(); | |
afx_msg void OnPrintMetalfile(); | |
//}}AFX_MSG | |
DECLARE_MESSAGE_MAP() | |
}; | |
#ifndef _DEBUG // debug version in ReaderVCView.cpp | |
inline CReaderVCDoc* CReaderVCView::GetDocument() | |
{ return (CReaderVCDoc*)m_pDocument; } | |
#endif | |
///////////////////////////////////////////////////////////////////////////// | |
//{{AFX_INSERT_LOCATION}} | |
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. | |
#endif // !defined(AFX_READERVCVIEW_H__9AFC449C_26D0_4906_ABAE_1298871862E2__INCLUDED_) |