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

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

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

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