|
|
1.1 root 1: /**************************************************************************\
2: * toolbar.c -- module for the "toolbar" on top of the main window.
3: * Includes the window procedure and an initialization routine.
4: *
5: \**************************************************************************/
6:
7: #include <windows.h>
8: #include "ntfonts.h"
9:
10:
11: /* for the initial positioning of the buttons within the toolbar. */
12: #define SPACEBUTTON 5
13: #define CXBUTTON ((GetSystemMetrics (SM_CXFULLSCREEN)) /5 -2*SPACEBUTTON)
14: #define BUTTONTOP TOOLBARHEIGHT/8
15: #define BUTTONHEIGHT TOOLBARHEIGHT*3/4
16: #define BUTTONLEFT(x) ((2*x+1)*SPACEBUTTON + x*CXBUTTON)
17:
18: #define BORDER 4
19:
20:
21:
22: int initTB (HWND hwndMain)
23: {
24: WNDCLASS wc;
25:
26: wc.style = NULL;
27: wc.lpfnWndProc = (WNDPROC)ToolBarWndProc;
28: wc.cbClsExtra = 0;
29: wc.cbWndExtra = 0;
30: wc.hInstance = hInst;
31: wc.hIcon = NULL;
32: wc.hCursor = LoadCursor(NULL, IDC_ARROW);
33: wc.hbrBackground = GetStockObject(LTGRAY_BRUSH);
34: wc.lpszMenuName = NULL;
35: wc.lpszClassName = "ToolBar";
36:
37: if (!RegisterClass(&wc)) return (FALSE);
38:
39: hwndTB = CreateWindow(
40: "ToolBar",
41: NULL,
42: WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
43: 0,0,
44: GetSystemMetrics (SM_CXFULLSCREEN),
45: TOOLBARHEIGHT,
46: hwndMain, NULL, hInst, NULL);
47:
48: if (!hwndTB) return (FALSE);
49:
50: return TRUE;
51: }
52:
53:
54: /**************************************************************************\
55: *
56: * function: ToolBarWndProc
57: *
58: * input parameters: normal window procedure parameters.
59: *
60: * global variables:
61: * hwndMain - parent of the toolbar.
62: *
63: * When the window is created, create the various buttons. When those
64: * buttons send WM_COMMAND messages later, send the messages back to hwndMain.
65: *
66: \**************************************************************************/
67: LRESULT ToolBarWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
68: {
69: static HWND hwndButton;
70: switch (message) {
71:
72: /**********************************************************************\
73: * WM_CREATE
74: *
75: * Create the various buttons which are on the toolbar. Once the buttons
76: * are created, set the window ID so that the WM_COMMANDS may be
77: * distinguished.
78: \**********************************************************************/
79: case WM_CREATE: {
80: hwndButton = CreateWindow(
81: "BUTTON","&EnumFonts()",
82: WS_CHILD | WS_VISIBLE,
83: BUTTONLEFT(0),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
84: hwnd, NULL, hInst, NULL);
85: SetWindowLong (hwndButton, GWL_ID, TBID_ENUM);
86:
87: hwndButton = CreateWindow(
88: "BUTTON","&CreateFont()",
89: WS_CHILD | WS_VISIBLE,
90: BUTTONLEFT(1),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
91: hwnd, NULL, hInst, NULL);
92: SetWindowLong (hwndButton, GWL_ID, TBID_CREATE);
93:
94: hwndButton = CreateWindow(
95: "BUTTON","Get&TextMetric()",
96: WS_CHILD | WS_VISIBLE ,
97: BUTTONLEFT(2),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
98: hwnd, NULL, hInst, NULL);
99: SetWindowLong (hwndButton, GWL_ID, TBID_GETTM);
100:
101:
102: /* create the two check boxes */
103: hwndButton = CreateWindow(
104: "BUTTON","SetMapperFlags(1)",
105: WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
106: BUTTONLEFT(3),BUTTONTOP, CXBUTTON, BUTTONHEIGHT/2,
107: hwnd, NULL, hInst, NULL);
108: SetWindowLong (hwndButton, GWL_ID, TBID_CHKMAPPERFLAGS);
109:
110: hwndButton = CreateWindow(
111: "BUTTON","ShowAllGlyphs",
112: WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
113: BUTTONLEFT(3),BUTTONTOP + BUTTONHEIGHT/2, CXBUTTON, BUTTONHEIGHT/2,
114: hwnd, NULL, hInst, NULL);
115: SetWindowLong (hwndButton, GWL_ID, TBID_CHKALLGLYPHS);
116:
117:
118: /* put the printer fonts button near the RIGHT edge. */
119: hwndButton = CreateWindow(
120: "BUTTON","&Printer fonts",
121: WS_CHILD | WS_VISIBLE,
122: BUTTONLEFT(4),BUTTONTOP, CXBUTTON, BUTTONHEIGHT,
123: hwnd, NULL, hInst, NULL);
124: SetWindowLong (hwndButton, GWL_ID, TBID_PRINT);
125: } break;
126:
127:
128: /**********************************************************************\
129: * WM_CTLCOLORBTN
130: *
131: * Try to set the background of the check boxes to match the toolbar.
132: \**********************************************************************/
133: case WM_CTLCOLORBTN: {
134: HDC hdc;
135: hdc = (HDC)wParam;
136: SetBkMode (hdc, TRANSPARENT);
137:
138: return (LONG) GetStockObject (LTGRAY_BRUSH);
139: } break;
140:
141:
142: /**********************************************************************\
143: * WM_COMMAND
144: *
145: * Send the command messages back to hwndMain.
146: \**********************************************************************/
147: case WM_COMMAND:
148: PostMessage (hwndMain,message, wParam, lParam);
149: break;
150:
151:
152: /**********************************************************************\
153: * WM_PAINT
154: *
155: * Paint two rectangular strips, one on top, one on bottom.
156: \**********************************************************************/
157: case WM_PAINT : {
158: PAINTSTRUCT ps;
159: RECT rect;
160: HDC hdc;
161:
162: hdc = BeginPaint(hwnd, &ps);
163: GetClientRect (hwnd, &rect);
164: rect.bottom = rect.top+BORDER;
165: FillRect (hdc, &rect, GetStockObject (WHITE_BRUSH));
166: GetClientRect (hwnd, &rect);
167: rect.top = rect.bottom-BORDER;
168: FillRect (hdc, &rect, GetStockObject (GRAY_BRUSH));
169:
170: EndPaint (hwnd, &ps);
171: } break;
172:
173:
174: default:
175: return (DefWindowProc(hwnd, message, wParam, lParam));
176: }
177: return (NULL);
178: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.