TView.h
上传用户:hmc_gdtv
上传日期:2013-08-04
资源大小:798k
文件大小:13k
源码类别:

Windows Mobile

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2001,2002,2003 Mike Matsnev.  All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice immediately at the beginning of the file, without modification,
  10.  *    this list of conditions, and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. Absolutely no warranty of function or purpose is made by the author
  15.  *    Mike Matsnev.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  * 
  28.  * $Id: TView.h,v 1.67.2.27 2005/06/18 19:38:42 mike Exp $
  29.  * 
  30.  */
  31. #if !defined(AFX_TVIEW_H__BF90ABF1_7A00_4E3D_8E68_A4B0C27E2A62__INCLUDED_)
  32. #define AFX_TVIEW_H__BF90ABF1_7A00_4E3D_8E68_A4B0C27E2A62__INCLUDED_
  33. #if _MSC_VER > 1000
  34. #pragma once
  35. #endif // _MSC_VER > 1000
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CTView window
  38. class CTView : public CWnd, public CRotate
  39. {
  40.   // Construction
  41. public:
  42.   CTView();
  43.   void SetFile(kilo::auto_ptr<TextFile> tfile);
  44.   bool SwitchToDict();
  45.   // Overrides
  46.   // ClassWizard generated virtual function overrides
  47.   //{{AFX_VIRTUAL(CTView)
  48.   public:
  49.   virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
  50.   protected:
  51.   virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  52.   //}}AFX_VIRTUAL
  53.   // Implementation
  54. public:
  55.   virtual ~CTView();
  56.   void   Init();
  57.   // painting aid
  58.   struct IGetLine {
  59.     virtual int   Length() = 0;
  60.     virtual const Line&   At(int pos) = 0;
  61.   };
  62. protected:
  63.   enum {
  64.     mLine=1,
  65.     mPage=2,
  66.     mFile=3,
  67.     mFwd=0,
  68.     mBack=1
  69.   };
  70.   // text appearence (font, margins)
  71.   struct xx_TextDisp {
  72.     int     fontsize;
  73.     bool     bold;
  74.     int     cleartype;
  75.     CString     fontface;
  76.     int     margin_width;
  77.     bool     justify;
  78.     bool     hyphenate;
  79.     int     angle;
  80.     xx_TextDisp() { LoadSettings(); }
  81.     void     SetFont(const CString& face,bool pbold,int size,int pct);
  82.     void     SaveSettings();
  83.     void     LoadSettings();
  84.     void     SetDefFont();
  85.   } m_TextDisp;
  86.   // window size, transforms
  87.   struct xx_Window {
  88.     int     width;
  89.     int     height;
  90.     int     rwidth;
  91.     int     rheight;
  92.     int     columns;
  93.     RECT     cli;
  94.     int     progress_height;
  95.     bool     showprog;
  96.     bool     progoverride;
  97.     bool     rotbuttons;
  98.     bool     autorepeatlimit;
  99.     DWORD     lastkeypress;
  100.     union {
  101.       struct {
  102. unsigned int  position:1;
  103. unsigned int  time:1;
  104. unsigned int  as_delay:1;
  105. unsigned int  battery:1;
  106. unsigned int  top:1;
  107. unsigned int  chapter:1;
  108.       };
  109.       unsigned int  flags;
  110.     } pb;
  111.     struct xx_PD {
  112.       int  pos;
  113.       int  total;
  114.       int  tm;
  115.       int  as;
  116.       int  bat;
  117.       int  top,cc;
  118.       CString title;
  119.     } pd;
  120.     int     pb_width;
  121.     UINT     pd_timer;
  122.     xx_Window() : width(1), progress_height(0), pb_width(0), pd_timer(0), rwidth(1), progoverride(true) { LoadSettings(); }
  123.     void     LoadSettings();
  124.     void     SaveSettings();
  125.     bool     showprogress() { return showprog && progoverride; }
  126.   } m_Window;
  127.   bool UpdateWindowPD();
  128.   void UpdateProgressBar();
  129.   void StartWindowPDTimer();
  130.   // history list
  131.   struct xx_History {
  132.     CList<FilePos,FilePos&> pstack;
  133.     POSITION     stacktop;
  134.     xx_History() : stacktop(NULL) { }
  135.     void Clear() { pstack.RemoveAll(); stacktop=NULL; }
  136.   } m_History;
  137.   struct xx_Selection {
  138.     FilePos     start;
  139.     int     len;
  140.     xx_Selection() : len(0) { }
  141.   } m_Sel;
  142.   // text searching
  143.   struct xx_Search {
  144.     FilePos     matchpos;
  145.     Buffer<wchar_t> searchstr;
  146.     bool     matchcase;
  147.     xx_Search() : matchcase(false) { }
  148.   } m_Search;
  149.   // mouse handler info
  150.   struct xx_Mouse {
  151.     CPoint     start,last,end;
  152.     bool     trackmouse;
  153.     bool     dmove;
  154.     xx_Mouse() {
  155.       start.x=start.y=end.x=end.y=0;
  156.       trackmouse=false;
  157.     }
  158.   } m_Mouse;
  159.   // dictionary state
  160.   struct xx_Dict {
  161.     Buffer<wchar_t> lastdictlookup;
  162.     bool     okstate;
  163.     CString     curdict;
  164.     kilo::auto_ptr<TextParser> curdictparser;
  165.     xx_Dict() : okstate(false) { }
  166.   } m_Dict;
  167.   // text input popup window state
  168.   struct xx_UI {
  169.     CString     inp;
  170.     bool     visible;
  171.     UINT     timer;
  172.     RECT     rc;
  173.     xx_UI() : visible(false), timer(0) { }
  174.   } m_UI;
  175.   // global update timer
  176.   UINT   m_timer;
  177.   // current bookmarks popup window
  178.   struct xx_BP: public IGetLine {
  179.     LineArray     lines;
  180.     RECT     rc;
  181.     Buffer<wchar_t> text;
  182.     bool     visible;
  183.     int     bmkidx;
  184.     xx_BP() : visible(false), bmkidx(-1) { }
  185.     int     Length() { return lines.GetSize(); }
  186.     const Line&     At(int i) { return lines[i]; }
  187.   } m_BP;
  188.   // autoscroll
  189.   struct xx_AS {
  190.     // currently shown and underlined line
  191.     int     column;
  192.     int     line;
  193.     int     delay; // per-line delay in microseconds
  194.     UINT     timer;
  195.     FilePos     top_pos;
  196.     xx_AS() : column(-1), line(-1), timer(0) { LoadSettings(); }
  197.     void  LoadSettings();
  198.     void  SaveSettings();
  199.   } m_AS;
  200.   // main formatter and text file
  201.   kilo::auto_ptr<TextFormatter> m_formatter;
  202.   kilo::auto_ptr<TextFile>   m_textfile;
  203.   void   PaintColumn(CFDC& dc,const RECT& update,
  204.       const RECT& rc,const RECT& cli,
  205.       IGetLine *lines,int margin,bool chkbmk);
  206.   void   PaintUserInput(CFDC& dc,const RECT& rc,const RECT& cli,
  207.  const Buffer<wchar_t>& text);
  208.   void   PaintProgressBar(CFDC& dc,const RECT& rc,const RECT& cli);
  209.   void   PaintBookmarkPopup(CFDC& dc,const RECT& rc,const RECT& cli);
  210.   void   PaintLine(CFDC& dc,const RECT& cli,RECT& line,int margin,const Line& l);
  211.   void   PaintSingleLine(int column,int line,COLORREF underline);
  212.   void   PaintSbItem(CFDC& dc,const wchar_t *text,int len,
  213.       const RECT& rc,const RECT& cli,int& pb_width);
  214.   void   RedrawProgressBar();
  215.   
  216.   void   Move(int dir,int amount);
  217.   void   PushPos();
  218.   void   MoveAbs(FilePos pos);
  219.   void   EnsureVisible(FilePos pos);
  220.   void   MovePercent(int p);
  221.   void   DoFind();
  222.   void   CalcSizes();
  223.   void   HandleMouseDown(CPoint point);
  224.   void   TrackMouse();
  225.   void   DisplaySelectionMenu(CPoint point);
  226.   bool   OpenDict(bool *changed=NULL);
  227.   void   InitDictName();
  228.   FilePos   CurFilePos();
  229.   
  230.   void   ComplexLine(CFDC& dc,const RECT& cli,RECT& line,
  231.     int x,const Line& l);
  232.   void   HighlightBookmarks(CFDC& dc,const RECT& cli,int left,
  233.      int y,int margin,const Line& l,
  234.      FilePos bmkstart,FilePos bmkend);
  235.   
  236.   void   InvalidateRect(const RECT& rc);
  237.   bool   LookupAddr(const POINT& pt,FilePos& p);
  238.   bool   LookupPoint(FilePos p,POINT& pt);
  239.   void   CalcSelection(FilePos& p,int& len);
  240.   bool   GetSelText(Buffer<wchar_t>& str);
  241.   void   SaveInfo();
  242.   void   ShowText();
  243.   void   HideText();
  244.   void   DisplayBookmarkPopup(const POINT& spot,const Buffer<wchar_t>& text);
  245.   void   DisplayBookmarkPopup(int index);
  246.   void   FormatBookmarkPopup(CFDC& dc,const POINT& spot);
  247.   void   HideBookmarkPopup();
  248.   void   QueueRepaint() { m_BP.visible=false; Invalidate(FALSE); }
  249.   void   QueueRepaint(const RECT& rc);
  250.   void   SetSelection(const FilePos& p,int len);
  251.   int   GetSelParagraphCount();
  252.   void   Advance(FilePos& p,int len);
  253.   void   InvalidateRange(const FilePos& p1,const FilePos& p2);
  254.   static void   CopyToClipboard(const wchar_t *text,int length,HWND hWnd);
  255.   bool   CanAddUIChar(TCHAR ch);
  256.   void   LookupText(Buffer<wchar_t> text);
  257.   COLORREF   v_C_BG();
  258.   // autoscroll support
  259.   void   StepAS();
  260.   void   RestartASTimer();
  261.   //{{AFX_MSG(CTView)
  262.   afx_msg void OnPaint();
  263.   afx_msg void OnSize(UINT nType, int cx, int cy);
  264.   afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  265.   afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  266.   afx_msg void OnAppAbout();
  267.   afx_msg void OnUpdateOptions(CCmdUI* pCmdUI);
  268.   afx_msg void OnOptions();
  269.   afx_msg void OnUpdateFileformat(CCmdUI* pCmdUI);
  270.   afx_msg void OnFileformat();
  271.   afx_msg void OnUpdateBack(CCmdUI* pCmdUI);
  272.   afx_msg void OnBack();
  273.   afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  274.   afx_msg void OnDictSetup();
  275.   afx_msg void OnUpdateDictSetup(CCmdUI* pCmdUI);
  276.   afx_msg void OnUpdateFind(CCmdUI* pCmdUI);
  277.   afx_msg void OnFind();
  278.   afx_msg void OnFindnext();
  279.   afx_msg void OnUpdateFindnext(CCmdUI* pCmdUI);
  280.   afx_msg void OnUpdateColors(CCmdUI* pCmdUI);
  281.   afx_msg void OnColors();
  282.   afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  283.   afx_msg void OnAddBmk();
  284.   afx_msg void OnUpdateAddBmk(CCmdUI* pCmdUI);
  285.   afx_msg void OnBookmarks();
  286.   afx_msg void OnUpdateBookmarks(CCmdUI* pCmdUI);
  287.   afx_msg void OnLineUp();
  288.   afx_msg void OnLineDown();
  289.   afx_msg void OnPageUp();
  290.   afx_msg void OnPageDown();
  291.   afx_msg void OnStartFile();
  292.   afx_msg void OnEndFile();
  293.   afx_msg void OnKeys();
  294.   afx_msg void OnUpdateKeys(CCmdUI* pCmdUI);
  295.   afx_msg void OnDestroy();
  296.   afx_msg void OnStyles();
  297.   afx_msg void OnUpdateStyles(CCmdUI* pCmdUI);
  298.   afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  299.   afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  300.   afx_msg void OnMiscopt();
  301.   afx_msg void OnUpdateMiscopt(CCmdUI* pCmdUI);
  302.   afx_msg void OnEditCopy();
  303.   afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
  304.   afx_msg void OnRotate();
  305.   afx_msg void OnTimer(UINT nIDEvent);
  306.   afx_msg void OnNextSection();
  307.   afx_msg void OnPrevSection();
  308.   afx_msg void OnNextBm();
  309.   afx_msg void OnPrevBm();
  310.   afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  311.   afx_msg void OnForward();
  312.   afx_msg void OnUpdateForward(CCmdUI* pCmdUI);
  313.   afx_msg void OnOK();
  314.   afx_msg void OnLookupSel();
  315.   afx_msg void OnKillFocus(CWnd* pNewWnd);
  316.   afx_msg void OnSetFocus(CWnd* pOldWnd);
  317.   afx_msg void StopAS();
  318.   afx_msg void StartAS();
  319.   afx_msg void FasterAS();
  320.   afx_msg void SlowerAS();
  321.   afx_msg void FasterASFine();
  322.   afx_msg void SlowerASFine();
  323.   afx_msg void ToggleAS();
  324.   afx_msg void OnTogglePB();
  325.   afx_msg void OnTogglePBChapter();
  326.   afx_msg void OnTogglePBPos();
  327.   afx_msg void OnTogglePBTop();
  328.   afx_msg void OnTogglePBAS();
  329.   afx_msg void OnTogglePBTime();
  330.   afx_msg void OnTogglePBBat();
  331.   afx_msg void OnUpdateTogglePB(CCmdUI* pCmdUI);
  332.   afx_msg void OnUpdateTogglePBChapter(CCmdUI *pCmdUI);
  333.   afx_msg void OnUpdateTogglePBPos(CCmdUI* pCmdUI);
  334.   afx_msg void OnUpdateTogglePBTop(CCmdUI* pCmdUI);
  335.   afx_msg void OnUpdateTogglePBAS(CCmdUI* pCmdUI);
  336.   afx_msg void OnUpdateTogglePBTime(CCmdUI* pCmdUI);
  337.   afx_msg void OnUpdateTogglePBBat(CCmdUI* pCmdUI);
  338.   afx_msg void OnExportBmk();
  339.   afx_msg void OnUpdateExportBmk(CCmdUI* pCmdUI);
  340.   afx_msg void OnNewColorProfile();
  341.   afx_msg void OnUpdateNewColorProfile(CCmdUI *pCmdUI);
  342.   afx_msg void OnDelColorProfile();
  343.   afx_msg void OnUpdateDelColorProfile(CCmdUI *pCmdUI);
  344.   afx_msg void OnNextColorProfile();
  345.   afx_msg void OnUpdateNextColorProfile(CCmdUI *pCmdUI);
  346.   //}}AFX_MSG
  347.   afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  348.   afx_msg LRESULT OnHotkey(WPARAM,LPARAM);
  349.   afx_msg void OnDict(UINT cmd);
  350.   afx_msg void OnUpdateDict(CCmdUI *pCmdUI);
  351.   afx_msg void OnSelColor(UINT cmd);
  352.   afx_msg void OnUpdateSelColor(CCmdUI *pCmdUI);
  353. #ifdef WM_POWERBROADCAST
  354.   afx_msg LRESULT OnPower(WPARAM wParam,LPARAM lParam) {
  355.     if (wParam == PBT_APMQUERYSUSPEND)
  356.       return m_AS.timer && m_hWnd == ::GetFocus() ? BROADCAST_QUERY_DENY : TRUE;
  357.     return TRUE;
  358.   }
  359. #endif
  360.   DECLARE_MESSAGE_MAP()
  361. };
  362. /////////////////////////////////////////////////////////////////////////////
  363. //{{AFX_INSERT_LOCATION}}
  364. // Microsoft eMbedded Visual C++ will insert additional declarations immediately before the previous line.
  365. #endif // !defined(AFX_TVIEW_H__BF90ABF1_7A00_4E3D_8E68_A4B0C27E2A62__INCLUDED_)