|
|
1.1 root 1: /*-------------------------------------------------------------
2: WELCOME4.C -- Creates a Top-Level Window and Three Children
3: -------------------------------------------------------------*/
4:
5: #define INCL_WIN
6:
7: #include <os2.h>
8: #include <stddef.h>
9:
10: #define ID_BUTTON 1
11: #define ID_SCROLL 2
12: #define ID_SIZE 3
13:
14: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
15:
16: int main (void)
17: {
18: static CHAR szClientClass [] = "Welcome4" ;
19: HAB hab ;
20: HMQ hmq ;
21: HWND hwndFrame, hwndClient ;
22: QMSG qmsg ;
23: RECTL rcl ;
24: ULONG flFrameFlags = FCF_STANDARD & ~FCF_MENU ;
25: ULONG flFrameStyle = WS_VISIBLE ;
26:
27: hab = WinInitialize (0) ;
28: hmq = WinCreateMsgQueue (hab, 0) ;
29:
30: WinRegisterClass (
31: hab, /* Anchor block handle */
32: szClientClass, /* Name of class being registered */
33: ClientWndProc, /* Window procedure for class */
34: CS_SIZEREDRAW, /* Class style */
35: 0) ; /* Extra bytes to reserve */
36:
37: hwndFrame = WinCreateStdWindow (
38: HWND_DESKTOP, /* Parent window handle */
39: flFrameStyle, /* Style of frame window */
40: &flFrameFlags, /* Pointer to control data */
41: szClientClass, /* Client window class name */
42: "Top-Level Window", /* Title bar text */
43: 0L, /* Style of client window */
44: NULL, /* Module handle for resources */
45: 0, /* ID of resources */
46: &hwndClient) ; /* Pointer to client window handle */
47:
48: /*--------------------------------------------------------
49: Find dimensions of client window for sizes of children
50: --------------------------------------------------------*/
51:
52: WinQueryWindowRect (hwndClient, &rcl) ;
53: rcl.xRight /= 3 ; /* divide width in thirds */
54:
55: /*---------------------------
56: Create push button window
57: ---------------------------*/
58:
59: WinCreateWindow (
60: hwndClient, /* Parent window handle */
61: WC_BUTTON, /* Window class */
62: "Big Button", /* Window text */
63: WS_VISIBLE /* Window style */
64: | BS_PUSHBUTTON,
65: 10, /* Initial position of window */
66: 10,
67: (SHORT) rcl.xRight - 20, /* Initial size of window */
68: (SHORT) rcl.yTop - 20,
69: hwndClient, /* Owner window handle */
70: HWND_BOTTOM, /* Window handle for placement */
71: ID_BUTTON, /* Child window ID */
72: NULL, /* Control data */
73: NULL) ; /* Presentation parameters */
74:
75: /*--------------------------
76: Create scroll bar window
77: --------------------------*/
78:
79: WinCreateWindow (
80: hwndClient, /* Parent window handle */
81: WC_SCROLLBAR, /* Window class */
82: NULL, /* Window text */
83: WS_VISIBLE /* Window style */
84: | SBS_VERT,
85: (SHORT) rcl.xRight + 10, /* Initial position of window */
86: 10,
87: (SHORT) rcl.xRight - 20, /* Initial size of window */
88: (SHORT) rcl.yTop - 20,
89: hwndClient, /* Owner window handle */
90: HWND_BOTTOM, /* Window handle for placement */
91: ID_SCROLL, /* Child window ID */
92: NULL, /* Control data */
93: NULL) ; /* Presentation parameters */
94:
95: /*-----------------------------
96: Create sizing border window
97: -----------------------------*/
98:
99: WinCreateWindow (
100: hwndClient, /* Parent window handle */
101: WC_SIZEBORDER, /* Window class */
102: NULL, /* Window text */
103: WS_VISIBLE, /* Window style */
104: 2 * (SHORT) rcl.xRight + 10, /* Initial position */
105: 10,
106: (SHORT) rcl.xRight - 20, /* Initial size of window */
107: (SHORT) rcl.yTop - 20,
108: hwndClient, /* Owner window handle */
109: HWND_BOTTOM, /* Window handle for placement */
110: ID_SIZE, /* Child window ID */
111: NULL, /* Control data */
112: NULL) ; /* Presentation parameters */
113:
114: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
115: WinDispatchMsg (hab, &qmsg) ;
116:
117: WinDestroyWindow (hwndFrame) ;
118: WinDestroyMsgQueue (hmq) ;
119: WinTerminate (hab) ;
120:
121: return 0 ;
122: }
123:
124: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
125: {
126: switch (msg)
127: {
128: case WM_COMMAND:
129: switch (COMMANDMSG(&msg)->cmd)
130: {
131: case ID_BUTTON:
132: WinAlarm (HWND_DESKTOP, WA_NOTE) ;
133: return 0 ;
134: }
135: break ;
136:
137: case WM_ERASEBACKGROUND:
138: return 1 ;
139: }
140: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
141: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.