1 #include <windows.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 BOOL WINAPI GdiGradientFill( HDC hdc, TRIVERTEX *vert_array, ULONG nvert,
6 void * grad_array, ULONG ngrad, ULONG mode );
7
8 LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
9
10 int WINAPI
WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow)11 WinMain(HINSTANCE hInstance,
12 HINSTANCE hPrevInstance,
13 LPSTR lpszCmdLine,
14 int nCmdShow)
15 {
16 WNDCLASS wc;
17 MSG msg;
18 HWND hWnd;
19
20 wc.lpszClassName = "GradientClass";
21 wc.lpfnWndProc = MainWndProc;
22 wc.style = CS_VREDRAW | CS_HREDRAW;
23 wc.hInstance = hInstance;
24 wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
25 wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
26 wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
27 wc.lpszMenuName = NULL;
28 wc.cbClsExtra = 0;
29 wc.cbWndExtra = 0;
30 if (RegisterClass(&wc) == 0)
31 {
32 fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n",
33 GetLastError());
34 return(1);
35 }
36
37 hWnd = CreateWindow("GradientClass",
38 "GradientFill Test",
39 WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
40 0,
41 0,
42 CW_USEDEFAULT,
43 CW_USEDEFAULT,
44 NULL,
45 NULL,
46 hInstance,
47 NULL);
48 if (hWnd == NULL)
49 {
50 fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n",
51 GetLastError());
52 return(1);
53 }
54
55 //tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE,
56 // ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
57 // DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons");
58
59 ShowWindow(hWnd, nCmdShow);
60
61 while(GetMessage(&msg, NULL, 0, 0))
62 {
63 TranslateMessage(&msg);
64 DispatchMessage(&msg);
65 }
66
67 //DeleteObject(tf);
68
69 return msg.wParam;
70 }
MainWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)71 LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
72 {
73 HDC hDC;
74
75 switch(msg)
76 {
77 case WM_PAINT:
78 {
79 PAINTSTRUCT ps;
80 TRIVERTEX vert [5] ;
81 GRADIENT_TRIANGLE gTRi[3];
82 GRADIENT_RECT gRect[2];
83 hDC = BeginPaint(hWnd, &ps);
84
85 vert [0] .x = 0;
86 vert [0] .y = 0;
87 vert [0] .Red = 0xff00;
88 vert [0] .Green = 0xff00;
89 vert [0] .Blue = 0xff00;
90 vert [0] .Alpha = 0x0000;
91
92 vert [1] .x = 300;
93 vert [1] .y = 20;
94 vert [1] .Red = 0x0000;
95 vert [1] .Green = 0x0000;
96 vert [1] .Blue = 0xff00;
97 vert [1] .Alpha = 0x0000;
98
99 vert [2] .x = 100;
100 vert [2] .y = 200;
101 vert [2] .Red = 0xff00;
102 vert [2] .Green = 0x0000;
103 vert [2] .Blue = 0x0000;
104 vert [2] .Alpha = 0x0000;
105
106 vert [3] .x = 250;
107 vert [3] .y = 300;
108 vert [3] .Red = 0x8000;
109 vert [3] .Green = 0x8000;
110 vert [3] .Blue = 0x0000;
111 vert [3] .Alpha = 0x0000;
112
113 vert [4] .x = 325;
114 vert [4] .y = 300;
115 vert [4] .Red = 0x0000;
116 vert [4] .Green = 0xff00;
117 vert [4] .Blue = 0x0000;
118 vert [4] .Alpha = 0x0000;
119
120 gTRi[0].Vertex1 = 0;
121 gTRi[0].Vertex2 = 1;
122 gTRi[0].Vertex3 = 2;
123
124 gTRi[1].Vertex1 = 1;
125 gTRi[1].Vertex2 = 2;
126 gTRi[1].Vertex3 = 3;
127
128 gTRi[2].Vertex1 = 1;
129 gTRi[2].Vertex2 = 3;
130 gTRi[2].Vertex3 = 4;
131
132 GdiGradientFill(hDC,vert,5,&gTRi,3,GRADIENT_FILL_TRIANGLE);
133
134
135 vert [0] .x = 5;
136 vert [0] .y = 200;
137 vert [0] .Red = 0x0000;
138 vert [0] .Green = 0x0000;
139 vert [0] .Blue = 0x0000;
140 vert [0] .Alpha = 0x0000;
141
142 vert [1] .x = 90;
143 vert [1] .y = 240;
144 vert [1] .Red = 0x0000;
145 vert [1] .Green = 0x0000;
146 vert [1] .Blue = 0xff00;
147 vert [1] .Alpha = 0x0000;
148
149 vert [2] .x = 5;
150 vert [2] .y = 245;
151 vert [2] .Red = 0x0000;
152 vert [2] .Green = 0x0000;
153 vert [2] .Blue = 0x0000;
154 vert [2] .Alpha = 0x0000;
155
156 vert [3] .x = 90;
157 vert [3] .y = 300;
158 vert [3] .Red = 0x0000;
159 vert [3] .Green = 0x0000;
160 vert [3] .Blue = 0xff00;
161 vert [3] .Alpha = 0x0000;
162
163 gRect[0].UpperLeft = 0;
164 gRect[0].LowerRight = 1;
165
166 gRect[1].UpperLeft = 2;
167 gRect[1].LowerRight = 3;
168
169 GdiGradientFill(hDC,vert,4,&gRect[0],1,GRADIENT_FILL_RECT_H);
170 GdiGradientFill(hDC,vert,4,&gRect[1],1,GRADIENT_FILL_RECT_V);
171
172 EndPaint(hWnd, &ps);
173 break;
174 }
175
176 case WM_DESTROY:
177 PostQuitMessage(0);
178 break;
179
180 default:
181 return DefWindowProc(hWnd, msg, wParam, lParam);
182 }
183 return 0;
184 }
185