source: dev/trunk/ab5.0/abdev/abdev/RadProc.cpp@ 609

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

ProjectInfo構造体のpWindowInfoメンバをwindowInfosメンバに置き換えた。

File size: 73.7 KB
Line 
1#include "stdafx.h"
2
3
4#include "common.h"
5
6void NewRadWindow(int WndInfoNum){
7 extern HINSTANCE hInst,hResInst;
8 extern HWND hDocCombo;
9 extern PROJECTINFO ProjectInfo;
10 extern MDIINFO MdiInfo[MAX_WNDNUM];
11 int i,i2;
12 HWND hChild;
13 RECT rect;
14 MDICREATESTRUCT mdic;
15 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
16
17 //すでに指定されたファイルが開かれている場合
18 hChild=GetWindow(hClient,GW_CHILD);
19 while(hChild){
20 i=GetWndNum(hChild);
21 if(MdiInfo[i].DocType==WNDTYPE_RAD){
22 if(lstrcmpi(MdiInfo[i].path,pWindowInfo->name)==0) break;
23 }
24 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
25 }
26 if(hChild){
27 BringWindowToTop(hChild);
28 return;
29 }
30
31 mdic.szTitle=pWindowInfo->name;
32 mdic.szClass="MDIClientWindow_Rad";
33 mdic.hOwner=hInst;
34 mdic.x=CW_USEDEFAULT;
35 mdic.y=CW_USEDEFAULT;
36 mdic.cx=CW_USEDEFAULT;
37 mdic.cy=CW_USEDEFAULT;
38
39 hChild=GetWindow(hClient,GW_CHILD);
40 if(IsWindow(hChild)){
41 if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE|WS_CLIPCHILDREN;
42 else mdic.style=0;
43 }
44 else{
45 if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE|WS_CLIPCHILDREN;
46 else mdic.style=0;
47 }
48
49 mdic.lParam=0;
50 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic); //ウィンドウ作成
51
52
53 //////////////////////
54 // 子ウィンドウを作成
55 //////////////////////
56
57 //ツールウィンドウを作成
58 HWND hTools;
59 hTools=CreateWindow("RadToolsWindow",NULL,
60 WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_CLIPCHILDREN,
61 0,0,0,0,
62 hChild,NULL,hInst,NULL);
63
64 //プロパティウィンドウを作成
65 HWND hProperty;
66 hProperty=CreateWindowEx(WS_EX_CLIENTEDGE,"RadPropertyWindow",NULL,
67 WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_CLIPCHILDREN,
68 0,0,0,0,
69 hChild,NULL,hInst,NULL);
70
71 //内部RADウィンドウを作成
72 HWND hRad;
73 hRad=CreateWindowEx(WS_EX_CLIENTEDGE,"RadWindow",NULL,
74 WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE|WS_CLIPCHILDREN,
75 0,0,0,0,
76 hChild,NULL,hInst,NULL);
77
78 //サポートウィンドウを作成
79 HWND hSupport;
80 hSupport=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_SUPPORT),hChild,(DLGPROC)DlgRadSupport);
81
82 //ウィンドウのID登録
83 HDC hdc;
84 for(i=0;i<MAX_WNDNUM;i++){
85 if(MdiInfo[i].hwnd==0){
86 MdiInfo[i].hwnd=hChild;
87 MdiInfo[i].DocType=WNDTYPE_RAD;
88 MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pWindowInfo->name)+1);
89 lstrcpy(MdiInfo[i].title,pWindowInfo->name);
90 MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pWindowInfo->name)+1);
91 lstrcpy(MdiInfo[i].path,pWindowInfo->name);
92
93
94 ////////////////////////////
95 // MDIRADINFO構造体をセット
96 ////////////////////////////
97
98 MdiInfo[i].MdiRadInfo=(MDIRADINFO *)GlobalAlloc(GPTR,sizeof(MDIRADINFO));
99
100 MdiInfo[i].MdiRadInfo->hTools=hTools;
101 MdiInfo[i].MdiRadInfo->hProperty=hProperty;
102 MdiInfo[i].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW),hProperty,(DLGPROC)RadProperty_WindowProc);
103
104 SCROLLINFO ScrollInfo;
105 ScrollInfo.cbSize=sizeof(SCROLLINFO);
106 ScrollInfo.fMask=SIF_POS;
107 ScrollInfo.nPos=0;
108 SetScrollInfo(MdiInfo[i].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
109
110 MdiInfo[i].MdiRadInfo->hRad=hRad;
111
112 MdiInfo[i].MdiRadInfo->hSupport=hSupport;
113
114 hdc=GetDC(hRad);
115 MdiInfo[i].MdiRadInfo->hBitmap=CreateCompatibleBitmap(hdc,ScreenX*2,ScreenY*2);
116 MdiInfo[i].MdiRadInfo->hMemDC=CreateCompatibleDC(hdc);
117 MdiInfo[i].MdiRadInfo->hOldBitmap=
118 (HBITMAP)SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,MdiInfo[i].MdiRadInfo->hBitmap);
119 ReleaseDC(hRad,hdc);
120
121 for(i2=0;i2<MAX_RAD_SELITEM;i2++) MdiInfo[i].MdiRadInfo->SelectingItem[i2]=-1;
122 MdiInfo[i].MdiRadInfo->ButtonSelect=IDC_TOOL_MOUSE;
123
124 //変更情報を初期化
125 MdiInfo[i].MdiRadInfo->undo.NowPos=0;
126 memset(MdiInfo[i].MdiRadInfo->undo.Command,0,sizeof(int)*MAX_UNDONUM);
127
128
129 DrawRadWindow(i,pWindowInfo);
130
131 //サポートダイアログの内容をセット
132 SetSupportDlgData(i,WndInfoNum);
133
134 break;
135 }
136 }
137
138 ShowWindow(hSupport,SW_SHOW);
139
140 //ウィンドウ位置を初期化
141 GetClientRect(hChild,&rect);
142 ResizeToRadToolWindows(i,rect.right,rect.bottom);
143
144 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)pWindowInfo->name); //Docコンボボックスに追加
145 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
146
147 //タブに追加
148 pobj_MainTab->InsertItem( pWindowInfo->name, true );
149
150 //メニュー状態を設定
151 ResetState_DocMenu();
152
153 SetFocus(hRad);
154}
155
156int InsertDlgItem(int WndNum,int WndInfoNum,int ItemNum,POINT *pPos,SIZE *pSize,char *IdName,char *caption,DWORD style_or_WndNum,DWORD ExStyle,int Control,int ImageType,char *ImagePath,DWORD dwInsertType){
157 //dwInsertType
158 //0 … 元に戻す、やり直し
159 //1 … 通常の挿入
160 //2 … 貼り付け
161
162 extern HANDLE hHeap;
163 extern MDIINFO MdiInfo[MAX_WNDNUM];
164 extern PROJECTINFO ProjectInfo;
165 int i,i2,NewItemNum;
166 char temporary[MAX_PATH];
167 CHILDINFO *pChildInfo;
168
169 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
170
171 pWindowInfo->pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,pWindowInfo->pChildInfo,(pWindowInfo->NumberOfChildWindows+1)*sizeof(WINDOW_INFO));
172 if(ItemNum==-1)
173 NewItemNum=pWindowInfo->NumberOfChildWindows;
174 else{
175 for(i=pWindowInfo->NumberOfChildWindows;i>ItemNum;i--)
176 pWindowInfo->pChildInfo[i]=pWindowInfo->pChildInfo[i-1];
177 NewItemNum=ItemNum;
178 }
179 pChildInfo=&pWindowInfo->pChildInfo[NewItemNum];
180
181 //ID
182 if(ItemNum==-1){
183 for(i=lstrlen(IdName)-1;i>=0;i--){
184 if(!('0'<=IdName[i]&&IdName[i]<='9')) break;
185 }
186 i++;
187
188 if(IdName[i]!='\0'){
189 i2=atoi(IdName+i)+1;
190 if(dwInsertType==2) i2--;
191 IdName[i]=0;
192 }
193 else{
194 if(dwInsertType==2) i2=0;
195 else i2=1;
196 }
197
198 if(i2==0) lstrcpy(temporary,IdName);
199 else sprintf(temporary,"%s%d",IdName,i2);
200SearchStart:
201 for(i=0;i<pWindowInfo->NumberOfChildWindows;i++){
202 if(i!=NewItemNum){
203 if(lstrcmp(pWindowInfo->pChildInfo[i].IdName,temporary)==0){
204 i2++;
205 sprintf(temporary,"%s%d",IdName,i2);
206 goto SearchStart;
207 }
208 }
209 }
210 }
211 else lstrcpy(temporary,IdName);
212 pChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
213 lstrcpy(pChildInfo->IdName,temporary);
214
215 //位置
216 pChildInfo->pos=*pPos;
217 pChildInfo->size=*pSize;
218 //小さすぎる場合は、最小の大きさに調整
219 if(pChildInfo->size.cx<MIN_ITEM_X) pChildInfo->size.cx=MIN_ITEM_X;
220 if(pChildInfo->size.cy<MIN_ITEM_Y) pChildInfo->size.cy=MIN_ITEM_Y;
221
222 //テキスト
223 if(ItemNum==-1){
224 if(dwInsertType==1){
225 if(caption[0]) sprintf(temporary,"%s%d",caption,i2);
226 else temporary[0]=0;
227 }
228 else lstrcpy(temporary,caption);
229 }
230 else lstrcpy(temporary,caption);
231 pChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
232 lstrcpy(pChildInfo->caption,temporary);
233
234 //スタイル
235 pChildInfo->style=style_or_WndNum;
236
237 //拡張スタイル
238 pChildInfo->ExStyle=ExStyle;
239
240 //クラス名
241 pChildInfo->Control=Control;
242
243 if(Control==CT_IMAGEBOX){
244 //イメージ ボックスの場合
245 pChildInfo->ImageCtrlInfo.type=ImageType;
246 if(!ImagePath)
247 pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
248 else{
249 pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,lstrlen(ImagePath)+1);
250 lstrcpy(pChildInfo->ImageCtrlInfo.path,ImagePath);
251 }
252 }
253
254 //変更情報
255 if(dwInsertType!=0)
256 Rad_NoticeChanging(WndNum,RAD_UNDO_INSERTITEM,NewItemNum,(DWORD)pChildInfo);
257
258 pWindowInfo->NumberOfChildWindows++;
259
260 DrawRadWindow(WndNum,pWindowInfo);
261 return NewItemNum;
262}
263void DeleteDlgItem(int WndNum,int WndInfoNum,int ItemNum,BOOL bNoticeChanging){
264 extern HANDLE hHeap;
265 extern MDIINFO MdiInfo[MAX_WNDNUM];
266 extern PROJECTINFO ProjectInfo;
267 int i;
268
269 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
270
271 //変更情報
272 if(bNoticeChanging)
273 Rad_NoticeChanging(WndNum,RAD_UNDO_DELETEITEM,ItemNum,(DWORD)&pWindowInfo->pChildInfo[ItemNum]);
274
275 //子ウィンドウのメモリを解放
276 HeapDefaultFree(pWindowInfo->pChildInfo[ItemNum].IdName);
277 HeapDefaultFree(pWindowInfo->pChildInfo[ItemNum].caption);
278 if(pWindowInfo->pChildInfo[ItemNum].Control==CT_IMAGEBOX){
279 //イメージ ボックスの場合
280 HeapDefaultFree(pWindowInfo->pChildInfo[ItemNum].ImageCtrlInfo.path);
281 }
282
283 pWindowInfo->NumberOfChildWindows--;
284 for(i=ItemNum;i<pWindowInfo->NumberOfChildWindows;i++)
285 pWindowInfo->pChildInfo[i]=pWindowInfo->pChildInfo[i+1];
286 if(ProjectInfo.windowInfos.size()==0) pWindowInfo->pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,pWindowInfo->pChildInfo,1);
287 else pWindowInfo->pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,pWindowInfo->pChildInfo,pWindowInfo->NumberOfChildWindows*sizeof(CHILDINFO));
288
289 DrawRadWindow(WndNum,pWindowInfo);
290
291
292 //////////////////////////////
293 //プロパティウィンドウを設定
294 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hProp_Dlg);
295 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_WindowProc);
296
297 SCROLLINFO ScrollInfo;
298 ScrollInfo.cbSize=sizeof(SCROLLINFO);
299 ScrollInfo.fMask=SIF_POS;
300 ScrollInfo.nPos=0;
301 SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
302
303 RECT rect;
304 GetClientRect(MdiInfo[WndNum].MdiRadInfo->hProperty,&rect);
305 SendMessage(MdiInfo[WndNum].MdiRadInfo->hProperty,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
306}
307
308void CursorPos_GlobalToLocal(HWND hwnd,long *x,long *y){
309 SCROLLINFO VertScrollInfo,HorzScrollInfo;
310
311 VertScrollInfo.cbSize=sizeof(SCROLLINFO);
312 VertScrollInfo.fMask=SIF_RANGE|SIF_POS;
313 GetScrollInfo(hwnd,SB_VERT,&VertScrollInfo);
314 HorzScrollInfo.cbSize=sizeof(SCROLLINFO);
315 HorzScrollInfo.fMask=SIF_RANGE|SIF_POS;
316 GetScrollInfo(hwnd,SB_HORZ,&HorzScrollInfo);
317
318 *x-=HorzScrollInfo.nPos;
319 *y-=VertScrollInfo.nPos;
320}
321void CursorPos_LocalToGlobal(HWND hwnd,long *x,long *y){
322 SCROLLINFO VertScrollInfo,HorzScrollInfo;
323
324 VertScrollInfo.cbSize=sizeof(SCROLLINFO);
325 VertScrollInfo.fMask=SIF_RANGE|SIF_POS;
326 GetScrollInfo(hwnd,SB_VERT,&VertScrollInfo);
327 HorzScrollInfo.cbSize=sizeof(SCROLLINFO);
328 HorzScrollInfo.fMask=SIF_RANGE|SIF_POS;
329 GetScrollInfo(hwnd,SB_HORZ,&HorzScrollInfo);
330
331 *x+=HorzScrollInfo.nPos;
332 *y+=VertScrollInfo.nPos;
333}
334void DrawFrame(HWND hwnd,int WndNum,int WndInfoNum,RECT *NewRect,RECT *OldRect,BOOL bLA){
335 extern PROJECTINFO ProjectInfo;
336 extern MDIINFO MdiInfo[MAX_WNDNUM];
337 static int swLineStop;
338 int i,sw;
339 int x,y;
340 HDC hdc;
341 HPEN hPen,hOldPen;
342 HBRUSH hOldBrush;
343 RECT rect;
344
345 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
346
347 hdc=GetDC(hwnd);
348
349 sw=0;
350 if(pobj_nv->bLineAdjust&&bLA){
351 for(i=0;i<pWindowInfo->NumberOfChildWindows;i++){
352 if(i==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]) continue;
353 if(pWindowInfo->pChildInfo[i].Control !=
354 pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control) continue;
355
356 if(NewRect->left<OldRect->left){
357 if(pWindowInfo->pChildInfo[i].pos.x
358 >
359 NewRect->left - MdiInfo[WndNum].MdiRadInfo->ClientPos.x
360 &&
361 pWindowInfo->pChildInfo[i].pos.x-10
362 <
363 NewRect->left - MdiInfo[WndNum].MdiRadInfo->ClientPos.x){
364
365 //左側をストップする
366 x=NewRect->right-NewRect->left;
367 NewRect->left=pWindowInfo->pChildInfo[i].pos.x + MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
368 NewRect->right=NewRect->left+x;
369
370 hPen=CreatePen(PS_SOLID,0,RGB(100,100,100));
371 hOldPen=(HPEN)SelectObject(hdc,hPen);
372 MoveToEx(hdc,NewRect->left,0,NULL);
373 LineTo(hdc,NewRect->left,ScreenX);
374 SelectObject(hdc,hOldPen);
375 DeleteObject(hPen);
376
377 swLineStop=1;
378 sw=1;
379 }
380 }
381 if(NewRect->top<OldRect->top){
382 if(pWindowInfo->pChildInfo[i].pos.y
383 >
384 NewRect->top - MdiInfo[WndNum].MdiRadInfo->ClientPos.y
385 &&
386 pWindowInfo->pChildInfo[i].pos.y-10
387 <
388 NewRect->top - MdiInfo[WndNum].MdiRadInfo->ClientPos.y){
389
390 //左側をストップする
391 y=NewRect->bottom-NewRect->top;
392 NewRect->top=pWindowInfo->pChildInfo[i].pos.y + MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
393 NewRect->bottom=NewRect->top+y;
394
395 hPen=CreatePen(PS_SOLID,0,RGB(100,100,100));
396 hOldPen=(HPEN)SelectObject(hdc,hPen);
397 MoveToEx(hdc,0,NewRect->top,NULL);
398 LineTo(hdc,ScreenY,NewRect->top);
399 SelectObject(hdc,hOldPen);
400 DeleteObject(hPen);
401
402 swLineStop=1;
403 sw=1;
404 }
405 }
406 }
407 }
408
409 //以前の選択フレームを消去
410 RectNaturalFormat(OldRect,&rect);
411 x=rect.left;
412 y=rect.top;
413 CursorPos_GlobalToLocal(hwnd,&rect.left,&rect.top);
414 CursorPos_GlobalToLocal(hwnd,&rect.right,&rect.bottom);
415 if(swLineStop&&sw==0){
416 BitBlt(hdc,0,0,ScreenX*2,ScreenY*2,
417 MdiInfo[WndNum].MdiRadInfo->hMemDC,0,0,SRCCOPY);
418 swLineStop=0;
419 }
420 else{
421 BitBlt(hdc,rect.left-LEVER_THICK, rect.top-LEVER_THICK,
422 rect.right-rect.left+LEVER_THICK*2, rect.bottom-rect.top+LEVER_THICK*2,
423 MdiInfo[WndNum].MdiRadInfo->hMemDC,x-LEVER_THICK,y-LEVER_THICK,SRCCOPY);
424 }
425
426 //新しい選択フレームを描画
427 RectNaturalFormat(NewRect,&rect);
428 CursorPos_GlobalToLocal(hwnd,&rect.left,&rect.top);
429 CursorPos_GlobalToLocal(hwnd,&rect.right,&rect.bottom);
430
431 hPen=CreatePen(PS_DOT,0,RGB(0,0,0));
432 SetBkMode(hdc,TRANSPARENT);
433 hOldPen=(HPEN)SelectObject(hdc,hPen);
434 hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
435 Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
436 SelectObject(hdc,hOldBrush);
437 SelectObject(hdc,hOldPen);
438 DeleteObject(hPen);
439
440 ReleaseDC(hwnd,hdc);
441
442 *OldRect=*NewRect;
443}
444void GetSelectingRect(int WndNum,int WndInfoNum,int num,RECT *rect){
445 extern MDIINFO MdiInfo[MAX_WNDNUM];
446 extern PROJECTINFO ProjectInfo;
447
448 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
449
450 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]==SELECT_WINDOW){
451 //ウィンドウ軸を選択
452 rect->left=0;
453 rect->top=0;
454 rect->right=pWindowInfo->size.cx+(LEVER_THICK*2);
455 rect->bottom=pWindowInfo->size.cy+(LEVER_THICK*2);
456 }
457 else{
458 //子ウィンドウを選択
459 rect->left=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.x-LEVER_THICK;
460 rect->top=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.y-LEVER_THICK;
461 rect->right=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.x+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].size.cx+LEVER_THICK;
462 rect->bottom=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.y+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].size.cy+LEVER_THICK;
463 }
464}
465void DrawSelectingRect(HWND hwnd,int WndNum,int WndInfoNum,int ButtonSelect){
466 extern MDIINFO MdiInfo[MAX_WNDNUM];
467 extern RADINFO RadInfo;
468 extern PROJECTINFO ProjectInfo;
469 int i,i2,i3;
470 HDC hdc;
471 HPEN hPen,hOldPen;
472 HBRUSH hOldBrush;
473 COLORREF rgb;
474 RECT rect,tempRect;
475
476 hdc=GetDC(hwnd);
477 if(ButtonSelect==IDC_TOOL_MOUSE) rgb=RGB(255,60,30);
478 else if(ButtonSelect==NON_TOOL) rgb=RGB(100,100,100);
479 hPen=CreatePen(PS_SOLID,0,rgb);
480 SetBkMode(hdc,TRANSPARENT);
481 hOldPen=(HPEN)SelectObject(hdc,hPen);
482
483 i=0;
484 while(MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]!=-1||i==0){
485 GetSelectingRect(WndNum,WndInfoNum,i,&tempRect);
486 RectNaturalFormat(&tempRect,&rect);
487 CursorPos_GlobalToLocal(hwnd,&rect.left,&rect.top);
488 CursorPos_GlobalToLocal(hwnd,&rect.right,&rect.bottom);
489
490 //主線
491 hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
492 Rectangle(hdc,
493 rect.left+2, rect.top+2,
494 rect.right-2, rect.bottom-2);
495 SelectObject(hdc,hOldBrush);
496
497
498 hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(WHITE_BRUSH));
499
500 Rectangle(hdc,
501 rect.left,rect.top,
502 rect.left+5,rect.top+5);
503 Rectangle(hdc,
504 rect.left,rect.bottom-5,
505 rect.left+5,rect.bottom);
506 Rectangle(hdc,
507 rect.right-5,rect.top,
508 rect.right,rect.top+5);
509 Rectangle(hdc,
510 rect.right-5,rect.bottom-5,
511 rect.right,rect.bottom);
512
513 i2=(rect.right-rect.left)/2;
514 i3=(rect.bottom-rect.top)/2;
515 Rectangle(hdc,
516 rect.left+i2-2,rect.top,
517 rect.left+i2+3,rect.top+5);
518 Rectangle(hdc,
519 rect.left+i2-2,rect.bottom-5,
520 rect.left+i2+3,rect.bottom);
521 Rectangle(hdc,
522 rect.left,rect.top+i3-2,
523 rect.left+5,rect.top+i3+3);
524 Rectangle(hdc,
525 rect.right-5,rect.top+i3-2,
526 rect.right,rect.top+i3+3);
527
528 SelectObject(hdc,hOldBrush);
529
530 //移動時の選択フレームの消去用範囲
531 RadInfo.OldDraggingRect[i]=rect;
532
533 i++;
534 }
535
536 SelectObject(hdc,hOldPen);
537 DeleteObject(hPen);
538
539 ReleaseDC(hwnd,hdc);
540}
541void ChangePropertyWindow(int WndNum,int WndInfoNum){
542 extern MDIINFO MdiInfo[MAX_WNDNUM];
543 extern PROJECTINFO ProjectInfo;
544 RECT rect;
545 SCROLLINFO ScrollInfo;
546
547 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
548
549 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hProp_Dlg);
550 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
551 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_WindowProc);
552
553 ScrollInfo.cbSize=sizeof(SCROLLINFO);
554 ScrollInfo.fMask=SIF_POS;
555 ScrollInfo.nPos=0;
556 SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
557
558 GetClientRect(MdiInfo[WndNum].MdiRadInfo->hProperty,&rect);
559 SendMessage(MdiInfo[WndNum].MdiRadInfo->hProperty,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
560 }
561 else{
562 if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON)
563 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_BUTTON),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ButtonProc);
564 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX)
565 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_CHECKBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_CheckBoxProc);
566 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX)
567 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_COMBOBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ComboBoxProc);
568 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT)
569 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_EDIT),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_EditProc);
570 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_GROUPBOX)
571 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_GROUPBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_GroupBoxProc);
572 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_HSCROLLBAR)
573 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_SCROLLBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ScrollBarProc);
574 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX)
575 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_IMAGEBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ImageBoxProc);
576 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX)
577 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_LISTBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ListBoxProc);
578 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW)
579 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_LISTVIEW),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ListViewProc);
580 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR)
581 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_PROGRESSBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ProgressBarProc);
582 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON)
583 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_RADIOBUTTON),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_RadioButtonProc);
584 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC)
585 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_STATIC),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_StaticProc);
586 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR)
587 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_TRACKBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_TrackBarProc);
588 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW)
589 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_TREEVIEW),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_TreeViewProc);
590 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN)
591 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_UPDOWN),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_UpDownProc);
592 else if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_VSCROLLBAR)
593 MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_SCROLLBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,(DLGPROC)RadProperty_ScrollBarProc);
594
595 ScrollInfo.cbSize=sizeof(SCROLLINFO);
596 ScrollInfo.fMask=SIF_POS;
597 ScrollInfo.nPos=0;
598 SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
599
600 GetClientRect(MdiInfo[WndNum].MdiRadInfo->hProperty,&rect);
601 SendMessage(MdiInfo[WndNum].MdiRadInfo->hProperty,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
602 }
603}
604int GetItemNumOnMouse(int WndNum,int WndInfoNum,int x,int y){
605 extern MDIINFO MdiInfo[MAX_WNDNUM];
606 extern PROJECTINFO ProjectInfo;
607 int i;
608
609 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
610
611 for(i=pWindowInfo->NumberOfChildWindows-1;i>=0;i--){
612 if(pWindowInfo->pChildInfo[i].Control==CT_COMBOBOX&&
613 (pWindowInfo->pChildInfo[i].style&0x000F)!=CBS_SIMPLE){
614 //コンボ ボックスの場合は表示部分をターゲットに選択する(高さ20pixel)
615 if(x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x&&
616 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx&&
617 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y&&
618 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+20){
619 break;
620 }
621 }
622 else if(pWindowInfo->pChildInfo[i].Control==CT_GROUPBOX){
623 //グループ ボックスの場合は中央をあける
624 if((
625 x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x&&
626 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx&&
627 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y&&
628 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[i].size.cy
629 )&&
630 (!(
631 x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+LEVER_THICK*2&&
632 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx-LEVER_THICK*2&&
633 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+LEVER_THICK*3&&
634 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[i].size.cy-LEVER_THICK*2
635 ))
636 ){
637 break;
638 }
639 }
640 else if(x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x&&
641 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx&&
642 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y&&
643 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[i].size.cy){
644 break;
645 }
646 }
647 return i;
648}
649void SelectItemNumOnMouse(int WndNum,int WndInfoNum,int x,int y){
650 //マウス座標をもとにコントロールアイテムを選択
651 extern MDIINFO MdiInfo[MAX_WNDNUM];
652 extern PROJECTINFO ProjectInfo;
653 int i;
654
655 for(i=1;i<MAX_RAD_SELITEM;i++) MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]=-1;
656 i=GetItemNumOnMouse(WndNum,WndInfoNum,x,y);
657
658 if(i==-1){
659 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
660 MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=SELECT_WINDOW;
661 ChangePropertyWindow(WndNum,WndInfoNum);
662 }
663 }
664 else{
665 MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=i;
666 ChangePropertyWindow(WndNum,WndInfoNum);
667 }
668
669 SetStatusText(NULL);
670
671 //サポートダイアログの内容をセット
672 SetSupportDlgData(WndNum,WndInfoNum);
673}
674void SetItemNumOnFrame(int WndNum,int WndInfoNum,RECT *pRect){
675 extern PROJECTINFO ProjectInfo;
676 extern MDIINFO MdiInfo[MAX_WNDNUM];
677 int i,i2,sw;
678 RECT rect;
679
680 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
681
682 for(i=1;i<MAX_RAD_SELITEM;i++) MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]=-1;
683 RectNaturalFormat(pRect,&rect);
684 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW) sw=0;
685 else sw=1;
686 for(i=pWindowInfo->NumberOfChildWindows-1,i2=0;i>=0;i--){
687 if(rect.left <= pWindowInfo->pChildInfo[i].pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x&&
688 rect.top <= pWindowInfo->pChildInfo[i].pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y&&
689 rect.right >= pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x&&
690 rect.bottom >= pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[i].size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y){
691 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i2]=i;
692 i2++;
693 }
694 }
695 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW||
696 (MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW&&sw)){
697 ChangePropertyWindow(WndNum,WndInfoNum);
698 }
699}
700int GetStateOfDraggingFrame(int WndNum,int WndInfoNum,int x,int y){
701 extern PROJECTINFO ProjectInfo;
702 extern MDIINFO MdiInfo[MAX_WNDNUM];
703 int i;
704 RECT rect;
705
706 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
707
708 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1){
709 i=0;
710 while(MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]!=-1||i==0){
711 GetSelectingRect(WndNum,WndInfoNum,i,&rect);
712
713 if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
714 y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK){
715 if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]].Control==CT_GROUPBOX){
716 //グループボックスの場合は中央をあける
717 if(!(x>=rect.left+LEVER_THICK*2&&x<=rect.right-LEVER_THICK*2&&
718 y>=rect.top+LEVER_THICK*3&&y<=rect.bottom-LEVER_THICK*2)){
719 return FRAME_INSIDE;
720 }
721 }
722 else return FRAME_INSIDE;
723 }
724 i++;
725 }
726 }
727 else{
728 GetSelectingRect(WndNum,WndInfoNum,0,&rect);
729
730 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
731 if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
732 y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK){
733 if(pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_GROUPBOX){
734 //グループ ボックスの場合は中央をあける
735 if(!(x>=rect.left+LEVER_THICK*3&&x<=rect.right-LEVER_THICK*3&&
736 y>=rect.top+LEVER_THICK*4&&y<=rect.bottom-LEVER_THICK*3)){
737 return FRAME_INSIDE;
738 }
739 }
740 else return FRAME_INSIDE;
741 }
742 else if(x>=rect.left&&x<=rect.left+LEVER_THICK&&
743 y>=rect.top&&y<=rect.top+LEVER_THICK) return FRAME_UPPER_LEFT;
744 else if(x>=rect.right-LEVER_THICK&&x<=rect.right&&
745 y>=rect.top&&y<=rect.top+LEVER_THICK) return FRAME_UPPER_RIGHT;
746 else if(x>=rect.left&&x<=rect.left+LEVER_THICK&&
747 y>=rect.bottom-LEVER_THICK&&y<=rect.bottom) return FRAME_LOWER_LEFT;
748 else if(x>=rect.left&&x<=rect.left+LEVER_THICK&&
749 y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK)return FRAME_LEFT;
750 else if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
751 y>=rect.top&&y<=rect.top+LEVER_THICK) return FRAME_UPPER;
752 }
753 if(x>=rect.right-LEVER_THICK&&x<=rect.right&&
754 y>=rect.bottom-LEVER_THICK&&y<=rect.bottom) return FRAME_LOWER_RIGHT;
755 else if(x>=rect.right-LEVER_THICK&&x<=rect.right&&
756 y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK) return FRAME_RIGHT;
757 else if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
758 y>=rect.bottom-LEVER_THICK&&y<=rect.bottom) return FRAME_LOWER;
759 }
760 return 0;
761}
762void ResetScrollbarOfRadEditor(int WndNum,int weight,int height){
763 extern PROJECTINFO ProjectInfo;
764 extern MDIINFO MdiInfo[MAX_WNDNUM];
765 SCROLLINFO ScrollInfo;
766 SIZE NeedSize;
767
768 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
769
770 //必要な幅、高さを共に100ピクセル余裕を持たせる
771 NeedSize.cx=pWindowInfo->size.cx+(LEVER_THICK*2)+100;
772 NeedSize.cy=pWindowInfo->size.cy+(LEVER_THICK*2)+100;
773
774 ScrollInfo.cbSize=sizeof(SCROLLINFO);
775 ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS|SIF_DISABLENOSCROLL;
776
777 //垂直スクロールバーの設定
778 GetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_VERT,&ScrollInfo);
779 ScrollInfo.nMin=0;
780 if(height>NeedSize.cy) ScrollInfo.nMax=0;
781 else{
782 ScrollInfo.nMax=NeedSize.cy;
783 ScrollInfo.nPage=height;
784 }
785 SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_VERT,&ScrollInfo,1);
786
787 //水平スクロールバーの設定
788 GetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_VERT,&ScrollInfo);
789 ScrollInfo.nMin=0;
790 if(weight>NeedSize.cx) ScrollInfo.nMax=0;
791 else{
792 ScrollInfo.nMax=NeedSize.cx;
793 ScrollInfo.nPage=weight;
794 }
795 SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_HORZ,&ScrollInfo,1);
796}
797LRESULT CALLBACK RadWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
798 extern MDIINFO MdiInfo[MAX_WNDNUM];
799 extern PROJECTINFO ProjectInfo;
800 extern RADINFO RadInfo;
801 int i,i2,i3,i4;
802 char temporary[MAX_PATH],temp2[MAX_PATH];
803 HWND hParent;
804 HDC hdc;
805 RECT rect;
806 POINT mouse,pos;
807 SIZE size;
808 SCROLLINFO ScrollInfo,si2;
809 PAINTSTRUCT ps;
810 POINTANDSIZE PointAndSize;
811
812 switch(message){
813 case WM_LBUTTONDOWN:
814 {
815 SetCapture(hwnd);
816
817 SetFocus(hwnd);
818 mouse.x=LOWORD(lParam);
819 mouse.y=HIWORD(lParam);
820 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
821
822 i=GetWndNum(GetParent(hwnd));
823 i2 = GetWndInfoNum(MdiInfo[i].path);
824 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[i].path);
825
826 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
827 if(((wParam&MK_CONTROL)||(wParam&MK_SHIFT))&&
828 MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
829
830 //Shiftキー、Ctrlキーによる複数選択
831 for(i3=0;;i3++){
832 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1){
833 MdiInfo[i].MdiRadInfo->SelectingItem[i3]=GetItemNumOnMouse(i,i2,mouse.x,mouse.y);
834 InvalidateRect(hwnd,NULL,0);
835
836 //サポートダイアログの内容をセット
837 SetSupportDlgData(i,i2);
838 break;
839 }
840 }
841 }
842 else{
843 RadInfo.NowDragging=GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y);
844 if(!RadInfo.NowDragging){
845 SelectItemNumOnMouse(i,i2,mouse.x,mouse.y);
846 InvalidateRect(hwnd,NULL,0);
847 RadInfo.NowDragging=GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y);
848 }
849 if(RadInfo.NowDragging){
850 //アイテム選択中。サイズ、位置変更開始
851
852 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
853 RadInfo.DraggingRect[0].left=LEVER_THICK;
854 RadInfo.DraggingRect[0].top=LEVER_THICK;
855 RadInfo.DraggingRect[0].right=pWindowInfo->size.cx+LEVER_THICK;
856 RadInfo.DraggingRect[0].bottom=pWindowInfo->size.cy+LEVER_THICK;
857 RadInfo.DragStartRect[0]=RadInfo.DraggingRect[0];
858 }
859 else{
860 i3=0;
861 while(MdiInfo[i].MdiRadInfo->SelectingItem[i3]!=-1){
862 RadInfo.DraggingRect[i3].left=MdiInfo[i].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x;
863 RadInfo.DraggingRect[i3].top=MdiInfo[i].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y;
864 RadInfo.DraggingRect[i3].right=MdiInfo[i].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx;
865 RadInfo.DraggingRect[i3].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy;
866 RadInfo.DragStartRect[i3]=RadInfo.DraggingRect[i3];
867 i3++;
868 }
869 }
870 }
871 else{
872 //範囲選択
873
874 RadInfo.NowDragging=SELECTING_FRAME;
875 RadInfo.OldDraggingRect[0].left=LEVER_THICK;
876 RadInfo.OldDraggingRect[0].top=LEVER_THICK;
877 RadInfo.OldDraggingRect[0].right=pWindowInfo->size.cx+LEVER_THICK;
878 RadInfo.OldDraggingRect[0].bottom=pWindowInfo->size.cy+LEVER_THICK;
879 }
880 RadInfo.DragStartPos.x=mouse.x;
881 RadInfo.DragStartPos.y=mouse.y;
882 }
883 SetCursorByState(RadInfo.NowDragging);
884 }
885 else{
886 RadInfo.DraggingRect[0].left=mouse.x;
887 RadInfo.DraggingRect[0].top=mouse.y;
888 RadInfo.NowDragging=ITEM_MAKING;
889 }
890 return 0;
891 }
892 case WM_LBUTTONUP:
893 {
894 ReleaseCapture();
895
896 SetFocus(hwnd);
897 mouse.x=(int)(short)LOWORD(lParam);
898 mouse.y=(int)(short)HIWORD(lParam);
899 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
900
901 hParent=GetParent(hwnd);
902 i=GetWndNum(hParent);
903 i2 = GetWndInfoNum(MdiInfo[i].path);
904 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[i].path);
905
906 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
907 if(RadInfo.NowDragging){
908 if(RadInfo.DragStartPos.x==mouse.x&&RadInfo.DragStartPos.y==mouse.y){
909 RadInfo.NowDragging=0;
910 InvalidateRect(hwnd,NULL,0);
911 ResetState_EditMenu();
912 return 0;
913 }
914
915 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
916 if(RadInfo.NowDragging==SELECTING_FRAME){
917 SetItemNumOnFrame(i,i2,&RadInfo.DraggingRect[0]);
918 InvalidateRect(hwnd,NULL,1);
919 }
920 else{
921 //ウィンドウ枠の調整完了
922 PointAndSize.size=pWindowInfo->size;
923 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
924 pWindowInfo->size.cx=RadInfo.DraggingRect[0].right-LEVER_THICK;
925 pWindowInfo->size.cy=RadInfo.DraggingRect[0].bottom-LEVER_THICK;
926 DrawRadWindow(i,pWindowInfo);
927 InvalidateRect(hwnd,NULL,1);
928
929 GetClientRect(hwnd,&rect);
930 ResetScrollbarOfRadEditor(i,rect.right,rect.bottom);
931 }
932 }
933 else{
934 i3=0;
935 while(MdiInfo[i].MdiRadInfo->SelectingItem[i3]!=-1){
936 //アイテム枠の調整完了
937 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
938 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
939 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
940 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x=RadInfo.DraggingRect[i3].left-MdiInfo[i].MdiRadInfo->ClientPos.x;
941 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y=RadInfo.DraggingRect[i3].top-MdiInfo[i].MdiRadInfo->ClientPos.y;
942 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx=RadInfo.DraggingRect[i3].right-RadInfo.DraggingRect[i3].left;
943 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy=RadInfo.DraggingRect[i3].bottom-RadInfo.DraggingRect[i3].top;
944 DrawRadWindow(i,pWindowInfo);
945 i3++;
946 }
947 }
948
949 SetStatusText(NULL);
950
951 //サポートダイアログの内容をセット
952 SetSupportDlgData(i,i2);
953 }
954 }
955 else if(RadInfo.NowDragging==ITEM_MAKING){
956 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_BUTTON){
957 //ボタン コントロール作成
958 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
959 RadInfo.DraggingRect[0].left-=44;
960 RadInfo.DraggingRect[0].right=mouse.x+44;
961 RadInfo.DraggingRect[0].top-=10;
962 RadInfo.DraggingRect[0].bottom=mouse.y+11;
963 }
964 else{
965 RadInfo.DraggingRect[0].right=mouse.x;
966 RadInfo.DraggingRect[0].bottom=mouse.y;
967 }
968 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
969 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
970 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
971 size.cx=rect.right-rect.left;
972 size.cy=rect.bottom-rect.top;
973 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"CommandButton","Button",WS_CHILD|WS_VISIBLE,0,CT_BUTTON,0,0,1);
974 }
975 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_CHECKBOX){
976 //チェック ボックス作成
977 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
978 RadInfo.DraggingRect[0].left-=33;
979 RadInfo.DraggingRect[0].right=mouse.x+34;
980 RadInfo.DraggingRect[0].top-=7;
981 RadInfo.DraggingRect[0].bottom=mouse.y+8;
982 }
983 else{
984 RadInfo.DraggingRect[0].right=mouse.x;
985 RadInfo.DraggingRect[0].bottom=mouse.y;
986 }
987 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
988 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
989 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
990 size.cx=rect.right-rect.left;
991 size.cy=rect.bottom-rect.top;
992 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"CheckBox","Check",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,0,CT_CHECKBOX,0,0,1);
993 }
994 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_COMBOBOX){
995 //コンボ ボックス作成
996 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
997 RadInfo.DraggingRect[0].left-=42;
998 RadInfo.DraggingRect[0].right=mouse.x+42;
999 RadInfo.DraggingRect[0].top-=42;
1000 RadInfo.DraggingRect[0].bottom=mouse.y+42;
1001 }
1002 else{
1003 RadInfo.DraggingRect[0].right=mouse.x;
1004 RadInfo.DraggingRect[0].bottom=mouse.y;
1005 }
1006 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1007 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1008 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1009 size.cx=rect.right-rect.left;
1010 size.cy=rect.bottom-rect.top;
1011 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ComboBox","",WS_CHILD|WS_VISIBLE|CBS_DROPDOWN|CBS_SORT|WS_VSCROLL,0,CT_COMBOBOX,0,0,1);
1012 }
1013 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_EDIT){
1014 //エディット コントロール作成
1015 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1016 RadInfo.DraggingRect[0].left-=35;
1017 RadInfo.DraggingRect[0].right=mouse.x+35;
1018 RadInfo.DraggingRect[0].top-=10;
1019 RadInfo.DraggingRect[0].bottom=mouse.y+11;
1020 }
1021 else{
1022 RadInfo.DraggingRect[0].right=mouse.x;
1023 RadInfo.DraggingRect[0].bottom=mouse.y;
1024 }
1025 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1026 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1027 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1028 size.cx=rect.right-rect.left;
1029 size.cy=rect.bottom-rect.top;
1030 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"EditBox","",WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,CT_EDIT,0,0,1);
1031 }
1032 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_GROUPBOX){
1033 //グループ ボックス作成
1034 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1035 RadInfo.DraggingRect[0].left-=42;
1036 RadInfo.DraggingRect[0].right=mouse.x+42;
1037 RadInfo.DraggingRect[0].top-=30;
1038 RadInfo.DraggingRect[0].bottom=mouse.y+30;
1039 }
1040 else{
1041 RadInfo.DraggingRect[0].right=mouse.x;
1042 RadInfo.DraggingRect[0].bottom=mouse.y;
1043 }
1044 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1045 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1046 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1047 size.cx=rect.right-rect.left;
1048 size.cy=rect.bottom-rect.top;
1049 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"GroupBox","Group",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,0,CT_GROUPBOX,0,0,1);
1050 }
1051 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_HSCROLLBAR){
1052 //水平スクロールバー作成
1053 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1054 RadInfo.DraggingRect[0].left-=35;
1055 RadInfo.DraggingRect[0].right=mouse.x+35;
1056 RadInfo.DraggingRect[0].top-=8;
1057 RadInfo.DraggingRect[0].bottom=mouse.y+9;
1058 }
1059 else{
1060 RadInfo.DraggingRect[0].right=mouse.x;
1061 RadInfo.DraggingRect[0].bottom=mouse.y;
1062 }
1063 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1064 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1065 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1066 size.cx=rect.right-rect.left;
1067 size.cy=rect.bottom-rect.top;
1068 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"HScrollBar","",WS_CHILD|WS_VISIBLE|SBS_HORZ,0,CT_HSCROLLBAR,0,0,1);
1069 }
1070 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_IMAGEBOX){
1071 //イメージ ボックス作成
1072 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1073 RadInfo.DraggingRect[0].left-=16;
1074 RadInfo.DraggingRect[0].right=mouse.x+16;
1075 RadInfo.DraggingRect[0].top-=16;
1076 RadInfo.DraggingRect[0].bottom=mouse.y+16;
1077 }
1078 else{
1079 RadInfo.DraggingRect[0].right=mouse.x;
1080 RadInfo.DraggingRect[0].bottom=mouse.y;
1081 }
1082 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1083 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1084 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1085 size.cx=rect.right-rect.left;
1086 size.cy=rect.bottom-rect.top;
1087 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ImageBox","",WS_CHILD|WS_VISIBLE|SS_BLACKFRAME,0,CT_IMAGEBOX,IMGTYPE_FILE,0,1);
1088 }
1089 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_LISTBOX){
1090 //リスト ボックス作成
1091 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1092 RadInfo.DraggingRect[0].left-=42;
1093 RadInfo.DraggingRect[0].right=mouse.x+42;
1094 RadInfo.DraggingRect[0].top-=30;
1095 RadInfo.DraggingRect[0].bottom=mouse.y+30;
1096 }
1097 else{
1098 RadInfo.DraggingRect[0].right=mouse.x;
1099 RadInfo.DraggingRect[0].bottom=mouse.y;
1100 }
1101 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1102 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1103 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1104 size.cx=rect.right-rect.left;
1105 size.cy=rect.bottom-rect.top;
1106 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ListBox","",WS_CHILD|WS_VISIBLE|WS_VSCROLL|LBS_SORT|LBS_NOTIFY,WS_EX_CLIENTEDGE,CT_LISTBOX,0,0,1);
1107 }
1108 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_LISTVIEW){
1109 //リスト ビュー作成
1110 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1111 RadInfo.DraggingRect[0].left-=52;
1112 RadInfo.DraggingRect[0].right=mouse.x+53;
1113 RadInfo.DraggingRect[0].top-=37;
1114 RadInfo.DraggingRect[0].bottom=mouse.y+38;
1115 }
1116 else{
1117 RadInfo.DraggingRect[0].right=mouse.x;
1118 RadInfo.DraggingRect[0].bottom=mouse.y;
1119 }
1120 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1121 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1122 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1123 size.cx=rect.right-rect.left;
1124 size.cy=rect.bottom-rect.top;
1125 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ListView","",WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,CT_LISTVIEW,0,0,1);
1126 }
1127 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_PROGRESSBAR){
1128 //プロバレス バー作成
1129 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1130 RadInfo.DraggingRect[0].left-=70;
1131 RadInfo.DraggingRect[0].right=mouse.x+70;
1132 RadInfo.DraggingRect[0].top-=10;
1133 RadInfo.DraggingRect[0].bottom=mouse.y+11;
1134 }
1135 else{
1136 RadInfo.DraggingRect[0].right=mouse.x;
1137 RadInfo.DraggingRect[0].bottom=mouse.y;
1138 }
1139 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1140 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1141 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1142 size.cx=rect.right-rect.left;
1143 size.cy=rect.bottom-rect.top;
1144 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ProgressBar","",WS_CHILD|WS_VISIBLE,WS_EX_STATICEDGE,CT_PROGRESSBAR,0,0,1);
1145 }
1146 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_RADIOBUTTON){
1147 //ラジオ ボタン作成
1148 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1149 RadInfo.DraggingRect[0].left-=31;
1150 RadInfo.DraggingRect[0].right=mouse.x+32;
1151 RadInfo.DraggingRect[0].top-=7;
1152 RadInfo.DraggingRect[0].bottom=mouse.y+8;
1153 }
1154 else{
1155 RadInfo.DraggingRect[0].right=mouse.x;
1156 RadInfo.DraggingRect[0].bottom=mouse.y;
1157 }
1158 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1159 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1160 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1161 size.cx=rect.right-rect.left;
1162 size.cy=rect.bottom-rect.top;
1163 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"RadioButton","radio",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,0,CT_RADIOBUTTON,0,0,1);
1164 }
1165 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_STATIC){
1166 //スタティック コントロール作成
1167 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1168 RadInfo.DraggingRect[0].left-=25;
1169 RadInfo.DraggingRect[0].right=mouse.x+25;
1170 RadInfo.DraggingRect[0].top-=6;
1171 RadInfo.DraggingRect[0].bottom=mouse.y+6;
1172 }
1173 else{
1174 RadInfo.DraggingRect[0].right=mouse.x;
1175 RadInfo.DraggingRect[0].bottom=mouse.y;
1176 }
1177 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1178 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1179 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1180 size.cx=rect.right-rect.left;
1181 size.cy=rect.bottom-rect.top;
1182 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"Static","Text",WS_CHILD|WS_VISIBLE,0,CT_STATIC,0,0,1);
1183 }
1184 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_TRACKBAR){
1185 //トラック バー作成
1186 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1187 RadInfo.DraggingRect[0].left-=87;
1188 RadInfo.DraggingRect[0].right=mouse.x+88;
1189 RadInfo.DraggingRect[0].top-=11;
1190 RadInfo.DraggingRect[0].bottom=mouse.y+12;
1191 }
1192 else{
1193 RadInfo.DraggingRect[0].right=mouse.x;
1194 RadInfo.DraggingRect[0].bottom=mouse.y;
1195 }
1196 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1197 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1198 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1199 size.cx=rect.right-rect.left;
1200 size.cy=rect.bottom-rect.top;
1201 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"TrackBar","",WS_CHILD|WS_VISIBLE|TBS_BOTH|TBS_NOTICKS,0,CT_TRACKBAR,0,0,1);
1202 }
1203 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_TREEVIEW){
1204 //ツリー ビュー作成
1205 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1206 RadInfo.DraggingRect[0].left-=52;
1207 RadInfo.DraggingRect[0].right=mouse.x+53;
1208 RadInfo.DraggingRect[0].top-=37;
1209 RadInfo.DraggingRect[0].bottom=mouse.y+38;
1210 }
1211 else{
1212 RadInfo.DraggingRect[0].right=mouse.x;
1213 RadInfo.DraggingRect[0].bottom=mouse.y;
1214 }
1215 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1216 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1217 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1218 size.cx=rect.right-rect.left;
1219 size.cy=rect.bottom-rect.top;
1220 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"TreeView","",WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,CT_TREEVIEW,0,0,1);
1221 }
1222 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_UPDOWN){
1223 //アップ ダウン コントロール作成
1224 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1225 RadInfo.DraggingRect[0].left-=8;
1226 RadInfo.DraggingRect[0].right=mouse.x+8;
1227 RadInfo.DraggingRect[0].top-=10;
1228 RadInfo.DraggingRect[0].bottom=mouse.y+11;
1229 }
1230 else{
1231 RadInfo.DraggingRect[0].right=mouse.x;
1232 RadInfo.DraggingRect[0].bottom=mouse.y;
1233 }
1234 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1235 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1236 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1237 size.cx=rect.right-rect.left;
1238 size.cy=rect.bottom-rect.top;
1239 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"UpDown","",WS_CHILD|WS_VISIBLE,0,CT_UPDOWN,0,0,1);
1240 }
1241 else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_VSCROLLBAR){
1242 //垂直スクロールバー作成
1243 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1244 RadInfo.DraggingRect[0].left-=9;
1245 RadInfo.DraggingRect[0].right=mouse.x+9;
1246 RadInfo.DraggingRect[0].top-=30;
1247 RadInfo.DraggingRect[0].bottom=mouse.y+30;
1248 }
1249 else{
1250 RadInfo.DraggingRect[0].right=mouse.x;
1251 RadInfo.DraggingRect[0].bottom=mouse.y;
1252 }
1253 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1254 pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
1255 pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
1256 size.cx=rect.right-rect.left;
1257 size.cy=rect.bottom-rect.top;
1258 MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"VScrollBar","",WS_CHILD|WS_VISIBLE|SBS_VERT,0,CT_VSCROLLBAR,0,0,1);
1259 }
1260 SendMessage(GetWindow(MdiInfo[i].MdiRadInfo->hTools,GW_CHILD),WM_COMMAND,IDC_TOOL_MOUSE,0);
1261 SendMessage(GetWindow(GetWindow(MdiInfo[i].MdiRadInfo->hTools,GW_CHILD),GW_CHILD),TB_CHECKBUTTON,IDC_TOOL_MOUSE,TRUE);
1262 ChangePropertyWindow(i,i2);
1263
1264 //複数選択を解除
1265 MdiInfo[i].MdiRadInfo->SelectingItem[1]=-1;
1266 }
1267
1268 RadInfo.NowDragging=0;
1269
1270 ResetState_EditMenu();
1271 return 0;
1272 }
1273 case WM_MOUSEMOVE:
1274 mouse.x=(int)(short)LOWORD(lParam);
1275 mouse.y=(int)(short)HIWORD(lParam);
1276 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
1277
1278 hParent=GetParent(hwnd);
1279 i=GetWndNum(hParent);
1280 i2 = GetWndInfoNum(MdiInfo[i].path);
1281
1282 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1283 if(wParam&MK_LBUTTON&&RadInfo.NowDragging){
1284 ////////////////////////////////////////////////
1285 // ドラッグ中の場合(コントロールのサイズ変更)
1286
1287 if(RadInfo.NowDragging==FRAME_UPPER_LEFT){
1288 if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
1289 RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
1290 else if(mouse.x+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.x)
1291 RadInfo.DraggingRect[0].left=MdiInfo[i].MdiRadInfo->ClientPos.x;
1292 else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
1293
1294 if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK))
1295 RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
1296 else if(mouse.y+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.y)
1297 RadInfo.DraggingRect[0].top=MdiInfo[i].MdiRadInfo->ClientPos.y;
1298 else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
1299 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1300 }
1301 else if(RadInfo.NowDragging==FRAME_UPPER_RIGHT){
1302 if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
1303 RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
1304 else if(mouse.x>MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx)
1305 RadInfo.DraggingRect[0].right=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
1306 else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
1307
1308 if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK)) RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
1309 else if(mouse.y+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.y)
1310 RadInfo.DraggingRect[0].top=MdiInfo[i].MdiRadInfo->ClientPos.y;
1311 else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
1312 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1313 }
1314 else if(RadInfo.NowDragging==FRAME_LOWER_LEFT){
1315 if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
1316 RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
1317 else if(mouse.x+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.x)
1318 RadInfo.DraggingRect[0].left=MdiInfo[i].MdiRadInfo->ClientPos.x;
1319 else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
1320
1321 if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
1322 RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
1323 else if(mouse.y>MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy)
1324 RadInfo.DraggingRect[0].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
1325 else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
1326 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1327 }
1328 else if(RadInfo.NowDragging==FRAME_LOWER_RIGHT){
1329 if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
1330 RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
1331 else if((mouse.x>MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1332 RadInfo.DraggingRect[0].right=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
1333 else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
1334
1335 if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
1336 RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
1337 else if((mouse.y>MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1338 RadInfo.DraggingRect[0].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
1339 else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
1340 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1341 }
1342 else if(RadInfo.NowDragging==FRAME_LEFT){
1343 if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
1344 RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
1345 else if(mouse.x+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.x)
1346 RadInfo.DraggingRect[0].left=MdiInfo[i].MdiRadInfo->ClientPos.x;
1347 else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
1348 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1349 }
1350 else if(RadInfo.NowDragging==FRAME_RIGHT){
1351 if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
1352 RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
1353 else if((mouse.x>MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1354 RadInfo.DraggingRect[0].right=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
1355 else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
1356 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1357 }
1358 else if(RadInfo.NowDragging==FRAME_UPPER){
1359 if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK))
1360 RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
1361 else if(mouse.y+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.y)
1362 RadInfo.DraggingRect[0].top=MdiInfo[i].MdiRadInfo->ClientPos.y;
1363 else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
1364 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1365 }
1366 else if(RadInfo.NowDragging==FRAME_LOWER){
1367 if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
1368 RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
1369 else if((mouse.y>MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1370 RadInfo.DraggingRect[0].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
1371 else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
1372 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1373 }
1374 else if(RadInfo.NowDragging==FRAME_INSIDE){
1375 i3=0;
1376 while(MdiInfo[i].MdiRadInfo->SelectingItem[i3]!=-1){
1377 i4=RadInfo.DragStartRect[i3].left+mouse.x-RadInfo.DragStartPos.x;
1378
1379 if(i4>MdiInfo[i].MdiRadInfo->ClientPos.x){
1380 i4=RadInfo.DragStartRect[i3].right+mouse.x-RadInfo.DragStartPos.x;
1381 if(i4<MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx) i4=0;
1382 else i4-=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
1383 }
1384 else i4-=MdiInfo[i].MdiRadInfo->ClientPos.x;
1385 //i4は枠外に出たときのポインタと壁にあたったコントロールとの差
1386 RadInfo.DraggingRect[i3].left=RadInfo.DragStartRect[i3].left+mouse.x-RadInfo.DragStartPos.x-i4;
1387 RadInfo.DraggingRect[i3].right=RadInfo.DragStartRect[i3].right+mouse.x-RadInfo.DragStartPos.x-i4;
1388
1389 i4=RadInfo.DragStartRect[i3].top+mouse.y-RadInfo.DragStartPos.y;
1390 if(i4>MdiInfo[i].MdiRadInfo->ClientPos.y){
1391 i4=RadInfo.DragStartRect[i3].bottom+mouse.y-RadInfo.DragStartPos.y;
1392 if(i4<MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy) i4=0;
1393 else i4-=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
1394 }
1395 else i4-=MdiInfo[i].MdiRadInfo->ClientPos.y;
1396 RadInfo.DraggingRect[i3].top=RadInfo.DragStartRect[i3].top+mouse.y-RadInfo.DragStartPos.y-i4;
1397 RadInfo.DraggingRect[i3].bottom=RadInfo.DragStartRect[i3].bottom+mouse.y-RadInfo.DragStartPos.y-i4;
1398
1399 if(MdiInfo[i].MdiRadInfo->SelectingItem[1]==-1) i4=1;
1400 else i4=0;
1401 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[i3],&RadInfo.OldDraggingRect[i3],i4);
1402 i3++;
1403 }
1404 }
1405 else if(RadInfo.NowDragging==SELECTING_FRAME){
1406 RadInfo.DraggingRect[0].left=RadInfo.DragStartPos.x;
1407 RadInfo.DraggingRect[0].top=RadInfo.DragStartPos.y;
1408 RadInfo.DraggingRect[0].right=mouse.x;
1409 RadInfo.DraggingRect[0].bottom=mouse.y;
1410 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1411 }
1412 SetCursorByState(RadInfo.NowDragging);
1413
1414 SetStatusText(NULL);
1415
1416 //サポートダイアログの内容をセット
1417 SetSupportDlgData(i,i2);
1418 }
1419 else{
1420 //ドラッグ中でないとき
1421 SetCursorByState(GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y));
1422 }
1423 }
1424 else{
1425 //アイテム(子ウィンドウ作成中)
1426 if(wParam&MK_LBUTTON&&RadInfo.NowDragging==ITEM_MAKING){
1427 //ドラッグ中の場合
1428
1429 RadInfo.DraggingRect[0].right=mouse.x;
1430 RadInfo.DraggingRect[0].bottom=mouse.y;
1431 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1432 }
1433 }
1434 return 0;
1435 case WM_LBUTTONDBLCLK:
1436 {
1437 mouse.x=LOWORD(lParam);
1438 mouse.y=HIWORD(lParam);
1439 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
1440
1441 hParent=GetParent(hwnd);
1442 i=GetWndNum(hParent);
1443 i2=GetWndInfoNum(MdiInfo[i].path);
1444 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[i].path);
1445 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1446 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
1447 temp2[0]=0;
1448 if(pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON||
1449 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX||
1450 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX||
1451 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON||
1452 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC){
1453 sprintf(temporary,"%s_%s_Click",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1454 }
1455 else if(pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX)
1456 sprintf(temporary,"%s_%s_EditChange",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1457 else if(pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT)
1458 sprintf(temporary,"%s_%s_Change",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1459 else if(pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX)
1460 sprintf(temporary,"%s_%s_SelChange",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1461 else temporary[0]=0;
1462 if(temporary[0]) SelectProcedureOfMessageCall(i2,temporary,temp2);
1463 }
1464 }
1465 return 0;
1466 }
1467 case WM_KEYDOWN:
1468 {
1469 hParent=GetParent(hwnd);
1470 i=GetWndNum(hParent);
1471 i2=GetWndInfoNum(MdiInfo[i].path);
1472 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[i].path);
1473 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1474 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
1475 PointAndSize.pos=pWindowInfo->pos;
1476 PointAndSize.size=pWindowInfo->size;
1477 if(GetKeyState(VK_SHIFT)&0x8000){
1478 if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP)
1479 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1480
1481 if(wParam==VK_RIGHT)
1482 pWindowInfo->size.cx++;
1483 else if(wParam==VK_LEFT)
1484 pWindowInfo->size.cx--;
1485 else if(wParam==VK_DOWN)
1486 pWindowInfo->size.cy++;
1487 else if(wParam==VK_UP)
1488 pWindowInfo->size.cy--;
1489
1490 if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP){
1491 DrawRadWindow(i,pWindowInfo);
1492
1493 SetStatusText(NULL);
1494
1495 //サポートダイアログの内容をセット
1496 SetSupportDlgData(i,i2);
1497 }
1498 }
1499 }
1500 else{
1501 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].pos;
1502 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size;
1503 if(wParam==VK_RIGHT){
1504 if(GetKeyState(VK_SHIFT)&0x8000){
1505 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1506 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx++;
1507 }
1508 else{
1509 for(i3=0;;i3++){
1510 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1511 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1512 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1513 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1514
1515 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x++;
1516 }
1517 }
1518 DrawRadWindow(i,pWindowInfo);
1519 SetStatusText(NULL);
1520
1521 //サポートダイアログの内容をセット
1522 SetSupportDlgData(i,i2);
1523 }
1524 else if(wParam==VK_LEFT){
1525 if(GetKeyState(VK_SHIFT)&0x8000){
1526 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1527 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx--;
1528 }
1529 else{
1530 for(i3=0;;i3++){
1531 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1532 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1533 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1534 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1535
1536 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x--;
1537 }
1538 }
1539 DrawRadWindow(i,pWindowInfo);
1540 SetStatusText(NULL);
1541
1542 //サポートダイアログの内容をセット
1543 SetSupportDlgData(i,i2);
1544 }
1545 else if(wParam==VK_UP){
1546 if(GetKeyState(VK_SHIFT)&0x8000){
1547 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1548 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cy--;
1549 }
1550 else{
1551 for(i3=0;;i3++){
1552 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1553 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1554 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1555 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1556
1557 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y--;
1558 }
1559 }
1560 DrawRadWindow(i,pWindowInfo);
1561 SetStatusText(NULL);
1562
1563 //サポートダイアログの内容をセット
1564 SetSupportDlgData(i,i2);
1565 }
1566 else if(wParam==VK_DOWN){
1567 if(GetKeyState(VK_SHIFT)&0x8000){
1568 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1569 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cy++;
1570 }
1571 else{
1572 for(i3=0;;i3++){
1573 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1574 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1575 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1576 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1577
1578 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y++;
1579 }
1580 }
1581 DrawRadWindow(i,pWindowInfo);
1582 SetStatusText(NULL);
1583
1584 //サポートダイアログの内容をセット
1585 SetSupportDlgData(i,i2);
1586 }
1587 else if(wParam==VK_DELETE)
1588 SendMessage(hwnd,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1589 }
1590 }
1591 return 0;
1592 }
1593 case WM_SETFOCUS:
1594 i=GetWndNum(GetParent(hwnd));
1595 if(MdiInfo[i].MdiRadInfo->ButtonSelect==NON_TOOL)
1596 MdiInfo[i].MdiRadInfo->ButtonSelect=IDC_TOOL_MOUSE;
1597 InvalidateRect(hwnd,NULL,0);
1598 return 0;
1599 case WM_KILLFOCUS:
1600 i=GetWndNum(GetParent(hwnd));
1601 if(i==-1) return 0; //ウィンドウが破棄された場合
1602 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE)
1603 MdiInfo[i].MdiRadInfo->ButtonSelect=NON_TOOL;
1604 InvalidateRect(hwnd,NULL,0);
1605 return 0;
1606 case WM_PAINT:
1607 i=GetWndNum(GetParent(hwnd));
1608 if(i==-1) return 0; //ウィンドウが初期状態の場合
1609 i2=GetWndInfoNum(MdiInfo[i].path);
1610
1611 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1612 ScrollInfo.fMask=SIF_RANGE|SIF_POS;
1613 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
1614 si2.cbSize=sizeof(SCROLLINFO);
1615 si2.fMask=SIF_RANGE|SIF_POS;
1616 GetScrollInfo(hwnd,SB_HORZ,&si2);
1617
1618 hdc=BeginPaint(hwnd,&ps);
1619 BitBlt(hdc,0,0,ScreenX*2,ScreenY*2,
1620 MdiInfo[i].MdiRadInfo->hMemDC,si2.nPos,ScrollInfo.nPos,SRCCOPY);
1621 EndPaint(hwnd,&ps);
1622
1623 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE||MdiInfo[i].MdiRadInfo->ButtonSelect==NON_TOOL)
1624 DrawSelectingRect(hwnd,i,i2,MdiInfo[i].MdiRadInfo->ButtonSelect);
1625 return 0;
1626 case WM_CONTEXTMENU:
1627 if(RadInfo.NowDragging) return 0;
1628
1629 hParent=GetParent(hwnd);
1630 BringWindowToTop(hParent);
1631 SetFocus(hwnd);
1632 i=GetWndNum(hParent);
1633 i2=GetWndInfoNum(MdiInfo[i].path);
1634
1635 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1636 mouse.x=LOWORD(lParam);
1637 mouse.y=HIWORD(lParam);
1638 ScreenToClient(hwnd,&mouse);
1639 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
1640 SelectItemNumOnMouse(i,i2,mouse.x,mouse.y);
1641 InvalidateRect(hwnd,NULL,0);
1642 extern HMENU hRadMenuBase;
1643 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
1644 TrackPopupMenu(GetSubMenu(hRadMenuBase,0),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
1645 else TrackPopupMenu(GetSubMenu(hRadMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
1646 }
1647 return 0;
1648 case WM_COMMAND:
1649 switch(LOWORD(wParam)){
1650 case IDM_RAD_WINDOW_EVENTCODE:
1651 i=GetWndNum(GetParent(hwnd));
1652 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_RAD_EVENTCODE),hwnd,(DLGPROC)DlgEventCode,0);
1653 break;
1654 case IDM_RAD_WINDOW_MENUEVENTCODE:
1655 i=GetWndNum(GetParent(hwnd));
1656 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_RAD_EVENTCODE),hwnd,(DLGPROC)DlgEventCode,1);
1657 break;
1658 case IDM_RAD_ITEM_DELETE:
1659 hParent=GetParent(hwnd);
1660 i=GetWndNum(hParent);
1661 i2=GetWndInfoNum(MdiInfo[i].path);
1662
1663 //削除順序を考慮しなければならないので、バブルソートを行う
1664 int i5,i6;
1665 for(i5=0;;i5++){
1666 if(MdiInfo[i].MdiRadInfo->SelectingItem[i5]==-1) break;
1667 }
1668 for(i3=0;i3<i5-1;i3++){
1669 for(i4=i5-1;i4>i3;i4--){
1670 if(MdiInfo[i].MdiRadInfo->SelectingItem[i4] >
1671 MdiInfo[i].MdiRadInfo->SelectingItem[i4-1]){
1672 i6=MdiInfo[i].MdiRadInfo->SelectingItem[i4];
1673 MdiInfo[i].MdiRadInfo->SelectingItem[i4]=
1674 MdiInfo[i].MdiRadInfo->SelectingItem[i4-1];
1675 MdiInfo[i].MdiRadInfo->SelectingItem[i4-1]=i6;
1676 }
1677 }
1678 }
1679
1680
1681 for(i3=0;;i3++){
1682 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1683 DeleteDlgItem(i,i2,MdiInfo[i].MdiRadInfo->SelectingItem[i3],1);
1684 }
1685 for(i3=0;i3<MAX_RAD_SELITEM;i3++) MdiInfo[i].MdiRadInfo->SelectingItem[i3]=-1;
1686
1687 ResetState_EditMenu();
1688 break;
1689 }
1690 return 0;
1691 case WM_VSCROLL:
1692 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1693 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
1694 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
1695 if(LOWORD(wParam)==SB_LINEUP) i=-20;
1696 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
1697 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
1698 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
1699 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
1700 else i=0;
1701 GetClientRect(hwnd,&rect);
1702 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
1703 if(i!=0){
1704 ScrollInfo.nPos+=i;
1705 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
1706 ScrollWindow(hwnd,0,-i,NULL,NULL);
1707 UpdateWindow(hwnd);
1708 }
1709 return 0;
1710 case WM_HSCROLL:
1711 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1712 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
1713 GetScrollInfo(hwnd,SB_HORZ,&ScrollInfo);
1714 if(LOWORD(wParam)==SB_LINEUP) i=-20;
1715 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
1716 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
1717 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
1718 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
1719 else i=0;
1720 GetClientRect(hwnd,&rect);
1721 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.right-ScrollInfo.nPos));
1722 if(i!=0){
1723 ScrollInfo.nPos+=i;
1724 SetScrollInfo(hwnd,SB_HORZ,&ScrollInfo,1);
1725 ScrollWindow(hwnd,-i,0,NULL,NULL);
1726 UpdateWindow(hwnd);
1727 }
1728 return 0;
1729 case WM_SIZE:
1730 i=GetWndNum(GetParent(hwnd));
1731 if(i==-1) break; //ウィンドウが初期状態の場合
1732 ResetScrollbarOfRadEditor(i,LOWORD(lParam),HIWORD(lParam));
1733 return 0;
1734 }
1735 return DefWindowProc(hwnd,message,wParam,lParam);
1736}
1737void ResizeToRadToolWindows(int WndNum,int weight,int height){
1738 extern MDIINFO MdiInfo[MAX_WNDNUM];
1739 int i,i2;
1740 RECT rect;
1741
1742 if(height<200){
1743 i=100;
1744 i2=100;
1745 }
1746 else{
1747 //ツールボタンウィンドウ(長さ、i)
1748 GetClientRect(GetWindow(MdiInfo[WndNum].MdiRadInfo->hTools,GW_CHILD),&rect);
1749 if(height>rect.bottom+1) i=rect.bottom+1;
1750 else i=height;
1751
1752 //プロパティウィンドウ(長さ、i2)
1753 GetClientRect(GetWindow(MdiInfo[WndNum].MdiRadInfo->hProperty,GW_CHILD),&rect);
1754 i2=height-i;
1755
1756 if(i2<100){
1757 i=height-100;
1758 i2=100;
1759 }
1760 }
1761 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hTools,weight-172,0,172,i,1);
1762 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hProperty,weight-172,i,172,i2,1);
1763
1764 GetWindowRect(MdiInfo[WndNum].MdiRadInfo->hSupport,&rect);
1765 rect.right-=rect.left;
1766 rect.bottom-=rect.top;
1767
1768 //RADウィンドウ
1769 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hRad,0,0,weight-172,height-rect.bottom,1);
1770
1771 //サポートウィンドウ
1772 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hSupport,0,height-rect.bottom,weight-172,rect.bottom,1);
1773}
1774LRESULT CALLBACK MDIClientWindow_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1775 extern HWND hDocCombo;
1776 extern MDIINFO MdiInfo[MAX_WNDNUM];
1777 extern PROJECTINFO ProjectInfo;
1778 int i,WndNum;
1779
1780 switch(message){
1781 case WM_CREATE:
1782 extern HICON hWindowDocumentIcon;
1783 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(long)hWindowDocumentIcon);
1784 break;
1785 case WM_MDIACTIVATE:
1786 if(!lParam) return 0;
1787 i=GetWndNum((HWND)lParam);
1788 if(i==-1) return 0; //ウィンドウが初期状態の場合
1789
1790 i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1791 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
1792 SetStatusText(NULL);
1793 ResetState_EditMenu();
1794 return 0;
1795 case WM_SIZE:
1796 WndNum=GetWndNum(hwnd);
1797 if(WndNum==-1) break;
1798 ResizeToRadToolWindows(WndNum,LOWORD(lParam),HIWORD(lParam));
1799 break;
1800 case WM_CLOSE:
1801 CloseDocWindow(GetWndNum(hwnd));
1802 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1803 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1804
1805 //メニュー状態を設定
1806 ResetState_DocMenu();
1807
1808 return i;
1809 }
1810 return DefMDIChildProc(hwnd,message,wParam,lParam);
1811}
Note: See TracBrowser for help on using the repository browser.