OUTLINE.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:34k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*************************************************************************
  2. **
  3. **    OLE 2 Sample Code
  4. **
  5. **    outline.h
  6. **
  7. **    This file contains file contains data structure defintions,
  8. **    function prototypes, constants, etc. used by the Outline series
  9. **    of sample applications:
  10. **          Outline  -- base version of the app (without OLE functionality)
  11. **          SvrOutl  -- OLE 2.0 Server sample app
  12. **          CntrOutl -- OLE 2.0 Containter (Container) sample app
  13. **          ISvrOtl  -- OLE 2.0 Server sample app
  14. **          CntrOutl -- OLE 2.0 Containter (Container) sample app
  15. **
  16. **    (c) Copyright Microsoft Corp. 1992 - 1996 All Rights Reserved
  17. **
  18. **    For structures which we read from and write to disk we define shadow
  19. **    structures (with the _ONDISK suffix) that allow us to maintain
  20. **    16-bit Windows and Macintosh compatibility.
  21. **
  22. *************************************************************************/
  23. #if !defined( _OUTLINE_H_ )
  24. #define _OUTLINE_H_
  25. #if !defined( RC_INVOKED )
  26. #pragma message ("INCLUDING OUTLINE.H from " __FILE__)
  27. #endif  /* RC_INVOKED */
  28. // use strict ANSI standard (for DVOBJ.H)
  29. #define NONAMELESSUNION
  30. // use system defined bitmap, this line must go before windows.h
  31. #define OEMRESOURCE
  32. #ifdef WIN32
  33. #define EXPORT
  34. #define _fstrchr strchr
  35. #else
  36. #define EXPORT _export
  37. #endif
  38. #define SDI_VERSION         1   // ONLY SDI version is currently supported
  39. #if defined( OLE_SERVER ) || defined( OLE_CNTR )
  40. #define OLE_VERSION         1
  41. #define USE_DRAGDROP        1   // enable drag/drop code in OLE versions
  42. #define USE_MSGFILTER       1   // enable IMessageFilter implementation
  43. #endif
  44. #define USE_HEADING         1   // enable the row/col headings
  45. #define USE_STATUSBAR       1   // enable status bar window
  46. #define USE_FRAMETOOLS      1   // enable the toolbar
  47. #ifndef WIN32   //BUGBUG32
  48. #define USE_CTL3D           1   // enable 3D looking dialogs
  49. #endif
  50. #define STRICT  1
  51. #include <windows.h>
  52. #include <string.h>
  53. #include <commdlg.h>
  54. #include <ole2.h>
  55. #include <olestd.h>
  56. #include "outlrc.h"
  57. #define APPMAJORVERSIONNO   3   // major no. incremented for major releases
  58.                         //  (eg. when an incompatible change is made
  59.                         //  to the storage format)
  60. #define APPMINORVERSIONNO   5   // minor no. incremented for minor releases
  61. /* Definition of SCALEFACTOR */
  62. typedef struct tagSCALEFACTOR {
  63.    ULONG       dwSxN;      // numerator in x direction
  64.    ULONG       dwSxD;      // denominator in x direction
  65.    ULONG       dwSyN;      // numerator in y direction
  66.    ULONG       dwSyD;      // denominator in y direction
  67. } SCALEFACTOR, FAR* LPSCALEFACTOR;
  68. #if defined( USE_FRAMETOOLS )
  69. #include "frametls.h"
  70. #endif
  71. #if defined( USE_HEADING )
  72. #include "heading.h"
  73. #endif
  74. /* max line height (in pixels) allowed in a listbox */
  75. #define LISTBOX_HEIGHT_LIMIT    255
  76. #define MAXSTRLEN   80      // max string len in bytes
  77. #define MAXNAMESIZE 30      // max length of names
  78. #define MAXFORMATSIZE   10  // max length of DEFDOCFORMAT (actually size is 5)
  79. #define TABWIDTH        2000 // 2000 in Himetric units, i.e. 2cm
  80. #define DEFFONTPTSIZE   12
  81. #define DEFFONTSIZE     ((DEFFONTPTSIZE*HIMETRIC_PER_INCH)/PTS_PER_INCH)
  82. #define DEFFONTFACE     "Times New Roman"
  83. #ifdef WIN32S
  84. #define OUTLINEDOCFORMAT    OLESTR("Outline32")     // CF_Outline format name
  85. #else
  86. #define OUTLINEDOCFORMAT    OLESTR("Outline")       // CF_Outline format name
  87. #endif
  88. #define IS_FILENAME_DELIM(c)    ( (c) == '\' || (c) == '/' || (c) == ':' )
  89. // REVIEW: some of these strings should be loaded from a resource file
  90. #define UNTITLED    OLESTR("Outline")   // title used for untitled document
  91. #define HITTESTDELTA    5
  92. /* Macro to get a random integer within a specified range */
  93. #define getrandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
  94. // REVIEW: should load strings from string resource file
  95. #ifdef TEST32
  96. #define APPFILENAMEFILTER   "Outline Files (*.OLT)|*.olt|All files (*.*)|*.*|"
  97. #define DEFEXTENSION    "olt"           // Default file extension
  98. #else
  99. #define APPFILENAMEFILTER   "Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
  100. #define DEFEXTENSION    "oln"           // Default file extension
  101. #endif //TEST32
  102. /* forward type references */
  103. typedef struct tagOUTLINEDOC FAR* LPOUTLINEDOC;
  104. typedef struct tagTEXTLINE FAR* LPTEXTLINE;
  105. typedef enum tagLINETYPE {
  106.    UNKNOWNLINETYPE,
  107.    TEXTLINETYPE,
  108.    CONTAINERLINETYPE
  109. } LINETYPE;
  110. /*************************************************************************
  111. ** class LINE
  112. **    The class LINE is an abstract base class. Instances of class LINE
  113. **    are NOT created; only instances of the concrete subclasses of
  114. **    LINE can be created. In the base app version and the OLE 2.0
  115. **    server-only version only TEXTLINE objects can be created. In the
  116. **    OLE 2.0 client app version either TEXTLINE objects or CONTAINERLINE
  117. **    objects can be created. The LINE class has all fields and methods
  118. **    that are common independent of which subclass of LINE is used.
  119. **    Each LINE object that is created in added to the LINELIST of the
  120. **    OUTLINEDOC document.
  121. *************************************************************************/
  122. typedef struct tagLINE {
  123.    LINETYPE    m_lineType;
  124.    UINT        m_nTabLevel;
  125.    UINT        m_nTabWidthInHimetric;
  126.    UINT        m_nWidthInHimetric;
  127.    UINT        m_nHeightInHimetric;
  128.    BOOL        m_fSelected;        // does line have selection feedback
  129. #if defined( USE_DRAGDROP )
  130.    BOOL        m_fDragOverLine;    // does line have drop target feedback
  131. #endif
  132. } LINE, FAR* LPLINE;
  133. /* Line methods (functions) */
  134. void Line_Init(LPLINE lpLine, int nTab, HDC hDC);
  135. void Line_Delete(LPLINE lpLine);
  136. BOOL Line_CopyToDoc(LPLINE lpSrcLine, LPOUTLINEDOC lpDestDoc, int nIndex);
  137. BOOL Line_Edit(LPLINE lpLine, HWND hWndDoc, HDC hDC);
  138. void Line_Draw(
  139.       LPLINE      lpLine,
  140.       HDC         hDC,
  141.       LPRECT      lpRect,
  142.       LPRECT      lpRectWBounds,
  143.       BOOL        fHighlight
  144. );
  145. void Line_DrawToScreen(
  146.       LPLINE      lpLine,
  147.       HDC         hDC,
  148.       LPRECT      lprcPix,
  149.       UINT        itemAction,
  150.       UINT        itemState,
  151.       LPRECT      lprcDevice
  152. );
  153. void Line_DrawSelHilight(LPLINE lpLine, HDC hDC, LPRECT lpRect, UINT itemAction, UINT itemState);
  154. void Line_DrawFocusRect(LPLINE lpLine, HDC hDC, LPRECT lpRect, UINT itemAction, UINT itemState);
  155. void Line_Unindent(LPLINE lpLine, HDC hDC);
  156. void Line_Indent(LPLINE lpLine, HDC hDC);
  157. LINETYPE Line_GetLineType(LPLINE lpLine);
  158. UINT Line_GetTotalWidthInHimetric(LPLINE lpLine);
  159. void Line_SetWidthInHimetric(LPLINE lpLine, int nWidth);
  160. UINT Line_GetWidthInHimetric(LPLINE lpLine);
  161. UINT Line_GetHeightInHimetric(LPLINE lpLine);
  162. void Line_SetHeightInHimetric(LPLINE lpLine, int nHeight);
  163. UINT Line_GetTabLevel(LPLINE lpLine);
  164. int Line_GetTextLen(LPLINE lpLine);
  165. void Line_GetTextData(LPLINE lpLine, LPOLESTR lpszBuf);
  166. BOOL Line_GetOutlineData(LPLINE lpLine, LPTEXTLINE lpBuf);
  167. int Line_CalcTabWidthInHimetric(LPLINE lpLine, HDC hDC);
  168. BOOL Line_SaveToStg(LPLINE lpLine, UINT uFormat, LPSTORAGE lpSrcStg, LPSTORAGE lpDestStg, LPSTREAM lpLLStm, BOOL fRemember);
  169. LPLINE Line_LoadFromStg(LPSTORAGE lpSrcStg, LPSTREAM lpLLStm, LPOUTLINEDOC lpDestDoc);
  170. void Line_DrawDragFeedback(LPLINE lpLine, HDC hDC, LPRECT lpRect, UINT itemState );
  171. BOOL Line_IsSelected(LPLINE lpLine);
  172. /*************************************************************************
  173. ** class TEXTLINE : LINE
  174. **    The class TEXTLINE is a concrete subclass of the abstract base
  175. **    class LINE. The TEXTLINE class holds a string that can be edited
  176. **    by the user. In the base app version and the OLE 2.0
  177. **    server-only version only TEXTLINE objects can be created. In the
  178. **    OLE 2.0 client app version either TEXTLINE objects or CONTAINERLINE
  179. **    objects can be created. The TEXTLINE class inherits all fields
  180. **    from the LINE class. This inheritance is achieved by including a
  181. **    member variable of type LINE as the first field in the TEXTLINE
  182. **    structure. Thus a pointer to a TEXTLINE object can be cast to be
  183. **    a pointer to a LINE object.
  184. **    Each TEXTLINE object that is created in added to the LINELIST of
  185. **    the associated OUTLINEDOC document.
  186. *************************************************************************/
  187. typedef struct tagTEXTLINE {
  188.    LINE m_Line;        // TextLine inherits all fields of Line
  189.    UINT m_nLength;
  190.    char m_szText[MAXSTRLEN+1];
  191. } TEXTLINE;
  192. LPTEXTLINE TextLine_Create(HDC hDC, UINT nTab, LPSTR szText);
  193. void TextLine_Init(LPTEXTLINE lpTextLine, int nTab, HDC hDC);
  194. void TextLine_CalcExtents(LPTEXTLINE lpLine, HDC hDC);
  195. void TextLine_SetHeightInHimetric(LPTEXTLINE lpTextLine, int nHeight);
  196. void TextLine_Delete(LPTEXTLINE lpLine);
  197. BOOL TextLine_Edit(LPTEXTLINE lpLine, HWND hWndDoc, HDC hDC);
  198. void TextLine_Draw(
  199.       LPTEXTLINE  lpTextLine,
  200.       HDC         hDC,
  201.       LPRECT      lpRect,
  202.       LPRECT      lpRectWBounds,
  203.       BOOL        fHighlight
  204. );
  205. void TextLine_DrawSelHilight(LPTEXTLINE lpTextLine, HDC hDC, LPRECT lpRect, UINT itemAction, UINT itemState);
  206. BOOL TextLine_Copy(LPTEXTLINE lpSrcLine, LPTEXTLINE lpDestLine);
  207. BOOL TextLine_CopyToDoc(LPTEXTLINE lpSrcLine, LPOUTLINEDOC lpDestDoc, int nIndex);
  208. int TextLine_GetTextLen(LPTEXTLINE lpTextLine);
  209. void TextLine_GetTextData(LPTEXTLINE lpTextLine, LPSTR lpszBuf);
  210. BOOL TextLine_GetOutlineData(LPTEXTLINE lpTextLine, LPTEXTLINE lpBuf);
  211. BOOL TextLine_SaveToStm(LPTEXTLINE lpLine, LPSTREAM lpLLStm);
  212. LPLINE TextLine_LoadFromStg(LPSTORAGE lpSrcStg, LPSTREAM lpLLStm, LPOUTLINEDOC lpDestDoc);
  213. /*************************************************************************
  214. ** class LINERANGE
  215. **    The class LINERANGE is a supporting object used to describe a
  216. **    particular range in an OUTLINEDOC. A range is defined by a starting
  217. **    line index and an ending line index.
  218. *************************************************************************/
  219. typedef struct tagLINERANGE {
  220.    signed short    m_nStartLine;
  221.    signed short    m_nEndLine;
  222. } LINERANGE, FAR* LPLINERANGE;
  223. /*************************************************************************
  224. ** class OUTLINENAME
  225. **    The class OUTLINENAME stores a particular named selection in the
  226. **    OUTLINEDOC document. The NAMETABLE class holds all of the names
  227. **    defined in a particular OUTLINEDOC document. Each OUTLINENAME
  228. **    object has a string as its key and a starting line index and an
  229. **    ending line index for the named range.
  230. *************************************************************************/
  231. typedef struct tagOUTLINENAME {
  232.    OLECHAR         m_szName[MAXNAMESIZE+1];
  233.    signed short    m_nStartLine;  // must be signed for table update
  234.    signed short    m_nEndLine;    // functions to work
  235. } OUTLINENAME, FAR* LPOUTLINENAME;
  236. void OutlineName_SetName(LPOUTLINENAME lpOutlineName, LPOLESTR lpszName);
  237. void OutlineName_SetSel(LPOUTLINENAME lpOutlineName, LPLINERANGE lplrSel, BOOL fRangeModified);
  238. void OutlineName_GetSel(LPOUTLINENAME lpOutlineName, LPLINERANGE lplrSel);
  239. BOOL OutlineName_SaveToStg(LPOUTLINENAME lpOutlineName, LPLINERANGE lplrSel, UINT uFormat, LPSTREAM lpNTStm, BOOL FAR* lpfNameSaved);
  240. BOOL OutlineName_SaveToStg(LPOUTLINENAME lpOutlineName, LPLINERANGE lplrSel, UINT uFormat, LPSTREAM lpNTStm, BOOL FAR* lpfNameSaved);
  241. BOOL OutlineName_LoadFromStg(LPOUTLINENAME lpOutlineName, LPSTREAM lpNTStm);
  242. /*************************************************************************
  243. ** class OUTLINENAMETABLE
  244. **    OUTLINENAMETABLE manages the table of named selections in the
  245. **    OUTLINEDOC document. Each OUTLINENAMETABLE entry has a string as its key
  246. **    and a starting line index and an ending line index for the
  247. **    named range. There is always one instance of OUTLINENAMETABLE for each
  248. **    OUTLINEDOC created.
  249. *************************************************************************/
  250. typedef struct tagOUTLINENAMETABLE {
  251.    HWND        m_hWndListBox;
  252.    int         m_nCount;
  253. } OUTLINENAMETABLE, FAR* LPOUTLINENAMETABLE;
  254. /* OutlineNameTable methods (functions) */
  255. BOOL OutlineNameTable_Init(LPOUTLINENAMETABLE lpOutlineNameTable, LPOUTLINEDOC lpOutlineDoc);
  256. void OutlineNameTable_Destroy(LPOUTLINENAMETABLE lpOutlineNameTable);
  257. void OutlineNameTable_ClearAll(LPOUTLINENAMETABLE lpOutlineNameTable);
  258. LPOUTLINENAME OutlineNameTable_CreateName(LPOUTLINENAMETABLE lpOutlineNameTable);
  259. void OutlineNameTable_AddName(LPOUTLINENAMETABLE lpOutlineNameTable, LPOUTLINENAME lpOutlineName);
  260. void OutlineNameTable_DeleteName(LPOUTLINENAMETABLE lpOutlineNameTable, int nIndex);
  261. int OutlineNameTable_GetNameIndex(LPOUTLINENAMETABLE lpOutlineNameTable, LPOUTLINENAME lpOutlineName);
  262. LPOUTLINENAME OutlineNameTable_GetName(LPOUTLINENAMETABLE lpOutlineNameTable, int nIndex);
  263. LPOUTLINENAME OutlineNameTable_FindName(LPOUTLINENAMETABLE lpOutlineNameTable, LPOLESTR lpszName);
  264. LPOUTLINENAME OutlineNameTable_FindNamedRange(LPOUTLINENAMETABLE lpOutlineNameTable, LPLINERANGE lplrSel);
  265. int OutlineNameTable_GetCount(LPOUTLINENAMETABLE lpOutlineNameTable);
  266. void OutlineNameTable_AddLineUpdate(LPOUTLINENAMETABLE lpOutlineNameTable, int nAddIndex);
  267. void OutlineNameTable_DeleteLineUpdate(LPOUTLINENAMETABLE lpOutlineNameTable, int nDeleteIndex);
  268. BOOL OutlineNameTable_LoadFromStg(LPOUTLINENAMETABLE lpOutlineNameTable, LPSTORAGE lpSrcStg);
  269. BOOL OutlineNameTable_SaveSelToStg(
  270.       LPOUTLINENAMETABLE      lpOutlineNameTable,
  271.       LPLINERANGE             lplrSel,
  272.       UINT                    uFormat,
  273.       LPSTREAM                lpNTStm
  274. );
  275. /*************************************************************************
  276. ** class LINELIST
  277. **    The class LINELIST manages the list of Line objects in the
  278. **    OUTLINEDOC document. This class uses a Window's Owner-draw ListBox
  279. **    to hold the list of LINE objects. There is always one instance of
  280. **    LINELIST for each OUTLINEDOC created.
  281. *************************************************************************/
  282. typedef struct tagLINELIST {
  283.    HWND            m_hWndListBox;  // hWnd of OwnerDraw listbox
  284.    int             m_nNumLines;        // number of lines in LineList
  285.    int             m_nMaxLineWidthInHimetric;  // max width of listbox
  286.    LPOUTLINEDOC    m_lpDoc;        // ptr to associated OutlineDoc
  287.    LINERANGE       m_lrSaveSel;    // selection saved on WM_KILLFOCUS
  288. #if defined( USE_DRAGDROP )
  289.    int             m_iDragOverLine;    // line index w/ drop target feedback
  290. #endif
  291. } LINELIST, FAR* LPLINELIST;
  292. /* LineList methods (functions) */
  293. BOOL LineList_Init(LPLINELIST lpLL, LPOUTLINEDOC lpOutlineDoc);
  294. void LineList_Destroy(LPLINELIST lpLL);
  295. void LineList_AddLine(LPLINELIST lpLL, LPLINE lpLine, int nIndex);
  296. void LineList_DeleteLine(LPLINELIST lpLL, int nIndex);
  297. void LineList_ReplaceLine(LPLINELIST lpLL, LPLINE lpLine, int nIndex);
  298. int LineList_GetLineIndex(LPLINELIST lpLL, LPLINE lpLine);
  299. LPLINE LineList_GetLine(LPLINELIST lpLL, int nIndex);
  300. void LineList_SetFocusLine ( LPLINELIST lpLL, WORD wIndex );
  301. BOOL LineList_GetLineRect(LPLINELIST lpLL, int nIndex, LPRECT lpRect);
  302. int LineList_GetFocusLineIndex(LPLINELIST lpLL);
  303. int LineList_GetCount(LPLINELIST lpLL);
  304. BOOL LineList_SetMaxLineWidthInHimetric(
  305.       LPLINELIST lpLL,
  306.       int nWidthInHimetric
  307. );
  308. void LineList_ScrollLineIntoView(LPLINELIST lpLL, int nIndex);
  309. int LineList_GetMaxLineWidthInHimetric(LPLINELIST lpLL);
  310. BOOL LineList_RecalcMaxLineWidthInHimetric(
  311.       LPLINELIST          lpLL,
  312.       int                 nWidthInHimetric
  313. );
  314. void LineList_CalcSelExtentInHimetric(
  315.       LPLINELIST          lpLL,
  316.       LPLINERANGE         lplrSel,
  317.       LPSIZEL             lpsizel
  318. );
  319. HWND LineList_GetWindow(LPLINELIST lpLL);
  320. HDC LineList_GetDC(LPLINELIST lpLL);
  321. void LineList_ReleaseDC(LPLINELIST lpLL, HDC hDC);
  322. void LineList_SetLineHeight(LPLINELIST lpLL,int nIndex,int nHeightInHimetric);
  323. void LineList_ReScale(LPLINELIST lpLL, LPSCALEFACTOR lpscale);
  324. void LineList_SetSel(LPLINELIST lpLL, LPLINERANGE lplrSel);
  325. int LineList_GetSel(LPLINELIST lpLL, LPLINERANGE lplrSel);
  326. void LineList_RemoveSel(LPLINELIST lpLL);
  327. void LineList_RestoreSel(LPLINELIST lpLL);
  328. void LineList_SetRedraw(LPLINELIST lpLL, BOOL fEnableDraw);
  329. void LineList_ForceRedraw(LPLINELIST lpLL, BOOL fErase);
  330. void LineList_ForceLineRedraw(LPLINELIST lpLL, int nIndex, BOOL fErase);
  331. int LineList_CopySelToDoc(
  332.       LPLINELIST              lpSrcLL,
  333.       LPLINERANGE             lplrSel,
  334.       LPOUTLINEDOC            lpDestDoc
  335. );
  336. BOOL LineList_SaveSelToStg(
  337.       LPLINELIST              lpLL,
  338.       LPLINERANGE             lplrSel,
  339.       UINT                    uFormat,
  340.       LPSTORAGE               lpSrcStg,
  341.       LPSTORAGE               lpDestStg,
  342.       LPSTREAM                lpLLStm,
  343.       BOOL                    fRemember
  344. );
  345. BOOL LineList_LoadFromStg(
  346.       LPLINELIST              lpLL,
  347.       LPSTORAGE               lpSrcStg,
  348.       LPSTREAM                lpLLStm
  349. );
  350. #if defined( USE_DRAGDROP )
  351. void LineList_SetFocusLineFromPointl( LPLINELIST lpLL, POINTL pointl );
  352. void LineList_SetDragOverLineFromPointl ( LPLINELIST lpLL, POINTL pointl );
  353. void LineList_Scroll(LPLINELIST lpLL, DWORD dwScrollDir);
  354. int LineList_GetLineIndexFromPointl(LPLINELIST lpLL, POINTL pointl);
  355. void LineList_RestoreDragFeedback(LPLINELIST lpLL);
  356. #endif
  357. LRESULT FAR PASCAL LineListWndProc(
  358.    HWND   hWnd,
  359.    UINT   Message,
  360.    WPARAM wParam,
  361.    LPARAM lParam
  362. );
  363. // Document initialization type
  364. #define DOCTYPE_UNKNOWN     0   // new doc created but not yet initialized
  365. #define DOCTYPE_NEW         1   // init from scratch (new doc)
  366. #define DOCTYPE_FROMFILE    2   // init from a file (open doc)
  367. /*************************************************************************
  368. ** class OUTLINEDOC
  369. **    There is one instance of the OutlineDoc class created per
  370. **    document open in the app. The SDI version of the app supports one
  371. **    OUTLINEDOC at a time. The MDI version of the app can manage
  372. **    multiple documents at one time.
  373. *************************************************************************/
  374. /* Definition of OUTLINEDOC */
  375. typedef struct tagOUTLINEDOC {
  376.    LINELIST    m_LineList;         // list of lines in the doc
  377.    LPOUTLINENAMETABLE m_lpNameTable;   // table of names in the doc
  378.    HWND        m_hWndDoc;          // client area window for the Doc
  379.    int         m_docInitType;      // is doc new or loaded from a file?
  380.    BOOL        m_fDataTransferDoc; // is doc created for copy | drag/drop
  381.    CLIPFORMAT  m_cfSaveFormat;      // format used to save the doc
  382.    OLECHAR     m_szFileName[256];  // associated file; "(Untitled)" if none
  383.    LPOLESTR    m_lpszDocTitle;     // name of doc to appear in window title
  384.    BOOL        m_fModified;        // is the doc dirty (needs to be saved)?
  385.    UINT        m_nDisableDraw;     // enable/disable updating the display
  386.    SCALEFACTOR m_scale;            // current scale factor of the doc
  387.    int         m_nLeftMargin;      // left margin in Himetric
  388.    int         m_nRightMargin;     // right margin in Himetric
  389.    UINT        m_uCurrentZoom;     // cur. zoom (used for menu checking)
  390.    UINT        m_uCurrentMargin;   // cur. margin (used for menu checking)
  391. #if defined( USE_HEADING )
  392.    HEADING     m_heading;
  393. #endif
  394. #if defined( USE_FRAMETOOLS )
  395.    LPFRAMETOOLS m_lpFrameTools;    // ptr to frame tools used by this doc
  396. #endif
  397. } OUTLINEDOC;
  398. /* OutlineDoc methods (functions) */
  399. BOOL OutlineDoc_Init(LPOUTLINEDOC lpOutlineDoc, BOOL fDataTransferDoc);
  400. BOOL OutlineDoc_InitNewFile(LPOUTLINEDOC lpOutlineDoc);
  401. LPOUTLINENAMETABLE OutlineDoc_CreateNameTable(LPOUTLINEDOC lpOutlineDoc);
  402. void OutlineDoc_Destroy(LPOUTLINEDOC lpOutlineDoc);
  403. BOOL OutlineDoc_Close(LPOUTLINEDOC lpOutlineDoc, DWORD dwSaveOption);
  404. void OutlineDoc_ShowWindow(LPOUTLINEDOC lpOutlineDoc);
  405. void OutlineDoc_FrameWindowResized(
  406.       LPOUTLINEDOC        lpOutlineDoc,
  407.       LPRECT              lprcFrameRect,
  408.       LPBORDERWIDTHS      lpFrameToolWidths
  409. );
  410. void OutlineDoc_ClearCommand(LPOUTLINEDOC lpOutlineDoc);
  411. void OutlineDoc_CutCommand(LPOUTLINEDOC lpOutlineDoc);
  412. void OutlineDoc_CopyCommand(LPOUTLINEDOC lpOutlineDoc);
  413. void OutlineDoc_ClearAllLines(LPOUTLINEDOC lpOutlineDoc);
  414. LPOUTLINEDOC OutlineDoc_CreateDataTransferDoc(LPOUTLINEDOC lpSrcOutlineDoc);
  415. void OutlineDoc_PasteCommand(LPOUTLINEDOC lpOutlineDoc);
  416. int OutlineDoc_PasteOutlineData(LPOUTLINEDOC lpOutlineDoc, HGLOBAL hOutline, int nStartIndex);
  417. int OutlineDoc_PasteTextData(LPOUTLINEDOC lpOutlineDoc, HGLOBAL hText, int nStartIndex);
  418. void OutlineDoc_AddTextLineCommand(LPOUTLINEDOC lpOutlineDoc);
  419. void OutlineDoc_AddTopLineCommand(
  420.       LPOUTLINEDOC        lpOutlineDoc,
  421.       UINT                nHeightInHimetric
  422. );
  423. void OutlineDoc_EditLineCommand(LPOUTLINEDOC lpOutlineDoc);
  424. void OutlineDoc_IndentCommand(LPOUTLINEDOC lpOutlineDoc);
  425. void OutlineDoc_UnindentCommand(LPOUTLINEDOC lpOutlineDoc);
  426. void OutlineDoc_SetLineHeightCommand(LPOUTLINEDOC lpDoc);
  427. void OutlineDoc_SelectAllCommand(LPOUTLINEDOC lpOutlineDoc);
  428. void OutlineDoc_DefineNameCommand(LPOUTLINEDOC lpOutlineDoc);
  429. void OutlineDoc_GotoNameCommand(LPOUTLINEDOC lpOutlineDoc);
  430. void OutlineDoc_Print(LPOUTLINEDOC lpOutlineDoc, HDC hDC);
  431. BOOL OutlineDoc_SaveToFile(LPOUTLINEDOC lpOutlineDoc, LPCOLESTR lpszFileName, UINT uFormat, BOOL fRemember);
  432. void OutlineDoc_AddLine(LPOUTLINEDOC lpOutlineDoc, LPLINE lpLine, int nIndex);
  433. void OutlineDoc_DeleteLine(LPOUTLINEDOC lpOutlineDoc, int nIndex);
  434. void OutlineDoc_AddName(LPOUTLINEDOC lpOutlineDoc, LPOUTLINENAME lpOutlineName);
  435. void OutlineDoc_DeleteName(LPOUTLINEDOC lpOutlineDoc, int nIndex);
  436. void OutlineDoc_Resize(LPOUTLINEDOC lpDoc, LPRECT lpRect);
  437. LPOUTLINENAMETABLE OutlineDoc_GetNameTable(LPOUTLINEDOC lpOutlineDoc);
  438. LPLINELIST OutlineDoc_GetLineList(LPOUTLINEDOC lpOutlineDoc);
  439. int OutlineDoc_GetNameCount(LPOUTLINEDOC lpOutlineDoc);
  440. int OutlineDoc_GetLineCount(LPOUTLINEDOC lpOutlineDoc);
  441. void OutlineDoc_SetTitle(LPOUTLINEDOC lpOutlineDoc, BOOL fMakeUpperCase);
  442. BOOL OutlineDoc_CheckSaveChanges(
  443.       LPOUTLINEDOC        lpOutlineDoc,
  444.       LPDWORD             lpdwSaveOption
  445. );
  446. BOOL OutlineDoc_IsModified(LPOUTLINEDOC lpOutlineDoc);
  447. void OutlineDoc_SetModified(LPOUTLINEDOC lpOutlineDoc, BOOL fModified, BOOL fDataChanged, BOOL fSizeChanged);
  448. void OutlineDoc_SetRedraw(LPOUTLINEDOC lpOutlineDoc, BOOL fEnableDraw);
  449. BOOL OutlineDoc_LoadFromFile(LPOUTLINEDOC lpOutlineDoc, LPOLESTR szFileName);
  450. BOOL OutlineDoc_SaveSelToStg(
  451.       LPOUTLINEDOC        lpOutlineDoc,
  452.       LPLINERANGE         lplrSel,
  453.       UINT                uFormat,
  454.       LPSTORAGE           lpDestStg,
  455.       BOOL                fSameAsLoad,
  456.       BOOL                fRemember
  457. );
  458. BOOL OutlineDoc_LoadFromStg(LPOUTLINEDOC lpOutlineDoc, LPSTORAGE lpSrcStg);
  459. BOOL OutlineDoc_SetFileName(LPOUTLINEDOC lpOutlineDoc, LPOLESTR lpszFileName, LPSTORAGE lpNewStg);
  460. HWND OutlineDoc_GetWindow(LPOUTLINEDOC lpOutlineDoc);
  461. void OutlineDoc_SetSel(LPOUTLINEDOC lpOutlineDoc, LPLINERANGE lplrSel);
  462. int OutlineDoc_GetSel(LPOUTLINEDOC lpOutlineDoc, LPLINERANGE lplrSel);
  463. void OutlineDoc_ForceRedraw(LPOUTLINEDOC lpOutlineDoc, BOOL fErase);
  464. void OutlineDoc_RenderFormat(LPOUTLINEDOC lpOutlineDoc, UINT uFormat);
  465. void OutlineDoc_RenderAllFormats(LPOUTLINEDOC lpOutlineDoc);
  466. HGLOBAL OutlineDoc_GetOutlineData(LPOUTLINEDOC lpOutlineDoc, LPLINERANGE lplrSel);
  467. HGLOBAL OutlineDoc_GetTextData(LPOUTLINEDOC lpOutlineDoc, LPLINERANGE lplrSel);
  468. void OutlineDoc_DialogHelp(HWND hDlg, WPARAM wDlgID);
  469. void OutlineDoc_SetCurrentZoomCommand(
  470.       LPOUTLINEDOC        lpOutlineDoc,
  471.       UINT                uCurrentZoom
  472. );
  473. UINT OutlineDoc_GetCurrentZoomMenuCheck(LPOUTLINEDOC lpOutlineDoc);
  474. void OutlineDoc_SetScaleFactor(
  475.       LPOUTLINEDOC        lpOutlineDoc,
  476.       LPSCALEFACTOR       lpscale,
  477.       LPRECT              lprcDoc
  478. );
  479. LPSCALEFACTOR OutlineDoc_GetScaleFactor(LPOUTLINEDOC lpDoc);
  480. void OutlineDoc_SetCurrentMarginCommand(
  481.       LPOUTLINEDOC        lpOutlineDoc,
  482.       UINT                uCurrentMargin
  483. );
  484. UINT OutlineDoc_GetCurrentMarginMenuCheck(LPOUTLINEDOC lpOutlineDoc);
  485. void OutlineDoc_SetMargin(LPOUTLINEDOC lpDoc, int nLeftMargin, int nRightMargin);
  486. LONG OutlineDoc_GetMargin(LPOUTLINEDOC lpDoc);
  487. #if defined( USE_FRAMETOOLS )
  488. void OutlineDoc_AddFrameLevelTools(LPOUTLINEDOC lpOutlineDoc);
  489. void OutlineDoc_SetFormulaBarEditText(
  490.       LPOUTLINEDOC            lpOutlineDoc,
  491.       LPLINE                  lpLine
  492. );
  493. void OutlineDoc_SetFormulaBarEditFocus(
  494.       LPOUTLINEDOC            lpOutlineDoc,
  495.       BOOL                    fEditFocus
  496. );
  497. BOOL OutlineDoc_IsEditFocusInFormulaBar(LPOUTLINEDOC lpOutlineDoc);
  498. void OutlineDoc_UpdateFrameToolButtons(LPOUTLINEDOC lpOutlineDoc);
  499. #endif  // USE_FRAMETOOLS
  500. #if defined( USE_HEADING )
  501. LPHEADING OutlineDoc_GetHeading(LPOUTLINEDOC lpOutlineDoc);
  502. void OutlineDoc_ShowHeading(LPOUTLINEDOC lpOutlineDoc, BOOL fShow);
  503. #endif  // USE_HEADING
  504. /*************************************************************************
  505. ** class OUTLINEAPP
  506. **    There is one instance of the OUTLINEAPP class created per running
  507. **    application instance. This object holds many fields that could
  508. **    otherwise be organized as global variables.
  509. *************************************************************************/
  510. /* Definition of OUTLINEAPP */
  511. typedef struct tagOUTLINEAPP {
  512.    HWND            m_hWndApp;        // top-level frame window for the App
  513.    HMENU           m_hMenuApp;       // handle to frame level menu for App
  514.    HACCEL          m_hAccelApp;
  515.    HACCEL          m_hAccelFocusEdit;// Accelerator when Edit in Focus
  516.    LPOUTLINEDOC    m_lpDoc;          // main SDI document visible to user
  517.    LPOUTLINEDOC    m_lpClipboardDoc; // hidden doc for snapshot of copied sel
  518.    HWND            m_hWndStatusBar;  // window for the status bar
  519.    HCURSOR         m_hcursorSelCur;  // cursor used to select lines
  520.    HINSTANCE       m_hInst;
  521.    PRINTDLG        m_PrintDlg;
  522.    HFONT           m_hStdFont;       // font used for TextLines
  523.    UINT            m_cfOutline;      // clipboard format for Outline data
  524.    HACCEL          m_hAccel;
  525.    HWND            m_hWndAccelTarget;
  526.    FARPROC         m_ListBoxWndProc; // orig listbox WndProc for subclassing
  527. #if defined ( USE_FRAMETOOLS ) || defined ( INPLACE_CNTR )
  528.    BORDERWIDTHS    m_FrameToolWidths;  // space required by frame-level tools
  529. #endif  // USE_FRAMETOOLS || INPLACE_CNTR
  530. #if defined( USE_FRAMETOOLS )
  531.    FRAMETOOLS      m_frametools;     // frame tools (button & formula bars)
  532. #endif  // USE_FRAMETOOLS
  533. } OUTLINEAPP, FAR* LPOUTLINEAPP;
  534. /* OutlineApp methods (functions) */
  535. BOOL OutlineApp_InitApplication(LPOUTLINEAPP lpOutlineApp, HINSTANCE hInst);
  536. BOOL OutlineApp_InitInstance(LPOUTLINEAPP lpOutlineApp, HINSTANCE hInst, int nCmdShow);
  537. BOOL OutlineApp_ParseCmdLine(LPOUTLINEAPP lpOutlineApp, LPSTR lpszCmdLine, int nCmdShow);
  538. void OutlineApp_Destroy(LPOUTLINEAPP lpOutlineApp);
  539. LPOUTLINEDOC OutlineApp_CreateDoc(
  540.       LPOUTLINEAPP    lpOutlineApp,
  541.       BOOL            fDataTransferDoc
  542. );
  543. HWND OutlineApp_GetWindow(LPOUTLINEAPP lpOutlineApp);
  544. HWND OutlineApp_GetFrameWindow(LPOUTLINEAPP lpOutlineApp);
  545. HINSTANCE OutlineApp_GetInstance(LPOUTLINEAPP lpOutlineApp);
  546. LPOUTLINENAME OutlineApp_CreateName(LPOUTLINEAPP lpOutlineApp);
  547. void OutlineApp_DocUnlockApp(LPOUTLINEAPP lpOutlineApp, LPOUTLINEDOC lpOutlineDoc);
  548. void OutlineApp_InitMenu(LPOUTLINEAPP lpOutlineApp, LPOUTLINEDOC lpDoc, HMENU hMenu);
  549. void OutlineApp_GetFrameRect(LPOUTLINEAPP lpOutlineApp, LPRECT lprcFrameRect);
  550. void OutlineApp_GetClientAreaRect(
  551.       LPOUTLINEAPP        lpOutlineApp,
  552.       LPRECT              lprcClientAreaRect
  553. );
  554. void OutlineApp_GetStatusLineRect(
  555.       LPOUTLINEAPP        lpOutlineApp,
  556.       LPRECT              lprcStatusLineRect
  557. );
  558. void OutlineApp_ResizeWindows(LPOUTLINEAPP lpOutlineApp);
  559. void OutlineApp_ResizeClientArea(LPOUTLINEAPP lpOutlineApp);
  560. void OutlineApp_AboutCommand(LPOUTLINEAPP lpOutlineApp);
  561. void OutlineApp_NewCommand(LPOUTLINEAPP lpOutlineApp);
  562. void OutlineApp_OpenCommand(LPOUTLINEAPP lpOutlineApp);
  563. void OutlineApp_PrintCommand(LPOUTLINEAPP lpOutlineApp);
  564. BOOL OutlineApp_SaveCommand(LPOUTLINEAPP lpOutlineApp);
  565. BOOL OutlineApp_SaveAsCommand(LPOUTLINEAPP lpOutlineApp);
  566. BOOL OutlineApp_CloseAllDocsAndExitCommand(
  567.       LPOUTLINEAPP        lpOutlineApp,
  568.       BOOL                fForceEndSession
  569. );
  570. void OutlineApp_DestroyWindow(LPOUTLINEAPP lpOutlineApp);
  571. #if defined( USE_FRAMETOOLS )
  572. void OutlineApp_SetBorderSpace(
  573.       LPOUTLINEAPP        lpOutlineApp,
  574.       LPBORDERWIDTHS      lpBorderWidths
  575. );
  576. LPFRAMETOOLS OutlineApp_GetFrameTools(LPOUTLINEAPP lpOutlineApp);
  577. void OutlineApp_SetFormulaBarAccel(
  578.       LPOUTLINEAPP            lpOutlineApp,
  579.       BOOL                    fEditFocus
  580. );
  581. #endif  // USE_FRAMETOOLS
  582. void OutlineApp_SetStatusText(LPOUTLINEAPP lpOutlineApp, LPOLESTR lpszMessage);
  583. LPOUTLINEDOC OutlineApp_GetActiveDoc(LPOUTLINEAPP lpOutlineApp);
  584. HMENU OutlineApp_GetMenu(LPOUTLINEAPP lpOutlineApp);
  585. HFONT OutlineApp_GetActiveFont(LPOUTLINEAPP lpOutlineApp);
  586. HDC OutlineApp_GetPrinterDC(LPOUTLINEAPP lpApp);
  587. void OutlineApp_PrinterSetupCommand(LPOUTLINEAPP lpOutlineApp);
  588. void OutlineApp_ErrorMessage(LPOUTLINEAPP lpOutlineApp, LPOLESTR lpszMsg);
  589. void OutlineApp_GetAppVersionNo(LPOUTLINEAPP lpOutlineApp, int narrAppVersionNo[]);
  590. void OutlineApp_GetAppName(LPOUTLINEAPP lpOutlineApp, LPOLESTR lpszAppName);
  591. BOOL OutlineApp_VersionNoCheck(LPOUTLINEAPP lpOutlineApp, LPOLESTR lpszAppName, int narrAppVersionNo[]);
  592. void OutlineApp_SetEditText(LPOUTLINEAPP lpApp);
  593. void OutlineApp_SetFocusEdit(LPOUTLINEAPP lpApp, BOOL bFocusEdit);
  594. BOOL OutlineApp_GetFocusEdit(LPOUTLINEAPP lpApp);
  595. void OutlineApp_ForceRedraw(LPOUTLINEAPP lpOutlineApp, BOOL fErase);
  596. /* struct definition for persistant data storage of OutlineDoc data */
  597. #pragma pack(push, 2)
  598. typedef struct tagOUTLINEDOCHEADER_ONDISK {
  599.         OLECHAR     m_szFormatName[32];
  600.         short       m_narrAppVersionNo[2];
  601.         USHORT      m_fShowHeading;
  602.         DWORD       m_reserved1;            // space reserved for future use
  603.         DWORD       m_reserved2;            // space reserved for future use
  604.         DWORD       m_reserved3;            // space reserved for future use
  605.         DWORD       m_reserved4;            // space reserved for future use
  606. } OUTLINEDOCHEADER_ONDISK, FAR* LPOUTLINEDOCHEADER_ONDISK;
  607. #pragma pack(pop)
  608. typedef struct tagOUTLINEDOCHEADER {
  609.    OLECHAR     m_szFormatName[32];
  610.    int         m_narrAppVersionNo[2];
  611.    BOOL        m_fShowHeading;
  612.    DWORD       m_reserved1;            // space reserved for future use
  613.    DWORD       m_reserved2;            // space reserved for future use
  614.    DWORD       m_reserved3;            // space reserved for future use
  615.    DWORD       m_reserved4;            // space reserved for future use
  616. } OUTLINEDOCHEADER, FAR* LPOUTLINEDOCHEADER;
  617. #pragma pack(push,2)
  618. typedef struct tagLINELISTHEADER_ONDISK {
  619.         USHORT      m_nNumLines;
  620.         DWORD       m_reserved1;            // space reserved for future use
  621.         DWORD       m_reserved2;            // space reserved for future use
  622. } LINELISTHEADER_ONDISK, FAR* LPLINELISTHEADER_ONDISK;
  623. #pragma pack(pop)
  624. typedef struct tagLINELISTHEADER {
  625.    int         m_nNumLines;
  626.    DWORD       m_reserved1;            // space reserved for future use
  627.    DWORD       m_reserved2;            // space reserved for future use
  628. } LINELISTHEADER, FAR* LPLINELISTHEADER;
  629. #pragma pack(push,2)
  630. typedef struct tagLINERECORD_ONDISK {
  631.         USHORT      m_lineType;
  632.         USHORT      m_nTabLevel;
  633.         USHORT      m_nTabWidthInHimetric;
  634.         USHORT      m_nWidthInHimetric;
  635.         USHORT      m_nHeightInHimetric;
  636.         DWORD       m_reserved;         // space reserved for future use
  637. } LINERECORD_ONDISK, FAR* LPLINERECORD_ONDISK;
  638. #pragma pack(pop)
  639. typedef struct tagLINERECORD {
  640.    LINETYPE    m_lineType;
  641.    UINT        m_nTabLevel;
  642.    UINT        m_nTabWidthInHimetric;
  643.    UINT        m_nWidthInHimetric;
  644.    UINT        m_nHeightInHimetric;
  645.    DWORD       m_reserved;         // space reserved for future use
  646. } LINERECORD, FAR* LPLINERECORD;
  647. /* Function prototypes in main.c */
  648. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  649.                   LPSTR lpszCmdLine, int nCmdShow);
  650. BOOL MyTranslateAccelerator(LPMSG lpmsg);
  651. int GetAccelItemCount(HACCEL hAccel);
  652. LRESULT CALLBACK EXPORT AppWndProc(HWND hWnd, UINT Message, WPARAM wParam,
  653.                   LPARAM lParam);
  654. LRESULT CALLBACK EXPORT DocWndProc(HWND hWnd, UINT Message, WPARAM wParam,
  655.                   LPARAM lParam);
  656. /* Function prototypes in outldlgs.c */
  657. BOOL InputTextDlg(HWND hWnd, LPSTR lpszText, LPSTR lpszDlgTitle);
  658. BOOL CALLBACK EXPORT AddEditDlgProc(HWND, UINT, WPARAM, LPARAM);
  659. BOOL CALLBACK EXPORT SetLineHeightDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam);
  660. BOOL CALLBACK EXPORT DefineNameDlgProc(HWND, UINT, WPARAM, LPARAM);
  661. BOOL CALLBACK EXPORT GotoNameDlgProc(HWND, UINT, WPARAM, LPARAM);
  662. void NameDlg_LoadComboBox(LPOUTLINENAMETABLE lpOutlineNameTable,HWND hCombo);
  663. void NameDlg_LoadListBox(LPOUTLINENAMETABLE lpOutlineNameTable,HWND hListBox);
  664. void NameDlg_AddName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, LPOLESTR lpszName, LPLINERANGE lplrSel);
  665. void NameDlg_UpdateName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, int nIndex, LPOLESTR lpszName, LPLINERANGE lplrSel);
  666. void NameDlg_DeleteName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, UINT nIndex);
  667. BOOL CALLBACK EXPORT AboutDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam);
  668. /* Function prototypes in outldata.c */
  669. LPVOID New(DWORD lSize);
  670. void Delete(LPVOID p);
  671. /* Function prototypes in outlprnt.c */
  672. BOOL CALLBACK EXPORT AbortProc (HDC hdc, WORD reserved);
  673. BOOL CALLBACK EXPORT PrintDlgProc(HWND hwnd, WORD msg, WORD wParam, LONG lParam);
  674. /* Function prototypes in debug.c */
  675. void SetDebugLevelCommand(void);
  676. void TraceDebug(HWND, int);
  677. /*************************************************************************
  678. ** DEBUG ASSERTION ROUTINES
  679. *************************************************************************/
  680. #ifdef DBG
  681. #include "assert.h"
  682. #define FnAssert(lpstrExpr, lpstrMsg, lpstrFileName, iLine)     
  683.         (_assert(lpstrMsg ? lpstrMsg : lpstrExpr,               
  684.                  lpstrFileName,                                 
  685.                  iLine), NOERROR)
  686. #endif //DBG
  687. #if defined( OLE_VERSION )
  688. #include "oleoutl.h"
  689. #endif  // OLE_VERSION
  690. #endif // _OUTLINE_H_