1 | #include "stdafx.h" |
---|
2 | |
---|
3 | #include "Common.h" |
---|
4 | |
---|
5 | void DrawLineInClient(int WndNum,long StartX,long StartY,long EndX,long EndY){ |
---|
6 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
7 | MoveToEx(MdiInfo[WndNum].MdiRadInfo->hMemDC, |
---|
8 | StartX+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
9 | StartY+MdiInfo[WndNum].MdiRadInfo->ClientPos.y, |
---|
10 | NULL); |
---|
11 | LineTo(MdiInfo[WndNum].MdiRadInfo->hMemDC, |
---|
12 | EndX+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
13 | EndY+MdiInfo[WndNum].MdiRadInfo->ClientPos.y); |
---|
14 | } |
---|
15 | void DrawRectangleInClient(int WndNum,long left,long top,long right,long bottom,COLORREF RGB_Pen,COLORREF RGB_Brush,BOOL bBrushing){ |
---|
16 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
17 | HPEN hPen,hOldPen; |
---|
18 | HBRUSH hBrush,hOldBrush; |
---|
19 | |
---|
20 | hPen=CreatePen(PS_SOLID,0,RGB_Pen); |
---|
21 | if(bBrushing) hBrush=CreateSolidBrush(RGB_Brush); |
---|
22 | else hBrush=(HBRUSH)GetStockObject(NULL_BRUSH); |
---|
23 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
24 | hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hBrush); |
---|
25 | |
---|
26 | Rectangle(MdiInfo[WndNum].MdiRadInfo->hMemDC, |
---|
27 | left+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
28 | top+MdiInfo[WndNum].MdiRadInfo->ClientPos.y, |
---|
29 | right+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
30 | bottom+MdiInfo[WndNum].MdiRadInfo->ClientPos.y); |
---|
31 | |
---|
32 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
33 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldBrush); |
---|
34 | DeleteObject(hPen); |
---|
35 | if(bBrushing) DeleteObject(hBrush); |
---|
36 | } |
---|
37 | void DrawButtonEdge(int WndNum,POINT *pPos,SIZE *pSize){ |
---|
38 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
39 | HPEN hPen,hOldPen; |
---|
40 | |
---|
41 | //光源方向の縁 |
---|
42 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
43 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
44 | DrawLineInClient(WndNum, |
---|
45 | pPos->x, pPos->y, |
---|
46 | pPos->x+pSize->cx-1, pPos->y); |
---|
47 | DrawLineInClient(WndNum, |
---|
48 | pPos->x, pPos->y, |
---|
49 | pPos->x, pPos->y+pSize->cy-1); |
---|
50 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
51 | DeleteObject(hPen); |
---|
52 | |
---|
53 | //影側の縁 |
---|
54 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DDKSHADOW)); |
---|
55 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
56 | DrawLineInClient(WndNum, |
---|
57 | pPos->x, pPos->y+pSize->cy-1, |
---|
58 | pPos->x+pSize->cx, pPos->y+pSize->cy-1); |
---|
59 | DrawLineInClient(WndNum, |
---|
60 | pPos->x+pSize->cx-1, pPos->y, |
---|
61 | pPos->x+pSize->cx-1, pPos->y+pSize->cy-1); |
---|
62 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
63 | DeleteObject(hPen); |
---|
64 | |
---|
65 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW)); |
---|
66 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
67 | DrawLineInClient(WndNum, |
---|
68 | pPos->x+1, pPos->y+pSize->cy-2, |
---|
69 | pPos->x+pSize->cx-1, pPos->y+pSize->cy-2); |
---|
70 | DrawLineInClient(WndNum, |
---|
71 | pPos->x+pSize->cx-2, pPos->y+1, |
---|
72 | pPos->x+pSize->cx-2, pPos->y+pSize->cy-2); |
---|
73 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
74 | DeleteObject(hPen); |
---|
75 | |
---|
76 | //内部 |
---|
77 | DrawRectangleInClient(WndNum, |
---|
78 | pPos->x+1,pPos->y+1, |
---|
79 | pPos->x+pSize->cx-2,pPos->y+pSize->cy-2, |
---|
80 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
81 | |
---|
82 | pPos->x+=3; |
---|
83 | pPos->y+=2; |
---|
84 | pSize->cx-=5; |
---|
85 | pSize->cy-=4; |
---|
86 | } |
---|
87 | void DrawItemEdgeByExStyle(int WndNum,int ExStyle,POINT *pPos,SIZE *pSize){ |
---|
88 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
89 | HPEN hPen,hOldPen; |
---|
90 | RECT rect; |
---|
91 | |
---|
92 | if(ExStyle&WS_EX_DLGMODALFRAME){ |
---|
93 | /////////////////////////// |
---|
94 | //モーダル フレーム境界線 |
---|
95 | |
---|
96 | rect.left=pPos->x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
97 | rect.top=pPos->y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
98 | rect.right=pPos->x+pSize->cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
99 | rect.bottom=pPos->y+pSize->cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
100 | DrawEdge(MdiInfo[WndNum].MdiRadInfo->hMemDC,&rect,EDGE_RAISED,BF_RECT); |
---|
101 | pPos->x+=2; |
---|
102 | pPos->y+=2; |
---|
103 | pSize->cx-=4; |
---|
104 | pSize->cy-=4; |
---|
105 | |
---|
106 | //細枠 |
---|
107 | DrawRectangleInClient(WndNum, |
---|
108 | pPos->x,pPos->y, |
---|
109 | pPos->x+pSize->cx,pPos->y+pSize->cy, |
---|
110 | GetSysColor(COLOR_ACTIVEBORDER),0,0); |
---|
111 | |
---|
112 | pPos->x+=1; |
---|
113 | pPos->y+=1; |
---|
114 | pSize->cx-=2; |
---|
115 | pSize->cy-=2; |
---|
116 | } |
---|
117 | else if(ExStyle&WS_EX_STATICEDGE){ |
---|
118 | ////////////////////// |
---|
119 | //スタティック境界線 |
---|
120 | |
---|
121 | //影側の色 |
---|
122 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW)); |
---|
123 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
124 | DrawLineInClient(WndNum, |
---|
125 | pPos->x, |
---|
126 | pPos->y, |
---|
127 | pPos->x, |
---|
128 | pPos->y+pSize->cy-1); |
---|
129 | DrawLineInClient(WndNum, |
---|
130 | pPos->x, |
---|
131 | pPos->y, |
---|
132 | pPos->x+pSize->cx-1, |
---|
133 | pPos->y); |
---|
134 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
135 | DeleteObject(hPen); |
---|
136 | |
---|
137 | //光源方向の縁 |
---|
138 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
139 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
140 | DrawLineInClient(WndNum, |
---|
141 | pPos->x, |
---|
142 | pPos->y+pSize->cy-1, |
---|
143 | pPos->x+pSize->cx-1, |
---|
144 | pPos->y+pSize->cy-1); |
---|
145 | DrawLineInClient(WndNum, |
---|
146 | pPos->x+pSize->cx-1, |
---|
147 | pPos->y, |
---|
148 | pPos->x+pSize->cx-1, |
---|
149 | pPos->y+pSize->cy); |
---|
150 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
151 | DeleteObject(hPen); |
---|
152 | |
---|
153 | pPos->x+=1; |
---|
154 | pPos->y+=1; |
---|
155 | pSize->cx-=2; |
---|
156 | pSize->cy-=2; |
---|
157 | } |
---|
158 | if(ExStyle&WS_EX_CLIENTEDGE){ |
---|
159 | ////////////////////// |
---|
160 | //クライアント境界線 |
---|
161 | |
---|
162 | rect.left=pPos->x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
163 | rect.top=pPos->y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
164 | rect.right=pPos->x+pSize->cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
165 | rect.bottom=pPos->y+pSize->cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
166 | DrawEdge(MdiInfo[WndNum].MdiRadInfo->hMemDC,&rect,EDGE_SUNKEN,BF_RECT); |
---|
167 | pPos->x+=2; |
---|
168 | pPos->y+=2; |
---|
169 | pSize->cx-=4; |
---|
170 | pSize->cy-=4; |
---|
171 | } |
---|
172 | } |
---|
173 | void DrawScrollBar(int WndNum,DWORD style,BOOL bSwitch,POINT *pPos,SIZE *pSize){ |
---|
174 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
175 | int i,i2; |
---|
176 | HPEN hPen,hOldPen; |
---|
177 | COLORREF rgb; |
---|
178 | POINT pos; |
---|
179 | SIZE size; |
---|
180 | |
---|
181 | if(bSwitch==0){ |
---|
182 | //水平スクロールバー |
---|
183 | |
---|
184 | //左ボタン |
---|
185 | if(pSize->cx>16*2){ |
---|
186 | pos=*pPos; |
---|
187 | size.cx=16; |
---|
188 | size.cy=pSize->cy; |
---|
189 | } |
---|
190 | else{ |
---|
191 | pos=*pPos; |
---|
192 | size.cx=pSize->cx/2; |
---|
193 | size.cy=pSize->cy; |
---|
194 | } |
---|
195 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
196 | |
---|
197 | //内部 |
---|
198 | DrawRectangleInClient(WndNum, |
---|
199 | pos.x,pos.y, |
---|
200 | pos.x+size.cx,pos.y+size.cy, |
---|
201 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
202 | |
---|
203 | if(style&WS_DISABLED){ |
---|
204 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
205 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
206 | pos.x++; |
---|
207 | pos.y++; |
---|
208 | i2=pos.y+(size.cy/2); |
---|
209 | for(i=0;i<4;i++,i2--){ |
---|
210 | DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1); |
---|
211 | } |
---|
212 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
213 | DeleteObject(hPen); |
---|
214 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
215 | pos.x--; |
---|
216 | pos.y--; |
---|
217 | } |
---|
218 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
219 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
220 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
221 | i2=pos.y+(size.cy/2); |
---|
222 | for(i=0;i<4;i++,i2--){ |
---|
223 | DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1); |
---|
224 | } |
---|
225 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
226 | DeleteObject(hPen); |
---|
227 | |
---|
228 | //右ボタン |
---|
229 | if(pSize->cx>16*2){ |
---|
230 | pos.x=pPos->x+pSize->cx-16; |
---|
231 | pos.y=pPos->y; |
---|
232 | size.cx=16; |
---|
233 | size.cy=pSize->cy; |
---|
234 | } |
---|
235 | else{ |
---|
236 | pos.x=pPos->x+pSize->cx/2+pSize->cx%2; |
---|
237 | pos.y=pPos->y; |
---|
238 | size.cx=pSize->cx/2; |
---|
239 | size.cy=pSize->cy; |
---|
240 | } |
---|
241 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
242 | |
---|
243 | //内部 |
---|
244 | DrawRectangleInClient(WndNum, |
---|
245 | pos.x,pos.y, |
---|
246 | pos.x+size.cx,pos.y+size.cy, |
---|
247 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
248 | |
---|
249 | if(style&WS_DISABLED){ |
---|
250 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
251 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
252 | pos.x++; |
---|
253 | pos.y++; |
---|
254 | i2=pos.y+(size.cy/2); |
---|
255 | for(i=3;i>=0;i--,i2--){ |
---|
256 | DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1); |
---|
257 | } |
---|
258 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
259 | DeleteObject(hPen); |
---|
260 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
261 | pos.x--; |
---|
262 | pos.y--; |
---|
263 | } |
---|
264 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
265 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
266 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
267 | i2=pos.y+(size.cy/2); |
---|
268 | for(i=3;i>=0;i--,i2--){ |
---|
269 | DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1); |
---|
270 | } |
---|
271 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
272 | DeleteObject(hPen); |
---|
273 | |
---|
274 | if(pSize->cx>16*3){ |
---|
275 | if(!(style&WS_DISABLED)){ |
---|
276 | pos.x=pPos->x+16; |
---|
277 | pos.y=pPos->y; |
---|
278 | size.cx=16; |
---|
279 | size.cy=pSize->cy; |
---|
280 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
281 | |
---|
282 | //内部 |
---|
283 | DrawRectangleInClient(WndNum, |
---|
284 | pos.x,pos.y, |
---|
285 | pos.x+size.cx,pos.y+size.cy, |
---|
286 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
287 | |
---|
288 | pos.x=pPos->x+16*2; |
---|
289 | pos.y=pPos->y; |
---|
290 | size.cx=pSize->cx-16*3; |
---|
291 | size.cy=pSize->cy; |
---|
292 | } |
---|
293 | else{ |
---|
294 | pos.x=pPos->x+16; |
---|
295 | pos.y=pPos->y; |
---|
296 | size.cx=pSize->cx-16*2; |
---|
297 | size.cy=pSize->cy; |
---|
298 | } |
---|
299 | } |
---|
300 | else if(pSize->cx>16*2){ |
---|
301 | pos.x=pPos->x+16; |
---|
302 | pos.y=pPos->y; |
---|
303 | size.cx=pSize->cx-16*2; |
---|
304 | size.cy=pSize->cy; |
---|
305 | } |
---|
306 | else{ |
---|
307 | pos.x=pPos->x+pSize->cx/2; |
---|
308 | pos.y=pPos->y; |
---|
309 | size.cx=pSize->cx%2; |
---|
310 | size.cy=pSize->cy; |
---|
311 | } |
---|
312 | } |
---|
313 | else{ |
---|
314 | //垂直スクロールバー |
---|
315 | |
---|
316 | //上ボタン |
---|
317 | if(pSize->cy>16*2){ |
---|
318 | pos=*pPos; |
---|
319 | size.cy=16; |
---|
320 | size.cx=pSize->cx; |
---|
321 | } |
---|
322 | else{ |
---|
323 | pos=*pPos; |
---|
324 | size.cy=pSize->cy/2; |
---|
325 | size.cx=pSize->cx; |
---|
326 | } |
---|
327 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
328 | |
---|
329 | //内部 |
---|
330 | DrawRectangleInClient(WndNum, |
---|
331 | pos.x,pos.y, |
---|
332 | pos.x+size.cx,pos.y+size.cy, |
---|
333 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
334 | |
---|
335 | pos.y++; |
---|
336 | if(style&WS_DISABLED){ |
---|
337 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
338 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
339 | pos.x++; |
---|
340 | pos.y++; |
---|
341 | i2=pos.x+(size.cx/2)-1; |
---|
342 | for(i=0;i<4;i++,i2--){ |
---|
343 | DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2); |
---|
344 | } |
---|
345 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
346 | DeleteObject(hPen); |
---|
347 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
348 | pos.x--; |
---|
349 | pos.y--; |
---|
350 | } |
---|
351 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
352 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
353 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
354 | i2=pos.x+(size.cx/2)-1; |
---|
355 | for(i=0;i<4;i++,i2--){ |
---|
356 | DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2); |
---|
357 | } |
---|
358 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
359 | DeleteObject(hPen); |
---|
360 | |
---|
361 | //下ボタン |
---|
362 | if(pSize->cy>16*2){ |
---|
363 | pos.x=pPos->x; |
---|
364 | pos.y=pPos->y+pSize->cy-16; |
---|
365 | size.cx=pSize->cx; |
---|
366 | size.cy=16; |
---|
367 | } |
---|
368 | else{ |
---|
369 | pos.x=pPos->x; |
---|
370 | pos.y=pPos->y+pSize->cy/2+pSize->cy%2; |
---|
371 | size.cx=pSize->cx; |
---|
372 | size.cy=pSize->cy/2; |
---|
373 | } |
---|
374 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
375 | |
---|
376 | //内部 |
---|
377 | DrawRectangleInClient(WndNum, |
---|
378 | pos.x,pos.y, |
---|
379 | pos.x+size.cx,pos.y+size.cy, |
---|
380 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
381 | |
---|
382 | pos.x--; |
---|
383 | if(style&WS_DISABLED){ |
---|
384 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
385 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
386 | pos.x++; |
---|
387 | pos.y++; |
---|
388 | i2=pos.x+(size.cx/2); |
---|
389 | for(i=3;i>=0;i--,i2--){ |
---|
390 | DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3); |
---|
391 | } |
---|
392 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
393 | DeleteObject(hPen); |
---|
394 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
395 | pos.x--; |
---|
396 | pos.y--; |
---|
397 | } |
---|
398 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
399 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
400 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
401 | i2=pos.x+(size.cx/2); |
---|
402 | for(i=3;i>=0;i--,i2--){ |
---|
403 | DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3); |
---|
404 | } |
---|
405 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
406 | DeleteObject(hPen); |
---|
407 | |
---|
408 | if(pSize->cy>16*3){ |
---|
409 | if(!(style&WS_DISABLED)){ |
---|
410 | pos.x=pPos->x; |
---|
411 | pos.y=pPos->y+16; |
---|
412 | size.cx=pSize->cx; |
---|
413 | size.cy=16; |
---|
414 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
415 | |
---|
416 | //内部 |
---|
417 | DrawRectangleInClient(WndNum, |
---|
418 | pos.x,pos.y, |
---|
419 | pos.x+size.cx,pos.y+size.cy, |
---|
420 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
421 | |
---|
422 | pos.x=pPos->x; |
---|
423 | pos.y=pPos->y+16*2; |
---|
424 | size.cx=pSize->cx; |
---|
425 | size.cy=pSize->cy-16*3; |
---|
426 | } |
---|
427 | else{ |
---|
428 | pos.x=pPos->x; |
---|
429 | pos.y=pPos->y+16; |
---|
430 | size.cx=pSize->cx; |
---|
431 | size.cy=pSize->cy-16*2; |
---|
432 | } |
---|
433 | } |
---|
434 | else if(pSize->cy>16*2){ |
---|
435 | pos.x=pPos->x; |
---|
436 | pos.y=pPos->y+16; |
---|
437 | size.cx=pSize->cx; |
---|
438 | size.cy=pSize->cy-16*2; |
---|
439 | } |
---|
440 | else{ |
---|
441 | pos.x=pPos->x; |
---|
442 | pos.y=pPos->y+pSize->cy/2; |
---|
443 | size.cx=pSize->cx; |
---|
444 | size.cy=pSize->cy%2; |
---|
445 | } |
---|
446 | } |
---|
447 | |
---|
448 | if(size.cx){ |
---|
449 | int x,y; |
---|
450 | HBITMAP hBitmap; |
---|
451 | BITMAPINFO BitmapInfo; |
---|
452 | BYTE *pByte; |
---|
453 | |
---|
454 | memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER)); |
---|
455 | BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); |
---|
456 | BitmapInfo.bmiHeader.biWidth=size.cx; |
---|
457 | BitmapInfo.bmiHeader.biHeight=size.cy; |
---|
458 | BitmapInfo.bmiHeader.biPlanes=1; |
---|
459 | BitmapInfo.bmiHeader.biBitCount=24; |
---|
460 | |
---|
461 | hBitmap=CreateDIBSection(MdiInfo[WndNum].MdiRadInfo->hMemDC,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0); |
---|
462 | i=BitmapInfo.bmiHeader.biWidth*3; |
---|
463 | if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG)); |
---|
464 | for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){ |
---|
465 | if(y%2==0) rgb=GetSysColor(COLOR_3DFACE); |
---|
466 | else rgb=RGB(255,255,255); |
---|
467 | for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){ |
---|
468 | i2=y*i+x*3; |
---|
469 | pByte[i2+2]=LOBYTE(LOWORD(rgb)); |
---|
470 | pByte[i2+1]=HIBYTE(LOWORD(rgb)); |
---|
471 | pByte[i2]=LOBYTE(HIWORD(rgb)); |
---|
472 | if(rgb==RGB(255,255,255)) rgb=GetSysColor(COLOR_3DFACE); |
---|
473 | else rgb=RGB(255,255,255); |
---|
474 | } |
---|
475 | } |
---|
476 | SetDIBitsToDevice(MdiInfo[WndNum].MdiRadInfo->hMemDC, |
---|
477 | pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
478 | pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y, |
---|
479 | BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight, |
---|
480 | 0,0, |
---|
481 | 0,BitmapInfo.bmiHeader.biHeight, |
---|
482 | pByte, |
---|
483 | &BitmapInfo, |
---|
484 | DIB_RGB_COLORS); |
---|
485 | DeleteObject(hBitmap); |
---|
486 | } |
---|
487 | } |
---|
488 | void DrawUpDownControl(int WndNum,DWORD style,BOOL bSwitch,POINT *pPos,SIZE *pSize){ |
---|
489 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
490 | int i,i2; |
---|
491 | HPEN hPen,hOldPen; |
---|
492 | COLORREF rgb; |
---|
493 | POINT pos; |
---|
494 | SIZE size; |
---|
495 | |
---|
496 | if(bSwitch==0){ |
---|
497 | //水平 |
---|
498 | |
---|
499 | //左ボタン |
---|
500 | pos=*pPos; |
---|
501 | size.cx=pSize->cx/2; |
---|
502 | size.cy=pSize->cy; |
---|
503 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
504 | |
---|
505 | //内部 |
---|
506 | DrawRectangleInClient(WndNum, |
---|
507 | pos.x,pos.y, |
---|
508 | pos.x+size.cx,pos.y+size.cy, |
---|
509 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
510 | |
---|
511 | if(style&WS_DISABLED){ |
---|
512 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
513 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
514 | pos.x++; |
---|
515 | pos.y++; |
---|
516 | i2=pos.y+(size.cy/2); |
---|
517 | for(i=0;i<4;i++,i2--){ |
---|
518 | DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1); |
---|
519 | } |
---|
520 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
521 | DeleteObject(hPen); |
---|
522 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
523 | pos.x--; |
---|
524 | pos.y--; |
---|
525 | } |
---|
526 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
527 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
528 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
529 | i2=pos.y+(size.cy/2); |
---|
530 | for(i=0;i<4;i++,i2--){ |
---|
531 | DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1); |
---|
532 | } |
---|
533 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
534 | DeleteObject(hPen); |
---|
535 | |
---|
536 | //右ボタン |
---|
537 | pos.x=pPos->x+pSize->cx/2+pSize->cx%2; |
---|
538 | pos.y=pPos->y; |
---|
539 | size.cx=pSize->cx/2; |
---|
540 | size.cy=pSize->cy; |
---|
541 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
542 | |
---|
543 | //内部 |
---|
544 | DrawRectangleInClient(WndNum, |
---|
545 | pos.x,pos.y, |
---|
546 | pos.x+size.cx,pos.y+size.cy, |
---|
547 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
548 | |
---|
549 | if(style&WS_DISABLED){ |
---|
550 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
551 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
552 | pos.x++; |
---|
553 | pos.y++; |
---|
554 | i2=pos.y+(size.cy/2); |
---|
555 | for(i=3;i>=0;i--,i2--){ |
---|
556 | DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1); |
---|
557 | } |
---|
558 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
559 | DeleteObject(hPen); |
---|
560 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
561 | pos.x--; |
---|
562 | pos.y--; |
---|
563 | } |
---|
564 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
565 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
566 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
567 | i2=pos.y+(size.cy/2); |
---|
568 | for(i=3;i>=0;i--,i2--){ |
---|
569 | DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1); |
---|
570 | } |
---|
571 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
572 | DeleteObject(hPen); |
---|
573 | } |
---|
574 | else{ |
---|
575 | //垂直 |
---|
576 | |
---|
577 | //上ボタン |
---|
578 | pos=*pPos; |
---|
579 | size.cy=pSize->cy/2; |
---|
580 | size.cx=pSize->cx; |
---|
581 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
582 | |
---|
583 | //内部 |
---|
584 | DrawRectangleInClient(WndNum, |
---|
585 | pos.x,pos.y, |
---|
586 | pos.x+size.cx,pos.y+size.cy, |
---|
587 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
588 | |
---|
589 | pos.y++; |
---|
590 | if(style&WS_DISABLED){ |
---|
591 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
592 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
593 | pos.x++; |
---|
594 | pos.y++; |
---|
595 | i2=pos.x+(size.cx/2)-1; |
---|
596 | for(i=0;i<4;i++,i2--){ |
---|
597 | DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2); |
---|
598 | } |
---|
599 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
600 | DeleteObject(hPen); |
---|
601 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
602 | pos.x--; |
---|
603 | pos.y--; |
---|
604 | } |
---|
605 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
606 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
607 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
608 | i2=pos.x+(size.cx/2)-1; |
---|
609 | for(i=0;i<4;i++,i2--){ |
---|
610 | DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2); |
---|
611 | } |
---|
612 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
613 | DeleteObject(hPen); |
---|
614 | |
---|
615 | //下ボタン |
---|
616 | pos.x=pPos->x; |
---|
617 | pos.y=pPos->y+pSize->cy/2+pSize->cy%2; |
---|
618 | size.cx=pSize->cx; |
---|
619 | size.cy=pSize->cy/2; |
---|
620 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size); |
---|
621 | |
---|
622 | //内部 |
---|
623 | DrawRectangleInClient(WndNum, |
---|
624 | pos.x,pos.y, |
---|
625 | pos.x+size.cx,pos.y+size.cy, |
---|
626 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
627 | |
---|
628 | pos.x--; |
---|
629 | if(style&WS_DISABLED){ |
---|
630 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
631 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
632 | pos.x++; |
---|
633 | pos.y++; |
---|
634 | i2=pos.x+(size.cx/2); |
---|
635 | for(i=3;i>=0;i--,i2--){ |
---|
636 | DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3); |
---|
637 | } |
---|
638 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
639 | DeleteObject(hPen); |
---|
640 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
641 | pos.x--; |
---|
642 | pos.y--; |
---|
643 | } |
---|
644 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
645 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
646 | hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen); |
---|
647 | i2=pos.x+(size.cx/2); |
---|
648 | for(i=3;i>=0;i--,i2--){ |
---|
649 | DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3); |
---|
650 | } |
---|
651 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen); |
---|
652 | DeleteObject(hPen); |
---|
653 | } |
---|
654 | } |
---|
655 | void DrawWindowScrollBar(int WndNum,DWORD style,POINT *pPos,SIZE *pSize){ |
---|
656 | POINT pos; |
---|
657 | SIZE size; |
---|
658 | if(style&WS_HSCROLL){ |
---|
659 | pos.x=pPos->x; |
---|
660 | pos.y=pPos->y+pSize->cy-GetSystemMetrics(SM_CYVSCROLL); |
---|
661 | if(style&WS_VSCROLL) size.cx=pSize->cx-GetSystemMetrics(SM_CXVSCROLL); |
---|
662 | else size.cx=pSize->cx; |
---|
663 | size.cy=GetSystemMetrics(SM_CYVSCROLL); |
---|
664 | DrawScrollBar(WndNum,style,0,&pos,&size); |
---|
665 | } |
---|
666 | if(style&WS_VSCROLL){ |
---|
667 | pos.x=pPos->x+pSize->cx-GetSystemMetrics(SM_CXHSCROLL); |
---|
668 | pos.y=pPos->y; |
---|
669 | size.cx=GetSystemMetrics(SM_CXHSCROLL); |
---|
670 | if(style&WS_HSCROLL) size.cy=pSize->cy-GetSystemMetrics(SM_CYHSCROLL); |
---|
671 | else size.cy=pSize->cy; |
---|
672 | DrawScrollBar(WndNum,style,1,&pos,&size); |
---|
673 | } |
---|
674 | } |
---|
675 | void DrawOEMImage(HDC hdc,POINT *pPos,SIZE *pSize,DWORD dwImage){ |
---|
676 | HBITMAP hBmp,hOldBmp; |
---|
677 | HDC memdc; |
---|
678 | |
---|
679 | //未完成(XPのみに対応?) |
---|
680 | |
---|
681 | memdc=CreateCompatibleDC(hdc); |
---|
682 | hBmp=LoadBitmap(NULL,(LPSTR)dwImage); |
---|
683 | hOldBmp=(HBITMAP)SelectObject(memdc,hBmp); |
---|
684 | BitBlt(hdc,pPos->x,pPos->y,pSize->cx,pSize->cy,memdc,0,0,SRCCOPY); |
---|
685 | SelectObject(memdc,hOldBmp); |
---|
686 | DeleteDC(memdc); |
---|
687 | DeleteObject(hBmp); |
---|
688 | } |
---|
689 | void DesigningWindow(int WndNum,HDC hdc,POINT *pBasePos,const ActiveBasic::PM::WindowInfo *pWindowInfo){ |
---|
690 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
691 | int i,i2,i3,i4; |
---|
692 | double red,green,blue,d_red,d_green,d_blue; |
---|
693 | char temporary[MAX_PATH]; |
---|
694 | COLORREF rgb; |
---|
695 | HPEN hPen,hOldPen; |
---|
696 | HBRUSH hBrush,hOldBrush; |
---|
697 | HFONT hFont,hOldFont; |
---|
698 | HANDLE hImage; |
---|
699 | RECT InsideRect,rect,rc2; |
---|
700 | POINT pos,pos2; |
---|
701 | SIZE size,size2; |
---|
702 | |
---|
703 | HGLOBAL hResource; |
---|
704 | BITMAPINFO *pBitmapInfo; |
---|
705 | BYTE *pByte,*pByte2; |
---|
706 | |
---|
707 | |
---|
708 | //////////////////////// |
---|
709 | //ウィンドウの縁を描画 |
---|
710 | InsideRect.left=pBasePos->x; |
---|
711 | InsideRect.top=pBasePos->y; |
---|
712 | InsideRect.right=InsideRect.left+pWindowInfo->size.cx; |
---|
713 | InsideRect.bottom=InsideRect.top+pWindowInfo->size.cy; |
---|
714 | |
---|
715 | if(pWindowInfo->GetStyle()&(WS_BORDER|WS_THICKFRAME)){ |
---|
716 | DrawEdge(hdc,&InsideRect,EDGE_RAISED,BF_RECT); |
---|
717 | |
---|
718 | InsideRect.left+=2; |
---|
719 | InsideRect.top+=2; |
---|
720 | InsideRect.right-=2; |
---|
721 | InsideRect.bottom-=2; |
---|
722 | } |
---|
723 | |
---|
724 | |
---|
725 | //////////// |
---|
726 | //枠を描画 |
---|
727 | if(pWindowInfo->GetStyle()&(WS_BORDER|WS_THICKFRAME)){ |
---|
728 | //細枠 |
---|
729 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_ACTIVEBORDER)); |
---|
730 | hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE)); |
---|
731 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
732 | hOldBrush=(HBRUSH)SelectObject(hdc,hBrush); |
---|
733 | Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom); |
---|
734 | |
---|
735 | InsideRect.left+=1; |
---|
736 | InsideRect.top+=1; |
---|
737 | InsideRect.right-=1; |
---|
738 | InsideRect.bottom-=1; |
---|
739 | |
---|
740 | //サイズ変更枠 |
---|
741 | if(pWindowInfo->GetStyle()&WS_THICKFRAME){ |
---|
742 | Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom); |
---|
743 | |
---|
744 | InsideRect.left+=1; |
---|
745 | InsideRect.top+=1; |
---|
746 | InsideRect.right-=1; |
---|
747 | InsideRect.bottom-=1; |
---|
748 | } |
---|
749 | SelectObject(hdc,hOldPen); |
---|
750 | SelectObject(hdc,hOldBrush); |
---|
751 | DeleteObject(hPen); |
---|
752 | DeleteObject(hBrush); |
---|
753 | } |
---|
754 | |
---|
755 | |
---|
756 | //Draw...InClient関数のため |
---|
757 | MdiInfo[WndNum].MdiRadInfo->ClientPos.x=0; |
---|
758 | MdiInfo[WndNum].MdiRadInfo->ClientPos.y=0; |
---|
759 | |
---|
760 | if(pWindowInfo->GetStyle()&(WS_CAPTION&(~WS_BORDER))){ |
---|
761 | ////////////////////// |
---|
762 | //タイトルバーを描画 |
---|
763 | |
---|
764 | //背景を描画(グラデーション可) |
---|
765 | i=GetSysColor(COLOR_ACTIVECAPTION); |
---|
766 | OSVERSIONINFO OsVersionInfo; |
---|
767 | OsVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); |
---|
768 | GetVersionEx(&OsVersionInfo); |
---|
769 | if((OsVersionInfo.dwPlatformId==VER_PLATFORM_WIN32_NT&&OsVersionInfo.dwMajorVersion>=5)|| |
---|
770 | (OsVersionInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS&&LOWORD(OsVersionInfo.dwBuildNumber)>=1998)){ |
---|
771 | #define COLOR_GRADIENTACTIVECAPTION 27 |
---|
772 | i2=GetSysColor(COLOR_GRADIENTACTIVECAPTION); |
---|
773 | } |
---|
774 | else i2=i; |
---|
775 | if(pWindowInfo->GetExStyle()&WS_EX_TOOLWINDOW) |
---|
776 | i3=GetSystemMetrics(SM_CYSMCAPTION); |
---|
777 | else i3=GetSystemMetrics(SM_CYCAPTION); |
---|
778 | d_red=((double)((i2&0xFF)-(i&0xFF)))/(double)(InsideRect.right-InsideRect.left); |
---|
779 | d_green=((double)(((i2>>8)&0xFF))-((i>>8)&0xFF))/(double)(InsideRect.right-InsideRect.left); |
---|
780 | d_blue=((double)(((i2>>16)&0xFF))-((i>>16)&0xFF))/(double)(InsideRect.right-InsideRect.left); |
---|
781 | |
---|
782 | red=(double)(i&0xFF); |
---|
783 | green=(double)((i>>8)&0xFF); |
---|
784 | blue=(double)((i>>16)&0xFF); |
---|
785 | for(i4=InsideRect.left;i4<InsideRect.right;i4++){ |
---|
786 | hPen=CreatePen(PS_SOLID,0,RGB((_int8)red,(_int8)green,(_int8)blue)); |
---|
787 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
788 | MoveToEx(hdc,i4,InsideRect.top,NULL); |
---|
789 | LineTo(hdc,i4,InsideRect.top+i3-1); |
---|
790 | SelectObject(hdc,hOldPen); |
---|
791 | DeleteObject(hPen); |
---|
792 | red+=d_red; |
---|
793 | green+=d_green; |
---|
794 | blue+=d_blue; |
---|
795 | } |
---|
796 | |
---|
797 | //タイトルテキストの描画 |
---|
798 | LOGFONT LogFont; |
---|
799 | SystemParametersInfo(SPI_GETICONTITLELOGFONT,sizeof(LOGFONT),&LogFont,0); |
---|
800 | hFont=CreateFontIndirect(&LogFont); |
---|
801 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
802 | SetTextColor(hdc,GetSysColor(COLOR_CAPTIONTEXT)); |
---|
803 | rect.left=InsideRect.left+20; |
---|
804 | rect.top=InsideRect.top; |
---|
805 | rect.right=InsideRect.right; |
---|
806 | rect.bottom=InsideRect.top+i3; |
---|
807 | DrawText(hdc,pWindowInfo->GetCaption().c_str(),pWindowInfo->GetCaption().size(),&rect,DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX); |
---|
808 | SelectObject(hdc,hOldFont); |
---|
809 | DeleteObject(hFont); |
---|
810 | |
---|
811 | //ボタン |
---|
812 | if(pWindowInfo->GetStyle()&WS_SYSMENU){ |
---|
813 | //終了ボタン |
---|
814 | size.cx=GetSystemMetrics(SM_CXSIZE)-2; |
---|
815 | size.cy=GetSystemMetrics(SM_CYSIZE)-4; |
---|
816 | pos.x=InsideRect.right-2-size.cx; |
---|
817 | pos.y=InsideRect.top+2; |
---|
818 | DrawButtonEdge(WndNum,&pos,&size); |
---|
819 | |
---|
820 | hResource=LoadResource(hResInst,FindResource(hResInst,MAKEINTRESOURCE(IDB_TITLE_BUTTON_CLOSE),RT_BITMAP)); |
---|
821 | pBitmapInfo=(BITMAPINFO *)LockResource(hResource); |
---|
822 | pByte=(BYTE *)pBitmapInfo+pBitmapInfo->bmiHeader.biSize; |
---|
823 | |
---|
824 | i2=pBitmapInfo->bmiHeader.biWidth*3; |
---|
825 | if(i2%sizeof(LONG)!=0) i2+=sizeof(LONG)-(i2%sizeof(LONG)); |
---|
826 | pByte2=(BYTE *)GlobalAlloc(GMEM_FIXED,pBitmapInfo->bmiHeader.biHeight*i2); |
---|
827 | int x,y; |
---|
828 | for(y=0;y<pBitmapInfo->bmiHeader.biHeight;y++){ |
---|
829 | if(y%2==0) rgb=GetSysColor(COLOR_3DFACE); |
---|
830 | else rgb=RGB(255,255,255); |
---|
831 | for(x=0;x<pBitmapInfo->bmiHeader.biWidth;x++){ |
---|
832 | i4=y*i2+x*3; |
---|
833 | rgb=RGB(pByte[i4+2],pByte[i4+1],pByte[i4]); |
---|
834 | if(rgb==RGB(0,0,0)){ |
---|
835 | rgb=GetSysColor(COLOR_BTNTEXT); |
---|
836 | pByte2[i4+2]=LOBYTE(LOWORD(rgb)); |
---|
837 | pByte2[i4+1]=HIBYTE(LOWORD(rgb)); |
---|
838 | pByte2[i4]=LOBYTE(HIWORD(rgb)); |
---|
839 | } |
---|
840 | else if(rgb==RGB(255,255,255)){ |
---|
841 | rgb=GetSysColor(COLOR_3DFACE); |
---|
842 | pByte2[i4+2]=LOBYTE(LOWORD(rgb)); |
---|
843 | pByte2[i4+1]=HIBYTE(LOWORD(rgb)); |
---|
844 | pByte2[i4]=LOBYTE(HIWORD(rgb)); |
---|
845 | } |
---|
846 | } |
---|
847 | } |
---|
848 | SetStretchBltMode(hdc,COLORONCOLOR); |
---|
849 | StretchDIBits(hdc, |
---|
850 | pos.x+(int)((double)size.cx*0.17), pos.y+(int)((double)size.cy*0.17), |
---|
851 | (int)((double)size.cx*0.65)+1, (int)((double)size.cy*0.65)+1, |
---|
852 | 0,0, |
---|
853 | pBitmapInfo->bmiHeader.biWidth,pBitmapInfo->bmiHeader.biHeight, |
---|
854 | pByte2, |
---|
855 | pBitmapInfo, |
---|
856 | DIB_RGB_COLORS,SRCCOPY); |
---|
857 | GlobalFree(pByte2); |
---|
858 | |
---|
859 | if(pWindowInfo->GetStyle()&WS_MAXIMIZEBOX||pWindowInfo->GetStyle()&WS_MINIMIZEBOX){ |
---|
860 | //最大化ボタン |
---|
861 | size.cx=GetSystemMetrics(SM_CXSIZE)-2; |
---|
862 | size.cy=GetSystemMetrics(SM_CYSIZE)-4; |
---|
863 | pos.x=InsideRect.right-size.cx*2-4; |
---|
864 | pos.y=InsideRect.top+2; |
---|
865 | DrawButtonEdge(WndNum,&pos,&size); |
---|
866 | if(!(pWindowInfo->GetStyle()&WS_MAXIMIZEBOX)){ |
---|
867 | pos.x++; |
---|
868 | pos.y++; |
---|
869 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
870 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
871 | hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH)); |
---|
872 | Rectangle(hdc,pos.x,pos.y,pos.x+size.cx-2,pos.y+size.cy-1); |
---|
873 | MoveToEx(hdc,pos.x,pos.y+1,NULL); |
---|
874 | LineTo(hdc,pos.x+size.cx-2,pos.y+1); |
---|
875 | SelectObject(hdc,hOldPen); |
---|
876 | SelectObject(hdc,hOldBrush); |
---|
877 | DeleteObject(hPen); |
---|
878 | pos.x--; |
---|
879 | pos.y--; |
---|
880 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
881 | } |
---|
882 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
883 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
884 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
885 | hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH)); |
---|
886 | Rectangle(hdc,pos.x,pos.y,pos.x+size.cx-2,pos.y+size.cy-1); |
---|
887 | MoveToEx(hdc,pos.x,pos.y+1,NULL); |
---|
888 | LineTo(hdc,pos.x+size.cx-2,pos.y+1); |
---|
889 | SelectObject(hdc,hOldPen); |
---|
890 | SelectObject(hdc,hOldBrush); |
---|
891 | DeleteObject(hPen); |
---|
892 | |
---|
893 | //最小化ボタン |
---|
894 | size.cx=GetSystemMetrics(SM_CXSIZE)-2; |
---|
895 | size.cy=GetSystemMetrics(SM_CYSIZE)-4; |
---|
896 | pos.x=InsideRect.right-size.cx*3-4; |
---|
897 | pos.y=InsideRect.top+2; |
---|
898 | DrawButtonEdge(WndNum,&pos,&size); |
---|
899 | if(!(pWindowInfo->GetStyle()&WS_MINIMIZEBOX)){ |
---|
900 | pos.x++; |
---|
901 | pos.y++; |
---|
902 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
903 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
904 | MoveToEx(hdc,pos.x+1,pos.y+size.cy-2,NULL); |
---|
905 | LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-2); |
---|
906 | MoveToEx(hdc,pos.x+1,pos.y+size.cy-3,NULL); |
---|
907 | LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-3); |
---|
908 | SelectObject(hdc,hOldPen); |
---|
909 | DeleteObject(hPen); |
---|
910 | pos.x--; |
---|
911 | pos.y--; |
---|
912 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
913 | } |
---|
914 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
915 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
916 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
917 | MoveToEx(hdc,pos.x+1,pos.y+size.cy-2,NULL); |
---|
918 | LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-2); |
---|
919 | MoveToEx(hdc,pos.x+1,pos.y+size.cy-3,NULL); |
---|
920 | LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-3); |
---|
921 | SelectObject(hdc,hOldPen); |
---|
922 | DeleteObject(hPen); |
---|
923 | } |
---|
924 | } |
---|
925 | |
---|
926 | InsideRect.top+=i3; |
---|
927 | } |
---|
928 | |
---|
929 | if( pWindowInfo->HasMenu() ) |
---|
930 | { |
---|
931 | //メニューラインを3DFACEで描画 |
---|
932 | rgb=GetSysColor(COLOR_3DFACE); |
---|
933 | i=GetSystemMetrics(SM_CYMENU); |
---|
934 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
935 | hBrush=CreateSolidBrush(rgb); |
---|
936 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
937 | hOldBrush=(HBRUSH)SelectObject(hdc,hBrush); |
---|
938 | Rectangle(hdc, |
---|
939 | InsideRect.left,InsideRect.top-1,InsideRect.right,InsideRect.top+i); |
---|
940 | SelectObject(hdc,hOldPen); |
---|
941 | SelectObject(hdc,hOldBrush); |
---|
942 | DeleteObject(hPen); |
---|
943 | DeleteObject(hBrush); |
---|
944 | |
---|
945 | InsideRect.top+=i; |
---|
946 | } |
---|
947 | |
---|
948 | //クライアント左上ポジションを設定 |
---|
949 | MdiInfo[WndNum].MdiRadInfo->ClientPos.x=InsideRect.left; |
---|
950 | MdiInfo[WndNum].MdiRadInfo->ClientPos.y=InsideRect.top; |
---|
951 | |
---|
952 | //ExStyleによる縁を描画 |
---|
953 | pos.x=0; |
---|
954 | pos.y=0; |
---|
955 | size.cx=InsideRect.right-InsideRect.left; |
---|
956 | size.cy=InsideRect.bottom-InsideRect.top; |
---|
957 | DrawItemEdgeByExStyle(WndNum,pWindowInfo->GetExStyle(),&pos,&size); |
---|
958 | |
---|
959 | //スクロールバーを描画 |
---|
960 | DrawWindowScrollBar(WndNum,pWindowInfo->GetStyle(),&pos,&size); |
---|
961 | |
---|
962 | //クライアント領域のサイズを設定 |
---|
963 | MdiInfo[WndNum].MdiRadInfo->ClientSize=size; |
---|
964 | |
---|
965 | |
---|
966 | ////////////// |
---|
967 | //背景を描画 |
---|
968 | if(pWindowInfo->GetBackgroundColor()==COLOR_3DFACE){ |
---|
969 | //3DFACE |
---|
970 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DFACE)); |
---|
971 | hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE)); |
---|
972 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
973 | hOldBrush=(HBRUSH)SelectObject(hdc,hBrush); |
---|
974 | Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom); |
---|
975 | SelectObject(hdc,hOldPen); |
---|
976 | SelectObject(hdc,hOldBrush); |
---|
977 | DeleteObject(hPen); |
---|
978 | DeleteObject(hBrush); |
---|
979 | } |
---|
980 | else if(pWindowInfo->GetBackgroundColor()<=0){ |
---|
981 | //色指定 |
---|
982 | hPen=CreatePen(PS_SOLID,0,-pWindowInfo->GetBackgroundColor()); |
---|
983 | hBrush=CreateSolidBrush(-pWindowInfo->GetBackgroundColor()); |
---|
984 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
985 | hOldBrush=(HBRUSH)SelectObject(hdc,hBrush); |
---|
986 | Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom); |
---|
987 | SelectObject(hdc,hOldPen); |
---|
988 | SelectObject(hdc,hOldBrush); |
---|
989 | DeleteObject(hPen); |
---|
990 | DeleteObject(hBrush); |
---|
991 | } |
---|
992 | else if(pWindowInfo->GetBackgroundColor()>=0x1000){ |
---|
993 | //ビットマップ |
---|
994 | BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, projectInfo.resourceManager.bitmapResources ) |
---|
995 | { |
---|
996 | if( projectInfo.resourceManager.bitmapResources[pWindowInfo->GetBackgroundColor()-0x1000].idName == resourceItem.idName ) |
---|
997 | { |
---|
998 | lstrcpy(temporary,resourceItem.filepath.c_str()); |
---|
999 | lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() ); |
---|
1000 | hImage=LoadImage(NULL,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); |
---|
1001 | |
---|
1002 | hBrush=CreatePatternBrush((HBITMAP)hImage); |
---|
1003 | hOldBrush=(HBRUSH)SelectObject(hdc,hBrush); |
---|
1004 | SetBrushOrgEx(hdc,InsideRect.left,InsideRect.top,&pos); |
---|
1005 | PatBlt(hdc, |
---|
1006 | InsideRect.left, InsideRect.top, |
---|
1007 | InsideRect.right-InsideRect.left, InsideRect.bottom-InsideRect.top,PATCOPY); |
---|
1008 | SetBrushOrgEx(hdc,pos.x,pos.y,0); |
---|
1009 | SelectObject(hdc,hOldBrush); |
---|
1010 | DeleteObject(hBrush); |
---|
1011 | DeleteObject(hImage); |
---|
1012 | |
---|
1013 | break; |
---|
1014 | } |
---|
1015 | } |
---|
1016 | } |
---|
1017 | |
---|
1018 | |
---|
1019 | //////////////////////////////////////////// |
---|
1020 | //子ウィンドウ(ダイアログアイテム)を描画 |
---|
1021 | hFont=CreateFontIndirect(&pWindowInfo->LogFont); |
---|
1022 | BOOST_FOREACH( ActiveBasic::PM::ChildWindowInfo *pChildInfo, pWindowInfo->childWindowInfos ) |
---|
1023 | { |
---|
1024 | pos=pChildInfo->pos; |
---|
1025 | size=pChildInfo->size; |
---|
1026 | |
---|
1027 | //ExStyleによる縁を描画 |
---|
1028 | DrawItemEdgeByExStyle(WndNum,pChildInfo->GetExStyle(),&pos,&size); |
---|
1029 | |
---|
1030 | if(pChildInfo->Control==CT_BUTTON){ |
---|
1031 | //////////////////////// |
---|
1032 | // Button コントロール |
---|
1033 | |
---|
1034 | if((pChildInfo->GetStyle()&0x0000000F)==BS_DEFPUSHBUTTON){ |
---|
1035 | //標準のボタンの場合(黒枠描画) |
---|
1036 | DrawRectangleInClient(WndNum, |
---|
1037 | pos.x, pos.y, |
---|
1038 | pos.x+size.cx, pos.y+size.cy, |
---|
1039 | RGB(0,0,0),0,0); |
---|
1040 | pos.x++; |
---|
1041 | pos.y++; |
---|
1042 | size.cx-=2; |
---|
1043 | size.cy-=2; |
---|
1044 | } |
---|
1045 | |
---|
1046 | //ボタンの縁を描画 |
---|
1047 | DrawButtonEdge(WndNum,&pos,&size); |
---|
1048 | |
---|
1049 | if(!(pChildInfo->GetStyle()&(BS_ICON|BS_BITMAP))){ |
---|
1050 | //キャプション テキスト |
---|
1051 | |
---|
1052 | rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1053 | rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1054 | rect.right=pos.x+size.cx-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1055 | rect.bottom=pos.y+size.cy-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1056 | |
---|
1057 | if(pChildInfo->GetStyle()&BS_MULTILINE) i4=0; |
---|
1058 | else i4=DT_SINGLELINE; |
---|
1059 | |
---|
1060 | //ビットを考慮してBS_CENTERを最初に比較する |
---|
1061 | if((pChildInfo->GetStyle()&BS_CENTER)==BS_CENTER) i2=DT_CENTER; |
---|
1062 | else if(pChildInfo->GetStyle()&BS_LEFT) i2=DT_LEFT; |
---|
1063 | else if(pChildInfo->GetStyle()&BS_RIGHT) i2=DT_RIGHT; |
---|
1064 | else i2=DT_CENTER; |
---|
1065 | |
---|
1066 | //ビットを考慮してBS_VCENTERを最初に比較する |
---|
1067 | if((pChildInfo->GetStyle()&BS_VCENTER)==BS_VCENTER) i3=DT_VCENTER; |
---|
1068 | else if(pChildInfo->GetStyle()&BS_TOP) i3=DT_TOP; |
---|
1069 | else if(pChildInfo->GetStyle()&BS_BOTTOM) i3=DT_BOTTOM; |
---|
1070 | else i3=DT_VCENTER; |
---|
1071 | |
---|
1072 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1073 | if(pChildInfo->GetStyle()&WS_DISABLED){ |
---|
1074 | SetTextColor(hdc,RGB(255,255,255)); |
---|
1075 | rc2.left=rect.left+1; |
---|
1076 | rc2.top=rect.top+1; |
---|
1077 | rc2.right=rect.right+1; |
---|
1078 | rc2.bottom=rect.bottom+1; |
---|
1079 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rc2,i4|i2|i3); |
---|
1080 | SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT)); |
---|
1081 | } |
---|
1082 | else SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT)); |
---|
1083 | |
---|
1084 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rect,i4|i2|i3); |
---|
1085 | SelectObject(hdc,hOldFont); |
---|
1086 | } |
---|
1087 | } |
---|
1088 | else if(pChildInfo->Control==CT_CHECKBOX){ |
---|
1089 | ////////////////////////// |
---|
1090 | // CheckBox コントロール |
---|
1091 | |
---|
1092 | if(pChildInfo->GetStyle()&BS_PUSHLIKE){ |
---|
1093 | //ボタンの縁を描画 |
---|
1094 | DrawButtonEdge(WndNum,&pos,&size); |
---|
1095 | } |
---|
1096 | else{ |
---|
1097 | //チェックボックスを描画 |
---|
1098 | size2.cx=13; |
---|
1099 | size2.cy=13; |
---|
1100 | if(pChildInfo->GetStyle()&BS_LEFTTEXT) |
---|
1101 | pos2.x=pos.x+size.cx-size2.cx; |
---|
1102 | else pos2.x=pos.x; |
---|
1103 | if((pChildInfo->GetStyle()&BS_VCENTER)==BS_VCENTER|| |
---|
1104 | (pChildInfo->GetStyle()&BS_VCENTER)==0) |
---|
1105 | pos2.y=pos.y+(size.cy/2)-(size2.cy/2); |
---|
1106 | else if(pChildInfo->GetStyle()&BS_TOP) |
---|
1107 | pos2.y=pos.y+1; |
---|
1108 | else if(pChildInfo->GetStyle()&BS_BOTTOM) |
---|
1109 | pos2.y=pos.y+size.cy-size2.cy-1; |
---|
1110 | DrawItemEdgeByExStyle(WndNum,WS_EX_CLIENTEDGE,&pos2,&size2); |
---|
1111 | |
---|
1112 | if(pChildInfo->GetStyle()&WS_DISABLED) |
---|
1113 | rgb=GetSysColor(COLOR_3DFACE); |
---|
1114 | else rgb=GetSysColor(COLOR_WINDOW); |
---|
1115 | DrawRectangleInClient(WndNum,pos2.x, pos2.y, |
---|
1116 | pos2.x+size2.cx, pos2.y+size2.cy, |
---|
1117 | rgb,rgb,1); |
---|
1118 | if(!(pChildInfo->GetStyle()&BS_LEFTTEXT)) pos.x+=17; |
---|
1119 | else pos.x++; |
---|
1120 | size.cx-=17; |
---|
1121 | } |
---|
1122 | |
---|
1123 | if(!(pChildInfo->GetStyle()&(BS_ICON|BS_BITMAP))){ |
---|
1124 | //キャプション テキスト |
---|
1125 | rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1126 | rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1127 | rect.right=pos.x+size.cx-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1128 | rect.bottom=pos.y+size.cy-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1129 | |
---|
1130 | if(pChildInfo->GetStyle()&BS_MULTILINE) i4=0; |
---|
1131 | else i4=DT_SINGLELINE; |
---|
1132 | |
---|
1133 | //ビットを考慮してBS_CENTERを最初に比較する |
---|
1134 | if((pChildInfo->GetStyle()&BS_CENTER)==BS_CENTER) i2=DT_CENTER; |
---|
1135 | else if(pChildInfo->GetStyle()&BS_LEFT) i2=DT_LEFT; |
---|
1136 | else if(pChildInfo->GetStyle()&BS_RIGHT) i2=DT_RIGHT; |
---|
1137 | else i2=DT_LEFT; |
---|
1138 | |
---|
1139 | //ビットを考慮してBS_VCENTERを最初に比較する |
---|
1140 | if((pChildInfo->GetStyle()&BS_VCENTER)==BS_VCENTER) i3=DT_VCENTER; |
---|
1141 | else if(pChildInfo->GetStyle()&BS_TOP) i3=DT_TOP; |
---|
1142 | else if(pChildInfo->GetStyle()&BS_BOTTOM) i3=DT_BOTTOM; |
---|
1143 | else i3=DT_VCENTER; |
---|
1144 | |
---|
1145 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1146 | if(pChildInfo->GetStyle()&WS_DISABLED){ |
---|
1147 | SetTextColor(hdc,RGB(255,255,255)); |
---|
1148 | rc2.left=rect.left+1; |
---|
1149 | rc2.top=rect.top+1; |
---|
1150 | rc2.right=rect.right+1; |
---|
1151 | rc2.bottom=rect.bottom+1; |
---|
1152 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rc2,i4|i2|i3); |
---|
1153 | SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT)); |
---|
1154 | } |
---|
1155 | else SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT)); |
---|
1156 | |
---|
1157 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rect,i4|i2|i3); |
---|
1158 | SelectObject(hdc,hOldFont); |
---|
1159 | } |
---|
1160 | } |
---|
1161 | else if(pChildInfo->Control==CT_COMBOBOX){ |
---|
1162 | ////////////////////////// |
---|
1163 | // ComboBox コントロール |
---|
1164 | |
---|
1165 | pos2=pos; |
---|
1166 | size2.cx=size.cx; |
---|
1167 | size2.cy=20; |
---|
1168 | DrawItemEdgeByExStyle(WndNum,WS_EX_CLIENTEDGE,&pos2,&size2); |
---|
1169 | |
---|
1170 | //内部 |
---|
1171 | if(pChildInfo->GetStyle()&WS_DISABLED) |
---|
1172 | rgb=GetSysColor(COLOR_3DFACE); |
---|
1173 | else rgb=GetSysColor(COLOR_WINDOW); |
---|
1174 | DrawRectangleInClient(WndNum, |
---|
1175 | pos2.x,pos2.y, |
---|
1176 | pos2.x+size2.cx,pos2.y+size2.cy, |
---|
1177 | rgb,rgb,1); |
---|
1178 | |
---|
1179 | if((pChildInfo->GetStyle()&0x000F)==CBS_SIMPLE){ |
---|
1180 | pos.y+=20; |
---|
1181 | size.cy-=20; |
---|
1182 | DrawItemEdgeByExStyle(WndNum,WS_EX_CLIENTEDGE,&pos,&size); |
---|
1183 | |
---|
1184 | //内部 |
---|
1185 | rgb=GetSysColor(COLOR_WINDOW); |
---|
1186 | DrawRectangleInClient(WndNum, |
---|
1187 | pos.x,pos.y, |
---|
1188 | pos.x+size.cx,pos.y+size.cy, |
---|
1189 | rgb,rgb,1); |
---|
1190 | } |
---|
1191 | else{ |
---|
1192 | //下ボタン |
---|
1193 | pos2.x+=size2.cx-16; |
---|
1194 | size2.cx=16; |
---|
1195 | size2.cy=16; |
---|
1196 | DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos2,&size2); |
---|
1197 | |
---|
1198 | //内部 |
---|
1199 | DrawRectangleInClient(WndNum, |
---|
1200 | pos2.x,pos2.y, |
---|
1201 | pos2.x+size2.cx,pos2.y+size2.cy, |
---|
1202 | GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1); |
---|
1203 | |
---|
1204 | pos2.x--; |
---|
1205 | if(pChildInfo->GetStyle()&WS_DISABLED){ |
---|
1206 | hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT)); |
---|
1207 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
1208 | pos2.x++; |
---|
1209 | pos2.y++; |
---|
1210 | i3=pos2.x+(size2.cx/2); |
---|
1211 | for(i2=3;i2>=0;i2--,i3--){ |
---|
1212 | DrawLineInClient(WndNum,i3,i2+pos2.y+3,i3+((3-i2)*2)+1,i2+pos2.y+3); |
---|
1213 | } |
---|
1214 | SelectObject(hdc,hOldPen); |
---|
1215 | DeleteObject(hPen); |
---|
1216 | rgb=GetSysColor(COLOR_GRAYTEXT); |
---|
1217 | pos2.x--; |
---|
1218 | pos2.y--; |
---|
1219 | } |
---|
1220 | else rgb=GetSysColor(COLOR_BTNTEXT); |
---|
1221 | hPen=CreatePen(PS_SOLID,0,rgb); |
---|
1222 | hOldPen=(HPEN)SelectObject(hdc,hPen); |
---|
1223 | i3=pos2.x+(size2.cx/2); |
---|
1224 | for(i2=3;i2>=0;i2--,i3--){ |
---|
1225 | DrawLineInClient(WndNum,i3,i2+pos2.y+3,i3+((3-i2)*2)+1,i2+pos2.y+3); |
---|
1226 | } |
---|
1227 | SelectObject(hdc,hOldPen); |
---|
1228 | DeleteObject(hPen); |
---|
1229 | } |
---|
1230 | } |
---|
1231 | else if(pChildInfo->Control==CT_EDIT){ |
---|
1232 | ////////////////////// |
---|
1233 | // Edit コントロール |
---|
1234 | |
---|
1235 | //内部 |
---|
1236 | if(pChildInfo->GetStyle()&WS_DISABLED||pChildInfo->GetStyle()&ES_READONLY) |
---|
1237 | rgb=GetSysColor(COLOR_3DFACE); |
---|
1238 | else rgb=GetSysColor(COLOR_WINDOW); |
---|
1239 | DrawRectangleInClient(WndNum, |
---|
1240 | pos.x,pos.y, |
---|
1241 | pos.x+size.cx,pos.y+size.cy, |
---|
1242 | rgb,rgb,1); |
---|
1243 | |
---|
1244 | //キャプション テキスト |
---|
1245 | rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1246 | rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1247 | rect.right=pos.x+size.cx-1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1248 | rect.bottom=pos.y+size.cy-1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1249 | |
---|
1250 | if(pChildInfo->GetStyle()&ES_MULTILINE) i4=0; |
---|
1251 | else i4=DT_SINGLELINE; |
---|
1252 | |
---|
1253 | //ビットを考慮してES_LEFTを最後に検討する |
---|
1254 | if(pChildInfo->GetStyle()&ES_CENTER) i2=DT_CENTER; |
---|
1255 | else if(pChildInfo->GetStyle()&ES_RIGHT) i2=DT_RIGHT; |
---|
1256 | else i2=DT_LEFT; |
---|
1257 | |
---|
1258 | //文字色を設定 |
---|
1259 | if(pChildInfo->GetStyle()&WS_DISABLED) |
---|
1260 | SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT)); |
---|
1261 | else |
---|
1262 | SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT)); |
---|
1263 | |
---|
1264 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1265 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rect,i4|i2); |
---|
1266 | SelectObject(hdc,hOldFont); |
---|
1267 | } |
---|
1268 | |
---|
1269 | else if(pChildInfo->Control==CT_GROUPBOX){ |
---|
1270 | /////////////////////////////////// |
---|
1271 | // グループ ボックス コントロール |
---|
1272 | |
---|
1273 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1274 | GetTextExtentPoint32(hdc,pChildInfo->GetCaption().c_str(),pChildInfo->GetCaption().size(),&size2); |
---|
1275 | |
---|
1276 | //枠を描画 |
---|
1277 | rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1278 | rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y+(size2.cy/2); |
---|
1279 | rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1280 | rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1281 | DrawEdge(hdc,&rect,EDGE_ETCHED,BF_RECT); |
---|
1282 | |
---|
1283 | //ビットを考慮してBS_CENTERを最初に検討する |
---|
1284 | if((pChildInfo->GetStyle()&BS_CENTER)==BS_CENTER){ |
---|
1285 | rect.left=pos.x+(size.cx/2)-(size2.cx/2)-3; |
---|
1286 | rect.right=rect.left+size2.cx+4; |
---|
1287 | } |
---|
1288 | else if(pChildInfo->GetStyle()&BS_RIGHT){ |
---|
1289 | rect.right=pos.x+size.cx-7; |
---|
1290 | rect.left=rect.right-size2.cx-4; |
---|
1291 | } |
---|
1292 | else{ |
---|
1293 | rect.left=pos.x+7; |
---|
1294 | rect.right=rect.left+size2.cx+4; |
---|
1295 | } |
---|
1296 | rect.top=pos.y; |
---|
1297 | rect.bottom=pos.y+size2.cy; |
---|
1298 | |
---|
1299 | if(pWindowInfo->GetBackgroundColor()==COLOR_3DFACE) rgb=GetSysColor(COLOR_3DFACE); |
---|
1300 | else rgb=-pWindowInfo->GetBackgroundColor(); |
---|
1301 | DrawRectangleInClient(WndNum,rect.left,rect.top,rect.right,rect.bottom,rgb,rgb,1); |
---|
1302 | |
---|
1303 | if(!((pChildInfo->GetStyle()&BS_ICON)||(pChildInfo->GetStyle()&BS_BITMAP))){ |
---|
1304 | rect.left+=MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1305 | rect.top+=MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1306 | rect.right+=MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1307 | rect.bottom+=MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1308 | rect.left+=2; |
---|
1309 | rect.right-=2; |
---|
1310 | |
---|
1311 | //テキストを描画 |
---|
1312 | if(pChildInfo->GetStyle()&WS_DISABLED){ |
---|
1313 | SetTextColor(hdc,RGB(255,255,255)); |
---|
1314 | rc2.left=rect.left+1; |
---|
1315 | rc2.top=rect.top+1; |
---|
1316 | rc2.right=rect.right+1; |
---|
1317 | rc2.bottom=rect.bottom+1; |
---|
1318 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rc2,DT_SINGLELINE); |
---|
1319 | SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT)); |
---|
1320 | } |
---|
1321 | else |
---|
1322 | SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT)); |
---|
1323 | |
---|
1324 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rect,DT_SINGLELINE); |
---|
1325 | } |
---|
1326 | SelectObject(hdc,hOldFont); |
---|
1327 | } |
---|
1328 | |
---|
1329 | else if(pChildInfo->Control==CT_HSCROLLBAR){ |
---|
1330 | //////////////////////////////////// |
---|
1331 | // 水平スクロールバー コントロール |
---|
1332 | DrawScrollBar(WndNum,pChildInfo->GetStyle(),0,&pos,&size); |
---|
1333 | } |
---|
1334 | |
---|
1335 | else if(pChildInfo->Control==CT_IMAGEBOX){ |
---|
1336 | ///////////////////// |
---|
1337 | // イメージ ボックス |
---|
1338 | HDC memdc; |
---|
1339 | |
---|
1340 | if((pChildInfo->GetStyle()&0x0000000F)==SS_BLACKFRAME) |
---|
1341 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(0,0,0),0,0); |
---|
1342 | else if((pChildInfo->GetStyle()&0x0000000F)==SS_GRAYFRAME) |
---|
1343 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,GetSysColor(COLOR_3DSHADOW),0,0); |
---|
1344 | else if((pChildInfo->GetStyle()&0x0000000F)==SS_WHITEFRAME) |
---|
1345 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(255,255,255),0,0); |
---|
1346 | else if((pChildInfo->GetStyle()&0x0000001F)==SS_ETCHEDFRAME){ |
---|
1347 | rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1348 | rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1349 | rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1350 | rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1351 | DrawEdge(hdc,&rect,EDGE_ETCHED,BF_RECT); |
---|
1352 | } |
---|
1353 | else if((pChildInfo->GetStyle()&0x0000000F)==SS_BLACKRECT) |
---|
1354 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,GetSysColor(COLOR_3DDKSHADOW),GetSysColor(COLOR_3DDKSHADOW),1); |
---|
1355 | else if((pChildInfo->GetStyle()&0x0000000F)==SS_GRAYRECT) |
---|
1356 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,GetSysColor(COLOR_3DSHADOW),GetSysColor(COLOR_3DSHADOW),1); |
---|
1357 | else if((pChildInfo->GetStyle()&0x0000000F)==SS_WHITERECT) |
---|
1358 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(255,255,255),RGB(255,255,255),1); |
---|
1359 | else if((pChildInfo->GetStyle()&0x0000000F)==SS_ICON) |
---|
1360 | { |
---|
1361 | if(pChildInfo->image.IsFile()) |
---|
1362 | { |
---|
1363 | lstrcpy(temporary,pChildInfo->image.path.c_str()); |
---|
1364 | } |
---|
1365 | else |
---|
1366 | { |
---|
1367 | bool isMatch = false; |
---|
1368 | BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, projectInfo.resourceManager.iconResources ) |
---|
1369 | { |
---|
1370 | if( resourceItem.idName == pChildInfo->image.path ) |
---|
1371 | { |
---|
1372 | isMatch = true; |
---|
1373 | lstrcpy(temporary,resourceItem.filepath.c_str()); |
---|
1374 | break; |
---|
1375 | } |
---|
1376 | } |
---|
1377 | if( !isMatch ) |
---|
1378 | { |
---|
1379 | goto NonIconImage; |
---|
1380 | } |
---|
1381 | } |
---|
1382 | lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() ); |
---|
1383 | hImage=LoadImage(NULL,temporary,IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); |
---|
1384 | if(hImage){ |
---|
1385 | pChildInfo->size.cx=32+(pChildInfo->size.cx-size.cx); |
---|
1386 | pChildInfo->size.cy=32+(pChildInfo->size.cy-size.cy); |
---|
1387 | pos=pChildInfo->pos; |
---|
1388 | size=pChildInfo->size; |
---|
1389 | |
---|
1390 | //ExStyleによる縁を再描画 |
---|
1391 | DrawItemEdgeByExStyle(WndNum,pChildInfo->GetExStyle(),&pos,&size); |
---|
1392 | |
---|
1393 | DrawIcon(hdc, |
---|
1394 | pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
1395 | pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y, |
---|
1396 | (HICON)hImage); |
---|
1397 | DestroyIcon((HICON)hImage); |
---|
1398 | } |
---|
1399 | else{ |
---|
1400 | NonIconImage: |
---|
1401 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(0,0,0),0,0); |
---|
1402 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1403 | rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1404 | rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1405 | rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1406 | rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1407 | SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT)); |
---|
1408 | DrawText(hdc,"icon...",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); |
---|
1409 | SelectObject(hdc,hOldFont); |
---|
1410 | } |
---|
1411 | } |
---|
1412 | else if((pChildInfo->GetStyle()&0x0000000F)==SS_BITMAP){ |
---|
1413 | BITMAP Bitmap; |
---|
1414 | |
---|
1415 | if(pChildInfo->image.IsFile()) |
---|
1416 | { |
---|
1417 | lstrcpy(temporary,pChildInfo->image.path.c_str()); |
---|
1418 | } |
---|
1419 | else{ |
---|
1420 | bool isMatch = false; |
---|
1421 | BOOST_FOREACH( const ActiveBasic::Common::ResourceItem &resourceItem, projectInfo.resourceManager.bitmapResources ) |
---|
1422 | { |
---|
1423 | if( resourceItem.idName == pChildInfo->image.path ) |
---|
1424 | { |
---|
1425 | lstrcpy(temporary,resourceItem.filepath.c_str()); |
---|
1426 | isMatch = true; |
---|
1427 | break; |
---|
1428 | } |
---|
1429 | } |
---|
1430 | if( !isMatch ) |
---|
1431 | { |
---|
1432 | goto NonBitmapImage; |
---|
1433 | } |
---|
1434 | } |
---|
1435 | lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() ); |
---|
1436 | hImage=LoadImage(NULL,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); |
---|
1437 | if(hImage){ |
---|
1438 | GetObject(hImage,sizeof(BITMAP),&Bitmap); |
---|
1439 | |
---|
1440 | pChildInfo->size.cx=Bitmap.bmWidth+(pChildInfo->size.cx-size.cx); |
---|
1441 | pChildInfo->size.cy=Bitmap.bmHeight+(pChildInfo->size.cy-size.cy); |
---|
1442 | pos=pChildInfo->pos; |
---|
1443 | size=pChildInfo->size; |
---|
1444 | |
---|
1445 | //ExStyleによる縁を再描画 |
---|
1446 | DrawItemEdgeByExStyle(WndNum,pChildInfo->GetExStyle(),&pos,&size); |
---|
1447 | |
---|
1448 | memdc=CreateCompatibleDC(hdc); |
---|
1449 | SelectObject(memdc,hImage); |
---|
1450 | BitBlt(hdc, |
---|
1451 | pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
1452 | pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y, |
---|
1453 | size.cx, size.cy, |
---|
1454 | memdc, 0,0, |
---|
1455 | SRCCOPY); |
---|
1456 | DeleteDC(memdc); |
---|
1457 | DeleteObject(hImage); |
---|
1458 | } |
---|
1459 | else{ |
---|
1460 | NonBitmapImage: |
---|
1461 | DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(0,0,0),0,0); |
---|
1462 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1463 | rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1464 | rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1465 | rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1466 | rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1467 | SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT)); |
---|
1468 | DrawText(hdc,"bmp...",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); |
---|
1469 | SelectObject(hdc,hOldFont); |
---|
1470 | } |
---|
1471 | } |
---|
1472 | } |
---|
1473 | |
---|
1474 | else if(pChildInfo->Control==CT_LISTBOX){ |
---|
1475 | ///////////////////////// |
---|
1476 | // ListBox コントロール |
---|
1477 | |
---|
1478 | //内部 |
---|
1479 | if(pChildInfo->GetStyle()&WS_DISABLED) |
---|
1480 | rgb=GetSysColor(COLOR_3DFACE); |
---|
1481 | else rgb=GetSysColor(COLOR_WINDOW); |
---|
1482 | DrawRectangleInClient(WndNum, |
---|
1483 | pos.x,pos.y, |
---|
1484 | pos.x+size.cx,pos.y+size.cy, |
---|
1485 | rgb,rgb,1); |
---|
1486 | |
---|
1487 | if(pChildInfo->GetStyle()&LBS_DISABLENOSCROLL) |
---|
1488 | DrawWindowScrollBar(WndNum,pChildInfo->GetStyle()|WS_DISABLED,&pos,&size); |
---|
1489 | } |
---|
1490 | |
---|
1491 | else if(pChildInfo->Control==CT_LISTVIEW){ |
---|
1492 | ////////////////////////// |
---|
1493 | // ListView コントロール |
---|
1494 | |
---|
1495 | //内部 |
---|
1496 | if(pChildInfo->GetStyle()&WS_DISABLED) |
---|
1497 | rgb=GetSysColor(COLOR_3DFACE); |
---|
1498 | else rgb=GetSysColor(COLOR_WINDOW); |
---|
1499 | DrawRectangleInClient(WndNum, |
---|
1500 | pos.x,pos.y, |
---|
1501 | pos.x+size.cx,pos.y+size.cy, |
---|
1502 | rgb,rgb,1); |
---|
1503 | |
---|
1504 | if((pChildInfo->GetStyle()&LVS_REPORT)&& |
---|
1505 | (!((pChildInfo->GetStyle()&LVS_LIST)==LVS_LIST))){ |
---|
1506 | //レポート ビュー |
---|
1507 | size.cy=16; |
---|
1508 | DrawButtonEdge(WndNum,&pos,&size); |
---|
1509 | } |
---|
1510 | } |
---|
1511 | |
---|
1512 | else if(pChildInfo->Control==CT_PROGRESSBAR){ |
---|
1513 | ///////////////////////////// |
---|
1514 | // ProgressBar コントロール |
---|
1515 | |
---|
1516 | //内部 |
---|
1517 | pos.x++; |
---|
1518 | pos.y++; |
---|
1519 | size.cx-=2; |
---|
1520 | size.cy-=2; |
---|
1521 | rgb=GetSysColor(COLOR_ACTIVECAPTION); |
---|
1522 | if(pChildInfo->GetStyle()&PBS_SMOOTH){ |
---|
1523 | if(pChildInfo->GetStyle()&PBS_VERTICAL){ |
---|
1524 | pos.y+=(long)((double)size.cy*0.3); |
---|
1525 | DrawRectangleInClient(WndNum, |
---|
1526 | pos.x,pos.y, |
---|
1527 | pos.x+size.cx,pos.y+(long)((double)size.cy*0.7), |
---|
1528 | rgb,rgb,1); |
---|
1529 | } |
---|
1530 | else{ |
---|
1531 | DrawRectangleInClient(WndNum, |
---|
1532 | pos.x,pos.y, |
---|
1533 | pos.x+(long)((double)size.cx*0.7),pos.y+size.cy, |
---|
1534 | rgb,rgb,1); |
---|
1535 | } |
---|
1536 | } |
---|
1537 | else{ |
---|
1538 | if(pChildInfo->GetStyle()&PBS_VERTICAL){ |
---|
1539 | pos.y+=(long)((double)size.cy*0.3); |
---|
1540 | i3=(size.cx*2)/3; |
---|
1541 | i2=(int)((double)size.cy*0.7); |
---|
1542 | for(;i2>i3;i2-=i3+2){ |
---|
1543 | DrawRectangleInClient(WndNum, |
---|
1544 | pos.x,pos.y+i2-i3, |
---|
1545 | pos.x+size.cx,pos.y+i2, |
---|
1546 | rgb,rgb,1); |
---|
1547 | } |
---|
1548 | } |
---|
1549 | else{ |
---|
1550 | i3=(size.cy*2)/3; |
---|
1551 | i4=(int)((double)size.cx*0.7); |
---|
1552 | for(i2=0;i2+i3<i4;i2+=i3+2){ |
---|
1553 | DrawRectangleInClient(WndNum, |
---|
1554 | pos.x+i2,pos.y, |
---|
1555 | pos.x+i2+i3,pos.y+size.cy, |
---|
1556 | rgb,rgb,1); |
---|
1557 | } |
---|
1558 | } |
---|
1559 | } |
---|
1560 | } |
---|
1561 | |
---|
1562 | else if(pChildInfo->Control==CT_RADIOBUTTON){ |
---|
1563 | ///////////////////////////// |
---|
1564 | // RadioButton コントロール |
---|
1565 | |
---|
1566 | if(pChildInfo->GetStyle()&BS_PUSHLIKE){ |
---|
1567 | //ボタンの縁を描画 |
---|
1568 | DrawButtonEdge(WndNum,&pos,&size); |
---|
1569 | } |
---|
1570 | else{ |
---|
1571 | //ラジオボタンを描画 |
---|
1572 | size2.cx=12; |
---|
1573 | size2.cy=12; |
---|
1574 | if(pChildInfo->GetStyle()&BS_LEFTTEXT) |
---|
1575 | pos2.x=pos.x+size.cx-size2.cx; |
---|
1576 | else pos2.x=pos.x+1; |
---|
1577 | if((pChildInfo->GetStyle()&BS_VCENTER)==BS_VCENTER|| |
---|
1578 | (pChildInfo->GetStyle()&BS_VCENTER)==0) |
---|
1579 | pos2.y=pos.y+(size.cy/2)-(size2.cy/2); |
---|
1580 | else if(pChildInfo->GetStyle()&BS_TOP) |
---|
1581 | pos2.y=pos.y+1; |
---|
1582 | else if(pChildInfo->GetStyle()&BS_BOTTOM) |
---|
1583 | pos2.y=pos.y+size.cy-size2.cy-1; |
---|
1584 | |
---|
1585 | hResource=LoadResource(hResInst,FindResource(hResInst,MAKEINTRESOURCE(IDB_RADIOBUTTON),RT_BITMAP)); |
---|
1586 | pBitmapInfo=(BITMAPINFO *)LockResource(hResource); |
---|
1587 | pByte=(BYTE *)pBitmapInfo+pBitmapInfo->bmiHeader.biSize; |
---|
1588 | pByte2=(BYTE *)GlobalAlloc(GMEM_FIXED,pBitmapInfo->bmiHeader.biWidth*pBitmapInfo->bmiHeader.biHeight*3); |
---|
1589 | for(i2=0,i3=0;i2<pBitmapInfo->bmiHeader.biWidth*pBitmapInfo->bmiHeader.biHeight;i2++,i3+=3){ |
---|
1590 | rgb=RGB(pByte[i3+2],pByte[i3+1],pByte[i3]); |
---|
1591 | |
---|
1592 | if(rgb==RGB(255,255,0)){ |
---|
1593 | if(pWindowInfo->GetBackgroundColor()==COLOR_3DFACE) rgb=GetSysColor(COLOR_3DFACE); |
---|
1594 | else rgb=-pWindowInfo->GetBackgroundColor(); |
---|
1595 | } |
---|
1596 | |
---|
1597 | //影側 |
---|
1598 | else if(rgb==RGB(0,0,0)) rgb=GetSysColor(COLOR_3DSHADOW); |
---|
1599 | else if(rgb==RGB(255,0,0)) rgb=GetSysColor(COLOR_3DDKSHADOW); |
---|
1600 | |
---|
1601 | //光源側 |
---|
1602 | else if(rgb==RGB(0,0,255)) rgb=GetSysColor(COLOR_3DLIGHT); |
---|
1603 | else if(rgb==RGB(0,255,0)) rgb=GetSysColor(COLOR_3DHIGHLIGHT); |
---|
1604 | |
---|
1605 | //内部 |
---|
1606 | else if(rgb==RGB(255,255,255)){ |
---|
1607 | if(pChildInfo->GetStyle()&WS_DISABLED) rgb=GetSysColor(COLOR_3DFACE); |
---|
1608 | } |
---|
1609 | |
---|
1610 | pByte2[i3+2]=LOBYTE(LOWORD(rgb)); |
---|
1611 | pByte2[i3+1]=HIBYTE(LOWORD(rgb)); |
---|
1612 | pByte2[i3]=LOBYTE(HIWORD(rgb)); |
---|
1613 | } |
---|
1614 | SetDIBitsToDevice(hdc, |
---|
1615 | pos2.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x, |
---|
1616 | pos2.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y, |
---|
1617 | pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight, |
---|
1618 | 0,0, |
---|
1619 | 0,pBitmapInfo->bmiHeader.biHeight, |
---|
1620 | pByte2, |
---|
1621 | pBitmapInfo, |
---|
1622 | DIB_RGB_COLORS); |
---|
1623 | GlobalFree(pByte2); |
---|
1624 | |
---|
1625 | if(!(pChildInfo->GetStyle()&BS_LEFTTEXT)) pos.x+=17; |
---|
1626 | else pos.x++; |
---|
1627 | size.cx-=17; |
---|
1628 | } |
---|
1629 | |
---|
1630 | if(!(pChildInfo->GetStyle()&(BS_ICON|BS_BITMAP))){ |
---|
1631 | //キャプション テキスト |
---|
1632 | rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1633 | rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1634 | rect.right=pos.x+size.cx-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1635 | rect.bottom=pos.y+size.cy-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1636 | |
---|
1637 | if(pChildInfo->GetStyle()&BS_MULTILINE) i4=0; |
---|
1638 | else i4=DT_SINGLELINE; |
---|
1639 | |
---|
1640 | //ビットを考慮してBS_CENTERを最初に比較する |
---|
1641 | if((pChildInfo->GetStyle()&BS_CENTER)==BS_CENTER) i2=DT_CENTER; |
---|
1642 | else if(pChildInfo->GetStyle()&BS_LEFT) i2=DT_LEFT; |
---|
1643 | else if(pChildInfo->GetStyle()&BS_RIGHT) i2=DT_RIGHT; |
---|
1644 | else i2=DT_LEFT; |
---|
1645 | |
---|
1646 | //ビットを考慮してBS_VCENTERを最初に比較する |
---|
1647 | if((pChildInfo->GetStyle()&BS_VCENTER)==BS_VCENTER) i3=DT_VCENTER; |
---|
1648 | else if(pChildInfo->GetStyle()&BS_TOP) i3=DT_TOP; |
---|
1649 | else if(pChildInfo->GetStyle()&BS_BOTTOM) i3=DT_BOTTOM; |
---|
1650 | else i3=DT_VCENTER; |
---|
1651 | |
---|
1652 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1653 | if(pChildInfo->GetStyle()&WS_DISABLED){ |
---|
1654 | SetTextColor(hdc,RGB(255,255,255)); |
---|
1655 | rc2.left=rect.left+1; |
---|
1656 | rc2.top=rect.top+1; |
---|
1657 | rc2.right=rect.right+1; |
---|
1658 | rc2.bottom=rect.bottom+1; |
---|
1659 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rc2,i4|i2|i3); |
---|
1660 | SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT)); |
---|
1661 | } |
---|
1662 | else SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT)); |
---|
1663 | |
---|
1664 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rect,i4|i2|i3); |
---|
1665 | SelectObject(hdc,hOldFont); |
---|
1666 | } |
---|
1667 | } |
---|
1668 | |
---|
1669 | else if(pChildInfo->Control==CT_STATIC){ |
---|
1670 | //////////////////////// |
---|
1671 | // Static コントロール |
---|
1672 | |
---|
1673 | //キャプション テキスト |
---|
1674 | rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1675 | rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1676 | rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x; |
---|
1677 | rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y; |
---|
1678 | |
---|
1679 | //ビットを考慮してSS_LEFTを最後に検討する |
---|
1680 | if(pChildInfo->GetStyle()&SS_CENTER) i2=DT_CENTER; |
---|
1681 | else if(pChildInfo->GetStyle()&SS_RIGHT) i2=DT_RIGHT; |
---|
1682 | else i2=DT_LEFT; |
---|
1683 | |
---|
1684 | hOldFont=(HFONT)SelectObject(hdc,hFont); |
---|
1685 | if(pChildInfo->GetStyle()&WS_DISABLED){ |
---|
1686 | SetTextColor(hdc,RGB(255,255,255)); |
---|
1687 | rc2.left=rect.left+1; |
---|
1688 | rc2.top=rect.top+1; |
---|
1689 | rc2.right=rect.right+1; |
---|
1690 | rc2.bottom=rect.bottom+1; |
---|
1691 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rc2,i2); |
---|
1692 | SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT)); |
---|
1693 | } |
---|
1694 | else |
---|
1695 | SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT)); |
---|
1696 | |
---|
1697 | //折り返すかどうか |
---|
1698 | if(!(pChildInfo->GetStyle()&SS_LEFTNOWORDWRAP)){ |
---|
1699 | i2|=DT_WORDBREAK; |
---|
1700 | } |
---|
1701 | |
---|
1702 | DrawText(hdc,pChildInfo->GetCaption().c_str(),-1,&rect,i2); |
---|
1703 | SelectObject(hdc,hOldFont); |
---|
1704 | } |
---|
1705 | |
---|
1706 | else if(pChildInfo->Control==CT_TRACKBAR){ |
---|
1707 | ////////////////////////// |
---|
1708 | // TrackBar コントロール |
---|
1709 | |
---|
1710 | if(pChildInfo->GetStyle()&TBS_VERT){ |
---|
1711 | pos.x+=2; |
---|
1712 | size.cx-=2; |
---|
1713 | if(size.cx>21) size.cx=21; |
---|
1714 | pos.y+=8; |
---|
1715 | size.cy-=16; |
---|
1716 | |
---|
1717 | rect.left=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x+(size.cx/2)-2; |
---|
1718 | rect.right=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x+(size.cx/2)+2; |
---|
1719 | rect.top=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y; |
---|
1720 | rect.bottom=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y+size.cy; |
---|
1721 | DrawEdge(hdc,&rect,EDGE_SUNKEN,BF_RECT); |
---|
1722 | |
---|
1723 | size.cy=size.cx/2; |
---|
1724 | DrawButtonEdge(WndNum,&pos,&size); |
---|
1725 | } |
---|
1726 | else{ |
---|
1727 | pos.x+=8; |
---|
1728 | size.cx-=16; |
---|
1729 | pos.y+=2; |
---|
1730 | size.cy-=2; |
---|
1731 | if(size.cy>21) size.cy=21; |
---|
1732 | |
---|
1733 | rect.left=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x; |
---|
1734 | rect.right=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x+size.cx; |
---|
1735 | rect.top=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y+(size.cy/2)-2; |
---|
1736 | rect.bottom=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y+(size.cy/2)+2; |
---|
1737 | DrawEdge(hdc,&rect,EDGE_SUNKEN,BF_RECT); |
---|
1738 | |
---|
1739 | size.cx=size.cy/2; |
---|
1740 | DrawButtonEdge(WndNum,&pos,&size); |
---|
1741 | } |
---|
1742 | } |
---|
1743 | |
---|
1744 | else if(pChildInfo->Control==CT_TREEVIEW){ |
---|
1745 | ////////////////////////// |
---|
1746 | // TreeView コントロール |
---|
1747 | |
---|
1748 | //内部 |
---|
1749 | if(pChildInfo->GetStyle()&WS_DISABLED) |
---|
1750 | rgb=GetSysColor(COLOR_3DFACE); |
---|
1751 | else rgb=GetSysColor(COLOR_WINDOW); |
---|
1752 | DrawRectangleInClient(WndNum, |
---|
1753 | pos.x,pos.y, |
---|
1754 | pos.x+size.cx,pos.y+size.cy, |
---|
1755 | rgb,rgb,1); |
---|
1756 | } |
---|
1757 | |
---|
1758 | else if(pChildInfo->Control==CT_UPDOWN){ |
---|
1759 | /////////////////////////////// |
---|
1760 | // アップ ダウン コントロール |
---|
1761 | if(pChildInfo->GetStyle()&UDS_HORZ) |
---|
1762 | DrawUpDownControl(WndNum,pChildInfo->GetStyle(),0,&pos,&size); |
---|
1763 | else DrawUpDownControl(WndNum,pChildInfo->GetStyle(),1,&pos,&size); |
---|
1764 | } |
---|
1765 | |
---|
1766 | else if(pChildInfo->Control==CT_VSCROLLBAR){ |
---|
1767 | //////////////////////////////////// |
---|
1768 | // 垂直スクロールバー コントロール |
---|
1769 | DrawScrollBar(WndNum,pChildInfo->GetStyle(),1,&pos,&size); |
---|
1770 | } |
---|
1771 | } |
---|
1772 | DeleteObject(hFont); |
---|
1773 | } |
---|
1774 | void DrawRadWindow(int WndNum,const ActiveBasic::PM::WindowInfo *pWindowInfo){ |
---|
1775 | extern MDIINFO MdiInfo[MAX_WNDNUM]; |
---|
1776 | HBRUSH hOldBrush; |
---|
1777 | POINT pos; |
---|
1778 | |
---|
1779 | SetBkMode(MdiInfo[WndNum].MdiRadInfo->hMemDC,TRANSPARENT); |
---|
1780 | |
---|
1781 | hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,GetStockObject(WHITE_BRUSH)); |
---|
1782 | PatBlt(MdiInfo[WndNum].MdiRadInfo->hMemDC,0,0,ScreenX*2,ScreenY*2,PATCOPY); |
---|
1783 | SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldBrush); |
---|
1784 | |
---|
1785 | pos.x=LEVER_THICK; |
---|
1786 | pos.y=LEVER_THICK; |
---|
1787 | DesigningWindow(WndNum,MdiInfo[WndNum].MdiRadInfo->hMemDC,&pos,pWindowInfo); |
---|
1788 | |
---|
1789 | InvalidateRect(MdiInfo[WndNum].MdiRadInfo->hRad,NULL,0); |
---|
1790 | } |
---|