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

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

pWindowInfo->pChildInfoのメモリ再確保ロジックに誤りがあったため、修正。

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