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

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

構成管理を変更中・・・(いったんコミット)

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