When the commandID was being treated as the index, no check for index
[wine] / libtest / hello4.c
1 #include <stdio.h>
2 #include <windows.h>
3 /* Win32 counterpart for CalcChildScroll16 is not implemented */
4 /* even in MS Visual C++ */
5 #include "windef.h"
6 #include "wingdi.h"
7 /*#include <wine/winuser16.h>*/
8
9 void Write (HDC dc, int x, int y, char *s)
10 {
11     SetBkMode(dc, TRANSPARENT);
12     TextOut (dc, x, y, s, strlen (s));
13 }
14
15 LRESULT CALLBACK WndProc (HWND wnd, UINT msg, WPARAM w, LPARAM l)
16 {
17     static short xChar, yChar;
18     static RECT  rectHola;
19     static char* strHola = "Hola";
20     HDC dc;
21     PAINTSTRUCT ps;
22     TEXTMETRIC tm;
23
24     switch (msg){
25     case WM_CREATE:
26         dc = GetDC (wnd);
27         GetTextMetrics (dc, &tm);
28         xChar = tm.tmAveCharWidth;
29         yChar = tm.tmHeight;
30         GetTextExtentPoint32( dc, strHola, strlen(strHola), ((LPSIZE)&rectHola) + 1 );
31         OffsetRect( &rectHola, xChar, yChar );
32         ReleaseDC (wnd, dc);
33         break;
34
35     case WM_HSCROLL:
36     case WM_VSCROLL:
37         InvalidateRect(wnd, &rectHola, TRUE );
38         ScrollChildren(wnd, msg, w, l);
39         return 0;
40
41     case WM_PAINT:
42         dc = BeginPaint (wnd, &ps);
43         Write (dc, xChar, yChar, strHola);
44         EndPaint (wnd, &ps);
45         break;
46
47     case WM_DESTROY:
48         PostQuitMessage (0);
49         break;
50
51     default:
52         return DefWindowProc (wnd, msg, w, l);
53     }
54     return 0l;
55 }
56
57 LRESULT CALLBACK WndProc2 (HWND wnd, UINT msg, WPARAM w, LPARAM l)
58 {
59     static short xChar, yChar;
60     static RECT  rectInfo;
61     char buf[128];
62     HDC dc;
63     PAINTSTRUCT ps;
64     TEXTMETRIC tm;
65
66     switch (msg){
67     case WM_CREATE:
68         dc = GetDC (wnd);
69         GetTextMetrics (dc, &tm);
70         xChar = tm.tmAveCharWidth;
71         yChar = tm.tmHeight;
72         ReleaseDC (wnd, dc);
73         break;
74
75     case WM_PAINT:
76         dc = BeginPaint (wnd, &ps);
77         sprintf(buf,"ps.rcPaint = {left = %d, top = %d, right = %d, bottom = %d}",
78                 ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom);
79         rectInfo.left = rectInfo.top = 0;
80         GetTextExtentPoint32 (dc, buf, strlen(buf), ((LPSIZE)&rectInfo) + 1 );
81         OffsetRect (&rectInfo, xChar, yChar );
82         Write (dc, xChar, yChar, buf);
83         EndPaint (wnd, &ps);
84         break;
85
86     case WM_MOVE:
87     case WM_SIZE:
88         InvalidateRect( wnd, &rectInfo, TRUE );
89         /*CalcChildScroll16( (UINT16)GetParent(wnd), SB_BOTH );*/
90         break;
91
92     case WM_DESTROY:
93         PostQuitMessage (0);
94         break;
95
96     default:
97         return DefWindowProc (wnd, msg, w, l);
98     }
99     return 0l;
100 }
101
102 int PASCAL WinMain (HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
103 {
104     HWND     wnd,wnd2;
105     MSG      msg;
106     WNDCLASS class;
107     char className[] = "class";  /* To make sure className >= 0x10000 */
108     char class2Name[] = "class2";
109     char winName[] = "Test app";
110
111     if (!prev){
112         class.style = CS_HREDRAW | CS_VREDRAW;
113         class.lpfnWndProc = WndProc;
114         class.cbClsExtra = 0;
115         class.cbWndExtra = 0;
116         class.hInstance  = inst;
117         class.hIcon      = LoadIcon (0, IDI_APPLICATION);
118         class.hCursor    = LoadCursor (0, IDC_ARROW);
119         class.hbrBackground = GetStockObject (WHITE_BRUSH);
120         class.lpszMenuName = NULL;
121         class.lpszClassName = className;
122         if (!RegisterClass (&class))
123             return FALSE;
124     }
125
126     wnd = CreateWindow (className, winName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL,
127                         CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 
128                         0, inst, 0);
129
130     if (!prev){
131         class.lpfnWndProc = WndProc2;
132         class.lpszClassName = class2Name;
133         class.hbrBackground = GetStockObject(GRAY_BRUSH);
134         if (!RegisterClass (&class))
135             return FALSE;
136     }
137
138     wnd2= CreateWindow (class2Name,"Child window", WS_CAPTION | WS_CHILD | WS_THICKFRAME, 
139                         50, 50, 350, 100, wnd, 0, inst, 0);
140
141     ShowWindow (wnd, show);
142     UpdateWindow (wnd);
143     ShowWindow (wnd2, show);
144     UpdateWindow (wnd2);
145
146     while (GetMessage (&msg, 0, 0, 0)){
147         TranslateMessage (&msg);
148         DispatchMessage (&msg);
149     }
150     return 0;
151 }