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