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

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

MDIINFO構造体をリファクタリング。

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