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

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

"extern PROJECTINFO ProjectInfo;" をすべて除去した。
PROJECTINFO構造体の定義位置を移動した。

File size: 73.5 KB
Line 
1#include "stdafx.h"
2
3
4#include "common.h"
5
6void NewRadWindow( const WINDOW_INFO &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 CHILDINFO *pChildInfo;
166
167 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
168
169 pWindowInfo->pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,pWindowInfo->pChildInfo,(pWindowInfo->NumberOfChildWindows+1)*sizeof(WINDOW_INFO));
170 if(ItemNum==-1)
171 NewItemNum=pWindowInfo->NumberOfChildWindows;
172 else{
173 for(i=pWindowInfo->NumberOfChildWindows;i>ItemNum;i--)
174 pWindowInfo->pChildInfo[i]=pWindowInfo->pChildInfo[i-1];
175 NewItemNum=ItemNum;
176 }
177 pChildInfo=&pWindowInfo->pChildInfo[NewItemNum];
178
179 //ID
180 if(ItemNum==-1){
181 for(i=lstrlen(IdName)-1;i>=0;i--){
182 if(!('0'<=IdName[i]&&IdName[i]<='9')) break;
183 }
184 i++;
185
186 if(IdName[i]!='\0'){
187 i2=atoi(IdName+i)+1;
188 if(dwInsertType==2) i2--;
189 IdName[i]=0;
190 }
191 else{
192 if(dwInsertType==2) i2=0;
193 else i2=1;
194 }
195
196 if(i2==0) lstrcpy(temporary,IdName);
197 else sprintf(temporary,"%s%d",IdName,i2);
198SearchStart:
199 for(i=0;i<pWindowInfo->NumberOfChildWindows;i++){
200 if(i!=NewItemNum){
201 if(lstrcmp(pWindowInfo->pChildInfo[i].IdName,temporary)==0){
202 i2++;
203 sprintf(temporary,"%s%d",IdName,i2);
204 goto SearchStart;
205 }
206 }
207 }
208 }
209 else lstrcpy(temporary,IdName);
210 pChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
211 lstrcpy(pChildInfo->IdName,temporary);
212
213 //位置
214 pChildInfo->pos=*pPos;
215 pChildInfo->size=*pSize;
216 //小さすぎる場合は、最小の大きさに調整
217 if(pChildInfo->size.cx<MIN_ITEM_X) pChildInfo->size.cx=MIN_ITEM_X;
218 if(pChildInfo->size.cy<MIN_ITEM_Y) pChildInfo->size.cy=MIN_ITEM_Y;
219
220 //テキスト
221 if(ItemNum==-1){
222 if(dwInsertType==1){
223 if(caption[0]) sprintf(temporary,"%s%d",caption,i2);
224 else temporary[0]=0;
225 }
226 else lstrcpy(temporary,caption);
227 }
228 else lstrcpy(temporary,caption);
229 pChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
230 lstrcpy(pChildInfo->caption,temporary);
231
232 //スタイル
233 pChildInfo->style=style_or_WndNum;
234
235 //拡張スタイル
236 pChildInfo->ExStyle=ExStyle;
237
238 //クラス名
239 pChildInfo->Control=Control;
240
241 if(Control==CT_IMAGEBOX){
242 //イメージ ボックスの場合
243 pChildInfo->ImageCtrlInfo.type=ImageType;
244 if(!ImagePath)
245 pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
246 else{
247 pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,lstrlen(ImagePath)+1);
248 lstrcpy(pChildInfo->ImageCtrlInfo.path,ImagePath);
249 }
250 }
251
252 //変更情報
253 if(dwInsertType!=0)
254 Rad_NoticeChanging(WndNum,RAD_UNDO_INSERTITEM,NewItemNum,(DWORD)pChildInfo);
255
256 pWindowInfo->NumberOfChildWindows++;
257
258 DrawRadWindow(WndNum,pWindowInfo);
259 return NewItemNum;
260}
261void DeleteDlgItem(int WndNum,int WndInfoNum,int ItemNum,BOOL bNoticeChanging){
262 extern HANDLE hHeap;
263 extern MDIINFO MdiInfo[MAX_WNDNUM];
264 int i;
265
266 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
267
268 //変更情報
269 if(bNoticeChanging)
270 Rad_NoticeChanging(WndNum,RAD_UNDO_DELETEITEM,ItemNum,(DWORD)&pWindowInfo->pChildInfo[ItemNum]);
271
272 //子ウィンドウのメモリを解放
273 HeapDefaultFree(pWindowInfo->pChildInfo[ItemNum].IdName);
274 HeapDefaultFree(pWindowInfo->pChildInfo[ItemNum].caption);
275 if(pWindowInfo->pChildInfo[ItemNum].Control==CT_IMAGEBOX){
276 //イメージ ボックスの場合
277 HeapDefaultFree(pWindowInfo->pChildInfo[ItemNum].ImageCtrlInfo.path);
278 }
279
280 pWindowInfo->NumberOfChildWindows--;
281 for(i=ItemNum;i<pWindowInfo->NumberOfChildWindows;i++)
282 {
283 pWindowInfo->pChildInfo[i]=pWindowInfo->pChildInfo[i+1];
284 }
285 if( pWindowInfo->NumberOfChildWindows == 0 )
286 {
287 pWindowInfo->pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,pWindowInfo->pChildInfo,1);
288 }
289 else
290 {
291 pWindowInfo->pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,pWindowInfo->pChildInfo,pWindowInfo->NumberOfChildWindows*sizeof(CHILDINFO));
292 }
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 WINDOW_INFO *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->NumberOfChildWindows;i++){
356 if(i==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]) continue;
357 if(pWindowInfo->pChildInfo[i].Control !=
358 pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control) continue;
359
360 if(NewRect->left<OldRect->left){
361 if(pWindowInfo->pChildInfo[i].pos.x
362 >
363 NewRect->left - MdiInfo[WndNum].MdiRadInfo->ClientPos.x
364 &&
365 pWindowInfo->pChildInfo[i].pos.x-10
366 <
367 NewRect->left - MdiInfo[WndNum].MdiRadInfo->ClientPos.x){
368
369 //左側をストップする
370 x=NewRect->right-NewRect->left;
371 NewRect->left=pWindowInfo->pChildInfo[i].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(pWindowInfo->pChildInfo[i].pos.y
387 >
388 NewRect->top - MdiInfo[WndNum].MdiRadInfo->ClientPos.y
389 &&
390 pWindowInfo->pChildInfo[i].pos.y-10
391 <
392 NewRect->top - MdiInfo[WndNum].MdiRadInfo->ClientPos.y){
393
394 //左側をストップする
395 y=NewRect->bottom-NewRect->top;
396 NewRect->top=pWindowInfo->pChildInfo[i].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 WINDOW_INFO *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->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.x-LEVER_THICK;
463 rect->top=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.y-LEVER_THICK;
464 rect->right=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.x+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].size.cx+LEVER_THICK;
465 rect->bottom=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.y+pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].size.cy+LEVER_THICK;
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 WINDOW_INFO *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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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->pChildInfo[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 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
610
611 for(i=pWindowInfo->NumberOfChildWindows-1;i>=0;i--){
612 if(pWindowInfo->pChildInfo[i].Control==CT_COMBOBOX&&
613 (pWindowInfo->pChildInfo[i].style&0x000F)!=CBS_SIMPLE){
614 //コンボ ボックスの場合は表示部分をターゲットに選択する(高さ20pixel)
615 if(x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x&&
616 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx&&
617 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y&&
618 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+20){
619 break;
620 }
621 }
622 else if(pWindowInfo->pChildInfo[i].Control==CT_GROUPBOX){
623 //グループ ボックスの場合は中央をあける
624 if((
625 x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x&&
626 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx&&
627 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y&&
628 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[i].size.cy
629 )&&
630 (!(
631 x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+LEVER_THICK*2&&
632 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx-LEVER_THICK*2&&
633 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+LEVER_THICK*3&&
634 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[i].size.cy-LEVER_THICK*2
635 ))
636 ){
637 break;
638 }
639 }
640 else if(x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x&&
641 x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx&&
642 y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y&&
643 y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[i].size.cy){
644 break;
645 }
646 }
647 return i;
648}
649void SelectItemNumOnMouse(int WndNum,int WndInfoNum,int x,int y){
650 //マウス座標をもとにコントロールアイテムを選択
651 extern MDIINFO MdiInfo[MAX_WNDNUM];
652 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 WINDOW_INFO *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->NumberOfChildWindows-1,i2=0;i>=0;i--){
685 if(rect.left <= pWindowInfo->pChildInfo[i].pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x&&
686 rect.top <= pWindowInfo->pChildInfo[i].pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y&&
687 rect.right >= pWindowInfo->pChildInfo[i].pos.x+pWindowInfo->pChildInfo[i].size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x&&
688 rect.bottom >= pWindowInfo->pChildInfo[i].pos.y+pWindowInfo->pChildInfo[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 WINDOW_INFO *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->pChildInfo[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->pChildInfo[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 WINDOW_INFO *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 WINDOW_INFO *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->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x;
858 RadInfo.DraggingRect[i3].top=MdiInfo[i].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y;
859 RadInfo.DraggingRect[i3].right=MdiInfo[i].MdiRadInfo->ClientPos.x+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx;
860 RadInfo.DraggingRect[i3].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y+pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy;
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 WINDOW_INFO *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->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
933 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
934 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
935 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x=RadInfo.DraggingRect[i3].left-MdiInfo[i].MdiRadInfo->ClientPos.x;
936 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y=RadInfo.DraggingRect[i3].top-MdiInfo[i].MdiRadInfo->ClientPos.y;
937 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx=RadInfo.DraggingRect[i3].right-RadInfo.DraggingRect[i3].left;
938 pWindowInfo->pChildInfo[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 WINDOW_INFO *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 WINDOW_INFO *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->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON||
1447 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX||
1448 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX||
1449 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON||
1450 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC){
1451 sprintf(temporary,"%s_%s_Click",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1452 }
1453 else if(pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX)
1454 sprintf(temporary,"%s_%s_EditChange",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1455 else if(pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT)
1456 sprintf(temporary,"%s_%s_Change",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1457 else if(pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX)
1458 sprintf(temporary,"%s_%s_SelChange",pWindowInfo->name,pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
1459 else temporary[0]=0;
1460 if(temporary[0]) SelectProcedureOfMessageCall(i2,temporary,temp2);
1461 }
1462 }
1463 return 0;
1464 }
1465 case WM_KEYDOWN:
1466 {
1467 hParent=GetParent(hwnd);
1468 i=GetWndNum(hParent);
1469 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[i].path);
1470 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1471 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
1472 PointAndSize.pos=pWindowInfo->pos;
1473 PointAndSize.size=pWindowInfo->size;
1474 if(GetKeyState(VK_SHIFT)&0x8000){
1475 if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP)
1476 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1477
1478 if(wParam==VK_RIGHT)
1479 pWindowInfo->size.cx++;
1480 else if(wParam==VK_LEFT)
1481 pWindowInfo->size.cx--;
1482 else if(wParam==VK_DOWN)
1483 pWindowInfo->size.cy++;
1484 else if(wParam==VK_UP)
1485 pWindowInfo->size.cy--;
1486
1487 if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP){
1488 DrawRadWindow(i,pWindowInfo);
1489
1490 SetStatusText(NULL);
1491
1492 //サポートダイアログの内容をセット
1493 SetSupportDlgData( i, *pWindowInfo );
1494 }
1495 }
1496 }
1497 else{
1498 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].pos;
1499 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size;
1500 if(wParam==VK_RIGHT){
1501 if(GetKeyState(VK_SHIFT)&0x8000){
1502 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1503 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx++;
1504 }
1505 else{
1506 for(i3=0;;i3++){
1507 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1508 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1509 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1510 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1511
1512 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x++;
1513 }
1514 }
1515 DrawRadWindow(i,pWindowInfo);
1516 SetStatusText(NULL);
1517
1518 //サポートダイアログの内容をセット
1519 SetSupportDlgData( i, *pWindowInfo );
1520 }
1521 else if(wParam==VK_LEFT){
1522 if(GetKeyState(VK_SHIFT)&0x8000){
1523 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1524 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx--;
1525 }
1526 else{
1527 for(i3=0;;i3++){
1528 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1529 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1530 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1531 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1532
1533 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x--;
1534 }
1535 }
1536 DrawRadWindow(i,pWindowInfo);
1537 SetStatusText(NULL);
1538
1539 //サポートダイアログの内容をセット
1540 SetSupportDlgData( i, *pWindowInfo );
1541 }
1542 else if(wParam==VK_UP){
1543 if(GetKeyState(VK_SHIFT)&0x8000){
1544 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1545 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cy--;
1546 }
1547 else{
1548 for(i3=0;;i3++){
1549 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1550 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1551 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1552 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1553
1554 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y--;
1555 }
1556 }
1557 DrawRadWindow(i,pWindowInfo);
1558 SetStatusText(NULL);
1559
1560 //サポートダイアログの内容をセット
1561 SetSupportDlgData( i, *pWindowInfo );
1562 }
1563 else if(wParam==VK_DOWN){
1564 if(GetKeyState(VK_SHIFT)&0x8000){
1565 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1566 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cy++;
1567 }
1568 else{
1569 for(i3=0;;i3++){
1570 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1571 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
1572 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
1573 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1574
1575 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y++;
1576 }
1577 }
1578 DrawRadWindow(i,pWindowInfo);
1579 SetStatusText(NULL);
1580
1581 //サポートダイアログの内容をセット
1582 SetSupportDlgData( i, *pWindowInfo );
1583 }
1584 else if(wParam==VK_DELETE)
1585 SendMessage(hwnd,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1586 }
1587 }
1588 return 0;
1589 }
1590 case WM_SETFOCUS:
1591 i=GetWndNum(GetParent(hwnd));
1592 if(MdiInfo[i].MdiRadInfo->ButtonSelect==NON_TOOL)
1593 MdiInfo[i].MdiRadInfo->ButtonSelect=IDC_TOOL_MOUSE;
1594 InvalidateRect(hwnd,NULL,0);
1595 return 0;
1596 case WM_KILLFOCUS:
1597 i=GetWndNum(GetParent(hwnd));
1598 if(i==-1) return 0; //ウィンドウが破棄された場合
1599 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE)
1600 MdiInfo[i].MdiRadInfo->ButtonSelect=NON_TOOL;
1601 InvalidateRect(hwnd,NULL,0);
1602 return 0;
1603 case WM_PAINT:
1604 i=GetWndNum(GetParent(hwnd));
1605 if(i==-1) return 0; //ウィンドウが初期状態の場合
1606 i2=GetWndInfoNum(MdiInfo[i].path);
1607
1608 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1609 ScrollInfo.fMask=SIF_RANGE|SIF_POS;
1610 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
1611 si2.cbSize=sizeof(SCROLLINFO);
1612 si2.fMask=SIF_RANGE|SIF_POS;
1613 GetScrollInfo(hwnd,SB_HORZ,&si2);
1614
1615 hdc=BeginPaint(hwnd,&ps);
1616 BitBlt(hdc,0,0,ScreenX*2,ScreenY*2,
1617 MdiInfo[i].MdiRadInfo->hMemDC,si2.nPos,ScrollInfo.nPos,SRCCOPY);
1618 EndPaint(hwnd,&ps);
1619
1620 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE||MdiInfo[i].MdiRadInfo->ButtonSelect==NON_TOOL)
1621 DrawSelectingRect(hwnd,i,i2,MdiInfo[i].MdiRadInfo->ButtonSelect);
1622 return 0;
1623 case WM_CONTEXTMENU:
1624 if(RadInfo.NowDragging) return 0;
1625
1626 hParent=GetParent(hwnd);
1627 BringWindowToTop(hParent);
1628 SetFocus(hwnd);
1629 i=GetWndNum(hParent);
1630 i2=GetWndInfoNum(MdiInfo[i].path);
1631
1632 if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1633 mouse.x=LOWORD(lParam);
1634 mouse.y=HIWORD(lParam);
1635 ScreenToClient(hwnd,&mouse);
1636 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
1637 SelectItemNumOnMouse(i,i2,mouse.x,mouse.y);
1638 InvalidateRect(hwnd,NULL,0);
1639 extern HMENU hRadMenuBase;
1640 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
1641 TrackPopupMenu(GetSubMenu(hRadMenuBase,0),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
1642 else TrackPopupMenu(GetSubMenu(hRadMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
1643 }
1644 return 0;
1645 case WM_COMMAND:
1646 switch(LOWORD(wParam)){
1647 case IDM_RAD_WINDOW_EVENTCODE:
1648 i=GetWndNum(GetParent(hwnd));
1649 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_RAD_EVENTCODE),hwnd,(DLGPROC)DlgEventCode,0);
1650 break;
1651 case IDM_RAD_WINDOW_MENUEVENTCODE:
1652 i=GetWndNum(GetParent(hwnd));
1653 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_RAD_EVENTCODE),hwnd,(DLGPROC)DlgEventCode,1);
1654 break;
1655 case IDM_RAD_ITEM_DELETE:
1656 hParent=GetParent(hwnd);
1657 i=GetWndNum(hParent);
1658 i2=GetWndInfoNum(MdiInfo[i].path);
1659
1660 //削除順序を考慮しなければならないので、バブルソートを行う
1661 int i5,i6;
1662 for(i5=0;;i5++){
1663 if(MdiInfo[i].MdiRadInfo->SelectingItem[i5]==-1) break;
1664 }
1665 for(i3=0;i3<i5-1;i3++){
1666 for(i4=i5-1;i4>i3;i4--){
1667 if(MdiInfo[i].MdiRadInfo->SelectingItem[i4] >
1668 MdiInfo[i].MdiRadInfo->SelectingItem[i4-1]){
1669 i6=MdiInfo[i].MdiRadInfo->SelectingItem[i4];
1670 MdiInfo[i].MdiRadInfo->SelectingItem[i4]=
1671 MdiInfo[i].MdiRadInfo->SelectingItem[i4-1];
1672 MdiInfo[i].MdiRadInfo->SelectingItem[i4-1]=i6;
1673 }
1674 }
1675 }
1676
1677
1678 for(i3=0;;i3++){
1679 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
1680 DeleteDlgItem(i,i2,MdiInfo[i].MdiRadInfo->SelectingItem[i3],1);
1681 }
1682 for(i3=0;i3<MAX_RAD_SELITEM;i3++) MdiInfo[i].MdiRadInfo->SelectingItem[i3]=-1;
1683
1684 ResetState_EditMenu();
1685 break;
1686 }
1687 return 0;
1688 case WM_VSCROLL:
1689 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1690 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
1691 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
1692 if(LOWORD(wParam)==SB_LINEUP) i=-20;
1693 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
1694 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
1695 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
1696 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
1697 else i=0;
1698 GetClientRect(hwnd,&rect);
1699 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
1700 if(i!=0){
1701 ScrollInfo.nPos+=i;
1702 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
1703 ScrollWindow(hwnd,0,-i,NULL,NULL);
1704 UpdateWindow(hwnd);
1705 }
1706 return 0;
1707 case WM_HSCROLL:
1708 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1709 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
1710 GetScrollInfo(hwnd,SB_HORZ,&ScrollInfo);
1711 if(LOWORD(wParam)==SB_LINEUP) i=-20;
1712 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
1713 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
1714 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
1715 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
1716 else i=0;
1717 GetClientRect(hwnd,&rect);
1718 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.right-ScrollInfo.nPos));
1719 if(i!=0){
1720 ScrollInfo.nPos+=i;
1721 SetScrollInfo(hwnd,SB_HORZ,&ScrollInfo,1);
1722 ScrollWindow(hwnd,-i,0,NULL,NULL);
1723 UpdateWindow(hwnd);
1724 }
1725 return 0;
1726 case WM_SIZE:
1727 i=GetWndNum(GetParent(hwnd));
1728 if(i==-1) break; //ウィンドウが初期状態の場合
1729 ResetScrollbarOfRadEditor(i,LOWORD(lParam),HIWORD(lParam));
1730 return 0;
1731 }
1732 return DefWindowProc(hwnd,message,wParam,lParam);
1733}
1734void ResizeToRadToolWindows(int WndNum,int weight,int height){
1735 extern MDIINFO MdiInfo[MAX_WNDNUM];
1736 int i,i2;
1737 RECT rect;
1738
1739 if(height<200){
1740 i=100;
1741 i2=100;
1742 }
1743 else{
1744 //ツールボタンウィンドウ(長さ、i)
1745 GetClientRect(GetWindow(MdiInfo[WndNum].MdiRadInfo->hTools,GW_CHILD),&rect);
1746 if(height>rect.bottom+1) i=rect.bottom+1;
1747 else i=height;
1748
1749 //プロパティウィンドウ(長さ、i2)
1750 GetClientRect(GetWindow(MdiInfo[WndNum].MdiRadInfo->hProperty,GW_CHILD),&rect);
1751 i2=height-i;
1752
1753 if(i2<100){
1754 i=height-100;
1755 i2=100;
1756 }
1757 }
1758 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hTools,weight-172,0,172,i,1);
1759 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hProperty,weight-172,i,172,i2,1);
1760
1761 GetWindowRect(MdiInfo[WndNum].MdiRadInfo->hSupport,&rect);
1762 rect.right-=rect.left;
1763 rect.bottom-=rect.top;
1764
1765 //RADウィンドウ
1766 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hRad,0,0,weight-172,height-rect.bottom,1);
1767
1768 //サポートウィンドウ
1769 MoveWindow(MdiInfo[WndNum].MdiRadInfo->hSupport,0,height-rect.bottom,weight-172,rect.bottom,1);
1770}
1771LRESULT CALLBACK MDIClientWindow_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1772 extern HWND hDocCombo;
1773 extern MDIINFO MdiInfo[MAX_WNDNUM];
1774 int i,WndNum;
1775
1776 switch(message){
1777 case WM_CREATE:
1778 extern HICON hWindowDocumentIcon;
1779 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(long)hWindowDocumentIcon);
1780 break;
1781 case WM_MDIACTIVATE:
1782 if(!lParam) return 0;
1783 i=GetWndNum((HWND)lParam);
1784 if(i==-1) return 0; //ウィンドウが初期状態の場合
1785
1786 i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1787 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
1788 SetStatusText(NULL);
1789 ResetState_EditMenu();
1790 return 0;
1791 case WM_SIZE:
1792 WndNum=GetWndNum(hwnd);
1793 if(WndNum==-1) break;
1794 ResizeToRadToolWindows(WndNum,LOWORD(lParam),HIWORD(lParam));
1795 break;
1796 case WM_CLOSE:
1797 CloseDocWindow(GetWndNum(hwnd));
1798 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1799 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1800
1801 //メニュー状態を設定
1802 ResetState_DocMenu();
1803
1804 return i;
1805 }
1806 return DefMDIChildProc(hwnd,message,wParam,lParam);
1807}
Note: See TracBrowser for help on using the repository browser.