source: dev/trunk/ab5.0/abdev/abdev/RadSupport.cpp@ 616

Last change on this file since 616 was 616, checked in by dai_9181, 16 years ago

CHILDINFOの管理方法をstd::vectorに変更。

File size: 11.8 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5#if defined(JPN)
6//日本語
7#include "rad_msg_jpn.h"
8#else
9//英語
10#include "rad_msg_eng.h"
11#endif
12
13int bSupportDlg_NoChange;
14
15LRESULT CALLBACK TestWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
16 switch(message){
17 case WM_CREATE:
18 SetPosCenter(hwnd);
19 break;
20 case WM_KEYDOWN:
21 if(wParam==VK_ESCAPE) DestroyWindow(hwnd);
22 break;
23 case WM_PAINT:
24 break;
25 case WM_CLOSE:
26 DestroyWindow(hwnd);
27 break;
28 case WM_DESTROY:
29 PostQuitMessage(0);
30 break;
31 }
32 return DefWindowProc(hwnd,message,wParam,lParam);
33}
34
35void ShowTestWindow(int WndInfoNum){
36 extern HINSTANCE hInst;
37 extern HANDLE hHeap;
38 static HWND hWnd;
39 HWND hChild;
40 HFONT *lphFont;
41 HANDLE *lphImage;
42 int i2,i3;
43 char temporary[MAX_PATH];
44
45 if(hWnd){
46 OpenIcon(hWnd);
47
48 _endthread();
49 return;
50 }
51
52 WindowInfo *pWindowInfo = ProjectInfo.windowInfos[WndInfoNum];
53
54 if(pWindowInfo->style&WS_CHILD){
55 //"チャイルドウィンドウをテスト表示することはできません"
56 MessageBox(hOwner,STRING_RAD_ERROR_CANT_CHILDTEST,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
57
58 _endthread();
59 return;
60 }
61
62 lphFont=(HFONT *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->childWindowInfos.size()*sizeof(DWORD));
63 lphImage=(HANDLE *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->childWindowInfos.size()*sizeof(DWORD));
64
65 //テスト用のメインウィンドウを作成
66 hWnd=CreateWindowEx(pWindowInfo->ExStyle,
67 "TestWindow",
68 pWindowInfo->name,
69 pWindowInfo->style|WS_VISIBLE,
70 CW_USEDEFAULT,CW_USEDEFAULT,
71 pWindowInfo->size.cx,pWindowInfo->size.cy,
72 hOwner,NULL,hInst,NULL);
73
74 //子ウィンドウ作成
75 for(i2=0;i2<pWindowInfo->childWindowInfos.size();i2++){
76 if(pWindowInfo->childWindowInfos[i2]->Control==CT_UPDOWN){
77 CreateUpDownControl(
78 pWindowInfo->childWindowInfos[i2]->style,
79 pWindowInfo->childWindowInfos[i2]->pos.x,pWindowInfo->childWindowInfos[i2]->pos.y,
80 pWindowInfo->childWindowInfos[i2]->size.cx,pWindowInfo->childWindowInfos[i2]->size.cy,
81 hWnd,0,hInst,
82 0,0,100,0);
83 }
84 else{
85 GetItemClassName(temporary,pWindowInfo->childWindowInfos[i2]->Control);
86 hChild=CreateWindowEx(
87 pWindowInfo->childWindowInfos[i2]->ExStyle,
88 temporary,
89 pWindowInfo->childWindowInfos[i2]->caption,
90 pWindowInfo->childWindowInfos[i2]->style,
91 pWindowInfo->childWindowInfos[i2]->pos.x,
92 pWindowInfo->childWindowInfos[i2]->pos.y,
93 pWindowInfo->childWindowInfos[i2]->size.cx,
94 pWindowInfo->childWindowInfos[i2]->size.cy,
95 hWnd,0,hInst,0);
96
97 lphFont[i2]=CreateFontIndirect(&pWindowInfo->LogFont);
98 SendMessage(hChild,WM_SETFONT,(long)lphFont[i2],0);
99
100 if(pWindowInfo->childWindowInfos[i2]->Control==CT_IMAGEBOX){
101 ///////////////////////////
102 // イメージ ボックスの場合
103 ///////////////////////////
104 if((pWindowInfo->childWindowInfos[i2]->style&0x000F)==SS_ICON){
105 if(pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.type==IMGTYPE_FILE)
106 lstrcpy(temporary,pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.path);
107 else{
108 for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
109 if(lstrcmp(pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.path,
110 ProjectInfo.res.pIconResInfo[i3].IdName)==0) break;
111 }
112 if(i3==ProjectInfo.res.NumberOfIconRes) temporary[0]=0;
113 else lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i3].path);
114 }
115 if(temporary[0]){
116 GetFullPath(temporary,ProjectInfo.dir);
117 lphImage[i2]=LoadImage(hInst,temporary,IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
118
119 SendMessage(hChild,STM_SETICON,(long)lphImage[i2],0);
120 }
121 }
122 else if((pWindowInfo->childWindowInfos[i2]->style&0x000F)==SS_BITMAP){
123 if(pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.type==IMGTYPE_FILE)
124 lstrcpy(temporary,pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.path);
125 else{
126 for(i3=0;i3<ProjectInfo.res.NumberOfBitmapRes;i3++){
127 if(lstrcmp(pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.path,
128 ProjectInfo.res.pBitmapResInfo[i3].IdName)==0) break;
129 }
130 if(i3==ProjectInfo.res.NumberOfBitmapRes) temporary[0]=0;
131 else lstrcpy(temporary,ProjectInfo.res.pBitmapResInfo[i3].path);
132 }
133 if(temporary[0]){
134 GetFullPath(temporary,ProjectInfo.dir);
135 lphImage[i2]=LoadImage(hInst,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
136
137 SendMessage(hChild,STM_SETIMAGE,IMAGE_BITMAP,(long)lphImage[i2]);
138 }
139 }
140 }
141 }
142 }
143
144 MSG msg;
145 while(GetMessage(&msg,NULL,0,0)){
146 if(IsDialogMessage(hWnd,&msg)) continue;
147 TranslateMessage(&msg);
148 DispatchMessage(&msg);
149 }
150
151 //フォントハンドルを破棄
152 for(i2=0;i2<pWindowInfo->childWindowInfos.size();i2++){
153 if(lphFont[i2]) DeleteObject(lphFont[i2]);
154 }
155 HeapDefaultFree(lphFont);
156
157 //イメージハンドルを破棄
158 for(i2=0;i2<pWindowInfo->childWindowInfos.size();i2++){
159 if(lphImage[i2]){
160 if((pWindowInfo->childWindowInfos[i2]->style&0x000F)==SS_ICON)
161 DestroyIcon((HICON)lphImage[i2]);
162 else if((pWindowInfo->childWindowInfos[i2]->style&0x000F)==SS_BITMAP)
163 DeleteObject(lphImage[i2]);
164 }
165 }
166 HeapDefaultFree(lphImage);
167
168 hWnd=0;
169
170 _endthread();
171}
172
173void SetSupportDlgData(int WndNum, const WindowInfo &windowInfo )
174{
175 ////////////////////////////////////
176 // サポートダイアログの内容をセット
177 ////////////////////////////////////
178 extern MDIINFO MdiInfo[MAX_WNDNUM];
179 extern RADINFO RadInfo;
180 char temporary[255];
181 HWND hSupport;
182
183 bSupportDlg_NoChange=1;
184
185 hSupport=MdiInfo[WndNum].MdiRadInfo->hSupport;
186
187 if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END&&
188 (!(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=-1&&MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1))){
189 sprintf(temporary,"%d",RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x);
190 SetDlgItemText(hSupport,IDC_XPOS,temporary);
191
192 sprintf(temporary,"%d",RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
193 SetDlgItemText(hSupport,IDC_YPOS,temporary);
194
195 sprintf(temporary,"%d",RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left);
196 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
197
198 sprintf(temporary,"%d",RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
199 SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
200 }
201 else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
202 EnableWindow(GetDlgItem(hSupport,IDC_XPOS),0);
203 EnableWindow(GetDlgItem(hSupport,IDC_YPOS),0);
204 EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
205 EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
206 EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
207 EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
208
209 SetDlgItemText(hSupport,IDC_XPOS,"");
210 SetDlgItemText(hSupport,IDC_YPOS,"");
211
212 sprintf(temporary,"%d",windowInfo.size.cx);
213 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
214
215 sprintf(temporary,"%d",windowInfo.size.cy);
216 SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
217 }
218 else{
219 EnableWindow(GetDlgItem(hSupport,IDC_XPOS),1);
220 EnableWindow(GetDlgItem(hSupport,IDC_YPOS),1);
221
222 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1){
223 EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
224 EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
225 EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),0);
226 EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),0);
227
228 SetDlgItemText(hSupport,IDC_XPOS,"");
229 SetDlgItemText(hSupport,IDC_YPOS,"");
230 SetDlgItemText(hSupport,IDC_WIDTH,"");
231 SetDlgItemText(hSupport,IDC_HEIGHT,"");
232 }
233 else{
234 EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),1);
235 EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),1);
236 EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
237 EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
238
239 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.x);
240 SetDlgItemText(hSupport,IDC_XPOS,temporary);
241
242 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.y);
243 SetDlgItemText(hSupport,IDC_YPOS,temporary);
244
245 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->size.cx);
246 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
247
248 sprintf(temporary,"%d",windowInfo.childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->size.cy);
249 SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
250 }
251 }
252
253 bSupportDlg_NoChange=0;
254}
255
256BOOL CALLBACK DlgRadSupport(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
257 extern MDIINFO MdiInfo[MAX_WNDNUM];
258 static BOOL bTimer;
259 int i,i3;
260 char temporary[255];
261 POINTANDSIZE PointAndSize;
262 RECT rect;
263
264 switch(message){
265 case WM_INITDIALOG:
266 SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_XPOS),0);
267 SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_YPOS),0);
268 SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_WIDTH),0);
269 SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_HEIGHT),0);
270
271 SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETRANGE32,0,0x7FFF);
272 SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETRANGE32,0,0x7FFF);
273 SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETRANGE32,0,0x7FFF);
274 SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETRANGE32,0,0x7FFF);
275 return 0;
276 case WM_COMMAND:
277 switch(LOWORD(wParam)){
278 case IDC_TEST:
279 _beginthread(
280 (void (__cdecl *)(void *))ShowTestWindow,
281 0,
282 (void *)GetWndInfoNum(MdiInfo[GetWndNum(GetParent(hwnd))].path));
283 return 1;
284 case IDC_XPOS:
285 case IDC_YPOS:
286 case IDC_WIDTH:
287 case IDC_HEIGHT:
288 if(HIWORD(wParam)==EN_UPDATE){
289 if(bSupportDlg_NoChange) return 1;
290
291 if(bTimer) KillTimer(hwnd,0);
292
293 bTimer=1;
294 SetTimer(hwnd,0,650,NULL);
295 }
296 return 1;
297 }
298 break;
299 case WM_TIMER:
300 KillTimer(hwnd,0);
301 bTimer=0;
302
303 i=GetWndNum(GetParent(hwnd));
304 WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[i].path);
305
306 for(i3=0;;i3++){
307 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
308 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i].MdiRadInfo->SelectingItem[i3]]->pos;
309 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i].MdiRadInfo->SelectingItem[i3]]->size;
310 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
311 }
312
313 GetDlgItemText(hwnd,IDC_XPOS,temporary,255);
314 if(temporary[0]){
315 for(i3=0;;i3++){
316 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
317 pWindowInfo->childWindowInfos[MdiInfo[i].MdiRadInfo->SelectingItem[i3]]->pos.x=atol(temporary);
318 }
319 }
320
321 GetDlgItemText(hwnd,IDC_YPOS,temporary,255);
322 if(temporary[0]){
323 for(i3=0;;i3++){
324 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
325 pWindowInfo->childWindowInfos[MdiInfo[i].MdiRadInfo->SelectingItem[i3]]->pos.y=atol(temporary);
326 }
327 }
328
329 GetDlgItemText(hwnd,IDC_WIDTH,temporary,255);
330 if(temporary[0]){
331 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
332 pWindowInfo->size.cx=atol(temporary);
333 else{
334 for(i3=0;;i3++){
335 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
336 pWindowInfo->childWindowInfos[MdiInfo[i].MdiRadInfo->SelectingItem[i3]]->size.cx=atol(temporary);
337 }
338 }
339 }
340
341 GetDlgItemText(hwnd,IDC_HEIGHT,temporary,255);
342 if(temporary[0]){
343 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
344 pWindowInfo->size.cy=atol(temporary);
345 else{
346 for(i3=0;;i3++){
347 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
348 pWindowInfo->childWindowInfos[MdiInfo[i].MdiRadInfo->SelectingItem[i3]]->size.cy=atol(temporary);
349 }
350 }
351 }
352
353 //描画
354 DrawRadWindow(i,pWindowInfo);
355
356 //スクロールバーをリセット
357 GetClientRect(MdiInfo[i].MdiRadInfo->hRad,&rect);
358 ResetScrollbarOfRadEditor(i,rect.right,rect.bottom);
359
360 return 1;
361 }
362 return 0;
363}
Note: See TracBrowser for help on using the repository browser.