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

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

・PROJECTINFO構造体を廃止し、Projectクラスを採用した。
・ProjectInfoをprojectInfoにリネーム

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