|
|
1.1 root 1:
2: /******************************************************************************\
3: * This is a part of the Microsoft Source Code Samples.
4: * Copyright (C) 1993 Microsoft Corporation.
5: * All rights reserved.
6: * This source code is only intended as a supplement to
7: * Microsoft Development Tools and/or WinHelp documentation.
8: * See these sources for detailed information regarding the
9: * Microsoft samples programs.
10: \******************************************************************************/
11:
12: /*
13: * TABLE.H
14: *
15: * public interface definition for table window class.
16: *
17: * include after gutils.h and commdlg.h
18: */
19:
20: /* -------class and message names --------------------------------------*/
21:
22: /* create a window of this class */
23: #define TableClassName "GTableClass"
24:
25:
26: /* all messages to the owner window are sent with this message.
27: * call RegisterWindowsMessage with this string for the message UINT.
28: */
29: #define TableMessage "GTableQuery"
30:
31: /* -------- messages to and from table class --------------------------*/
32:
33: /* messages to owner window are:
34: * message: TableMessage
35: * wParam: command code (below)
36: * lParam: struct pointer according to code
37: * below is list of wParam codes & associated lParam struct
38: */
39: #define TQ_GETSIZE 1 /* lParam: lpTableHdr */
40: #define TQ_GETCOLPROPS 2 /* lParam: lpColPropList */
41: #define TQ_GETDATA 3 /* lParam: lpCellDataList */
42: #define TQ_PUTDATA 4 /* lParam: lpCellDataList */
43: #define TQ_SELECT 5 /* lParam: lpTableSelection */
44: #define TQ_ENTER 6 /* lParam: lpTableSelection */
45: #define TQ_CLOSE 7 /* lParam: the data id to be closed */
46:
47: /* optional */
48: #define TQ_SCROLL 8 /* lParam: the new top row nr */
49:
50:
51: /* messages to Table class */
52:
53: /* data, or nrows has changed wParam/lParam null*/
54: #define TM_REFRESH (WM_USER)
55:
56: /* nr cols/props/layout has changed - wparam/lparam null */
57: #define TM_NEWLAYOUT (WM_USER+1)
58:
59: /* Close old id, and display new - wParam null, lParam has new id */
60: #define TM_NEWID (WM_USER+2)
61:
62: /* Select and show this area - wParam null, lParam is lpTableSelection */
63: #define TM_SELECT (WM_USER+3)
64:
65: /* Print current table - wParam null, lParam either null
66: * or lpPrintContext.
67: */
68: #define TM_PRINT (WM_USER+4)
69:
70: /* Return the top row in the window. If wParam is TRUE, then set
71: * lParam to be the new toprow. top row is the number of rows scrolled down
72: * from the top. Thus the first visible non-fixed row is toprow+fixedrows
73: */
74: #define TM_TOPROW (WM_USER+5)
75:
76:
77: /* Return the end row visible. This is the 0-based rownr of the last
78: * visible row in the window
79: */
80: #define TM_ENDROW (WM_USER+6)
81:
82: /* New rows have been added to the end of the table, but no other
83: * rows or cols or properties have been changed.
84: * wParam contains the new total nr of rows. lParam contains the id
85: * in case this has changed.
86: */
87: #define TM_APPEND (WM_USER+7)
88:
89: /*-----display properties -------------------------------------------------*/
90:
91: /*
92: * Display properties struct. can be set for whole table, for
93: * each column, or for each cell. When looking for
94: * a property, we search cell->column->table
95: */
96: typedef struct {
97: UINT valid; /* flags (below) for what props we set */
98:
99: /* remaining fields only valid when corresponding flag set in valid */
100:
101: DWORD forecolour; /* RGB colour value */
102: DWORD backcolour; /* ditto */
103: /* font to use - also set through WM_SETFONT. owner application
104: * is responsible for DeleteObject call when no longer used
105: */
106: HFONT hFont; /* handle to font - caller should delete*/
107: UINT alignment; /* flags below */
108: UINT box; /* whether cell boxed (see below) */
109:
110: /* width/height settings not valid at cell level - only table or col.*/
111: int width; /* pixel width of this cell/column */
112: int height; /* pixel cell height */
113: } Props, FAR * lpProps;
114:
115: /* Valid flags for fields that are changed in this Props struct */
116: #define P_FCOLOUR 1
117: #define P_BCOLOUR 2
118: #define P_FONT 4
119: #define P_ALIGN 8
120: #define P_BOX 0x20
121: #define P_WIDTH 0x40
122: #define P_HEIGHT 0x80
123:
124: /* Box settings or-ed together */
125: #define P_BOXTOP 1
126: #define P_BOXBOTTOM 2
127: #define P_BOXLEFT 4
128: #define P_BOXRIGHT 8
129: #define P_BOXALL 0xF
130:
131: /* Alignment settings (expand later to include various tab-align settings */
132: #define P_LEFT 0
133: #define P_RIGHT 1
134: #define P_CENTRE 2
135:
136: /* This struct is the master information about a table. It is
137: * passed to the owner window with the id field filled in; fill in
138: * all remaining fields and return.
139: */
140: typedef struct {
141: DWORD id; /* owner's data id */
142:
143: long nrows; /* how many rows ? TM_REFRESH to change */
144: int ncols; /* how many columns ? TM_NEWLAYOUT to chg */
145:
146: int fixedrows; /* for headers - usually 0 or 1 */
147: int fixedcols; /* for hdrs - 0 or 1 normally */
148: BOOL fixedselectable; /* is fixed area selectable ? */
149: BOOL hseparator; /* is there a horz. line after fixed rows */
150: BOOL vseparator; /* is there a vert. line after fixed rows */
151:
152: UINT selectmode; /* multiple/single selection - flags below*/
153: BOOL sendscroll; /* TRUE if TQ_SCROLL to be sent on scrolling*/
154:
155: Props props;
156: } TableHdr, FAR * lpTableHdr;
157:
158: /*
159: * selection mode;
160: *
161: * choose TM_CELL or TM_ROW, and TM_SINGLE or TM_MANY, and
162: * TM_SOLID or TM_FOCUS and or them together.
163: *
164: * current implementation does not support TM_MANY !!
165: */
166: #define TM_ROW 1 /* selectable items are rows */
167: #define TM_CELL 0 /* selectable items are cells */
168:
169: #define TM_MANY 2 /* multiple selects possible */
170: #define TM_SINGLE 0 /* single item selectable at once only */
171:
172: #define TM_SOLID 0 /* (default) use a solid black for selection*/
173: #define TM_FOCUS 4 /* use a dotted focus rect for selection */
174:
175:
176: /* --------- column header structs --------------------------------------*/
177:
178: /*
179: * This struct is sent to request column width and properties -
180: * owner window must fill nchars and props.valid, at minimum.
181: */
182: typedef struct {
183: int nchars; /* expected text width in chars */
184: Props props;
185: } ColProps, FAR * lpColProps;
186:
187:
188: /* This is a set of column requests - owner should fill each one*/
189: typedef struct {
190: DWORD id; /* caller's id for data */
191: int startcol; /* zero-based column nr of first request */
192: int ncols; /* nr of columns in this set */
193: lpColProps plist; /* ptr to _array_ of ColProps */
194: } ColPropsList, FAR * lpColPropsList;
195:
196:
197: /* --- cell data structs ---------------------------------------------*/
198:
199: /* This is the per-cell data struct.
200: * When providing data (responding to TQ_GETDATA), fill out ptext[] and
201: * props as appropriate. ptext will be pre-allocated with nchars bytes of
202: * space. This may be larger than ColProps->nchars if the user has
203: * stretched this column's width on screen
204: *
205: * Don't re-alloc ptext, or change flags.
206: */
207: typedef struct {
208: int nchars; /* space in buffer */
209: LPSTR ptext; /* ptr to nchars of text space */
210: Props props; /* per-cell props */
211: DWORD flags; /* private table class flags */
212: } CellData, FAR * lpCellData;
213:
214: /* List of cell data structures - please fill out all of these*/
215: typedef struct {
216: DWORD id; /* caller's id for data */
217: long row; /* zero-based row nr to fetch */
218: int startcell; /* zero-based cell nr on this row */
219: int ncells; /* count of cells to fetch */
220: lpCellData plist; /* ptr to array CellData[ncells] */
221: } CellDataList, FAR * lpCellDataList;
222:
223:
224: /*----- current selection----------------------------------------------*/
225:
226: /* Describes the current selection - a rectangular selection area */
227: typedef struct {
228: DWORD id; /* caller's id for data */
229: long startrow; /* zero-based row nr of start of sel. */
230: long startcell; /* zero-based col nr of start of sel */
231: long nrows; /* vertical depth of selection */
232: long ncells; /* horz width of selection */
233: } TableSelection, FAR * lpTableSelection;
234:
235:
236:
237: /*----- print context -----------------------------------------------*/
238:
239: /* Describes the margin settings for the print job - these are in CMs*/
240: typedef struct {
241: int left; /* edge of paper to start of print area */
242: int right; /* edge of paper to start of print area */
243: int top; /* edge of paper to start of hdr */
244: int bottom; /* end of hdr to end of paper */
245: int topinner; /* start of hdr to start of data */
246: int bottominner; /* end of data to start of hdr */
247: } Margin, FAR * lpMargin;
248:
249: /* Position and clipping info - only used by table class
250: */
251: typedef struct {
252: int start; /* co-ord of cell start (left or top) */
253: int clipstart; /* start of clipping (vis area) */
254: int clipend; /* end of clipping (vis area) */
255: int size; /* pixel size of cell (width or height) */
256: } CellPos, FAR * lpCellPos;
257:
258:
259: /* One of these for each header lines (top and bottom) */
260: typedef struct {
261: CellPos xpos, ypos; /* private: for table-class use only */
262: Props props;
263: LPSTR ptext;
264: } Title, FAR * lpTitle;
265:
266: /* Print context data structure - any or all 4 pointers may be null */
267: typedef struct {
268: DWORD id; /* id of table to print */
269: lpTitle head;
270: lpTitle foot;
271: lpMargin margin;
272: PRINTDLG FAR * pd;
273: } PrintContext, FAR * lpPrintContext;
274:
275:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.