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