|
|
1.1 root 1: /*-----------------------------------------------------------
2: WELCOME3.C -- Creates a Top-Level Window and Two Children
3: -----------------------------------------------------------*/
4:
5: #define INCL_WIN
6:
7: #include <os2.h>
8: #include <stddef.h>
9:
10: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
11: MRESULT EXPENTRY ChildWndProc (HWND, USHORT, MPARAM, MPARAM) ;
12:
13: int main (void)
14: {
15: static CHAR szClientClass [] = "Welcome3" ;
16: static CHAR szChildClass [] = "Welcome3.Child" ;
17: HAB hab ;
18: HMQ hmq ;
19: HWND hwndFrame, hwndChildFrame1, hwndChildFrame2,
20: hwndClient, hwndChildClient1, hwndChildClient2 ;
21: QMSG qmsg ;
22: ULONG flFrameFlags = FCF_STANDARD & ~FCF_MENU ;
23: ULONG flFrameStyle = WS_VISIBLE ;
24:
25: hab = WinInitialize (0) ;
26: hmq = WinCreateMsgQueue (hab, 0) ;
27:
28: WinRegisterClass (
29: hab, /* Anchor block handle */
30: szClientClass, /* Name of class being registered */
31: ClientWndProc, /* Window procedure for class */
32: CS_SIZEREDRAW, /* Class style */
33: 0) ; /* Extra bytes to reserve */
34:
35: WinRegisterClass (
36: hab, /* Anchor block handle */
37: szChildClass, /* Name of class being registered */
38: ChildWndProc, /* Window procedure for class */
39: CS_SIZEREDRAW, /* Class style */
40: sizeof (PVOID)) ; /* Extra bytes to reserve */
41:
42: /*-------------------------
43: Create top-level window
44: -------------------------*/
45:
46: hwndFrame = WinCreateStdWindow (
47: HWND_DESKTOP, /* Parent window handle */
48: flFrameStyle, /* Style of frame window */
49: &flFrameFlags, /* Pointer to control data */
50: szClientClass, /* Client window class name */
51: "Top-Level Window", /* Title bar text */
52: 0L, /* Style of client window */
53: NULL, /* Module handle for resources */
54: 0, /* ID of resources */
55: &hwndClient) ; /* Pointer to client window handle */
56:
57: /*--------------------------
58: Create two child windows
59: --------------------------*/
60:
61: hwndChildFrame1 = WinCreateStdWindow (
62: hwndClient, /* Parent window handle */
63: flFrameStyle, /* Style of frame window */
64: &flFrameFlags, /* Pointer to control data */
65: szChildClass, /* Client window class name */
66: "Child No. 1", /* Title bar text */
67: 0L, /* Style of client window */
68: NULL, /* Module handle for resources */
69: 0, /* ID of resources */
70: &hwndChildClient1) ;/* Pointer to client window handle */
71:
72: hwndChildFrame2 = WinCreateStdWindow (
73: hwndClient, /* Parent window handle */
74: flFrameStyle, /* Style of frame window */
75: &flFrameFlags, /* Pointer to control data */
76: szChildClass, /* Client window class name */
77: "Child No. 2", /* Title bar text */
78: 0L, /* Style of client window */
79: NULL, /* Module handle for resources */
80: 0, /* ID of resources */
81: &hwndChildClient2) ;/* Pointer to client window handle */
82:
83: /*-----------------------------------------------------
84: Set reserved area of window to text string pointers
85: -----------------------------------------------------*/
86:
87: WinSetWindowPtr (hwndChildClient1, QWL_USER, "I'm a child ...") ;
88: WinSetWindowPtr (hwndChildClient2, QWL_USER, "... Me too!") ;
89:
90: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
91: WinDispatchMsg (hab, &qmsg) ;
92:
93: WinDestroyWindow (hwndFrame) ;
94: WinDestroyMsgQueue (hmq) ;
95: WinTerminate (hab) ;
96:
97: return 0 ;
98: }
99:
100: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
101: {
102: static CHAR szText [] = "I'm the parent of two children" ;
103: HPS hps ;
104: RECTL rcl ;
105:
106: switch (msg)
107: {
108: case WM_PAINT:
109: hps = WinBeginPaint (hwnd, NULL, NULL) ;
110:
111: WinQueryWindowRect (hwnd, &rcl) ;
112:
113: WinDrawText (hps, -1, szText, &rcl,
114: CLR_NEUTRAL, CLR_BACKGROUND,
115: DT_CENTER | DT_VCENTER | DT_ERASERECT) ;
116:
117: WinEndPaint (hps) ;
118: return 0 ;
119: }
120: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
121: }
122:
123: MRESULT EXPENTRY ChildWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
124: {
125: HPS hps ;
126: RECTL rcl ;
127:
128: switch (msg)
129: {
130: case WM_PAINT:
131: hps = WinBeginPaint (hwnd, NULL, NULL) ;
132:
133: WinQueryWindowRect (hwnd, &rcl) ;
134:
135: WinDrawText (hps, -1, WinQueryWindowPtr (hwnd, QWL_USER), &rcl,
136: CLR_NEUTRAL, CLR_BACKGROUND,
137: DT_CENTER | DT_VCENTER | DT_ERASERECT) ;
138:
139: WinEndPaint (hps) ;
140: return 0 ;
141:
142: case WM_CLOSE:
143: WinDestroyWindow (WinQueryWindow (hwnd, QW_PARENT, FALSE)) ;
144: return 0 ;
145: }
146: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
147: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.