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

Last change on this file was 829, checked in by イグトランス (egtra), 12 years ago

svn:eol-styleとsvn:mime-type(文字コード指定含む)の設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain; charset=Shift_JIS
File size: 74.6 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,(LPARAM)&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 = ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_SUPPORT, hChild, 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 = ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_WINDOW, hProperty, 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( hChild, 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 = ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_WINDOW, MdiInfo[WndNum]->MdiRadInfo->hProperty, 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 = ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_WINDOW, MdiInfo[WndNum]->MdiRadInfo->hProperty, 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=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_BUTTON, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_ButtonProc);
553 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_CHECKBOX)
554 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_CHECKBOX, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_CheckBoxProc);
555 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_COMBOBOX)
556 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_COMBOBOX, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_ComboBoxProc);
557 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_EDIT)
558 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_EDIT, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_EditProc);
559 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_GROUPBOX)
560 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_GROUPBOX, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_GroupBoxProc);
561 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_HSCROLLBAR)
562 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_SCROLLBAR, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_ScrollBarProc);
563 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_IMAGEBOX)
564 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_IMAGEBOX, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_ImageBoxProc);
565 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_LISTBOX)
566 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_LISTBOX, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_ListBoxProc);
567 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_LISTVIEW)
568 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_LISTVIEW, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_ListViewProc);
569 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_PROGRESSBAR)
570 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_PROGRESSBAR, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_ProgressBarProc);
571 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_RADIOBUTTON)
572 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_RADIOBUTTON, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_RadioButtonProc);
573 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_STATIC)
574 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_STATIC, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_StaticProc);
575 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_TRACKBAR)
576 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_TRACKBAR, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_TrackBarProc);
577 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_TREEVIEW)
578 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_TREEVIEW, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_TreeViewProc);
579 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_UPDOWN)
580 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_UPDOWN, MdiInfo[WndNum]->MdiRadInfo->hProperty, RadProperty_UpDownProc);
581 else if(pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->Control==CT_VSCROLLBAR)
582 MdiInfo[WndNum]->MdiRadInfo->hProp_Dlg=ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_RAD_PROP_SCROLLBAR, MdiInfo[WndNum]->MdiRadInfo->hProperty, 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 POINTANDSIZE PointAndSize;
787
788 switch(message){
789 case WM_LBUTTONDOWN:
790 {
791 SetCapture(hwnd);
792
793 SetFocus(hwnd);
794 mouse.x=GET_X_LPARAM(lParam);
795 mouse.y=GET_Y_LPARAM(lParam);
796 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
797
798 i=GetWndNum(GetParent(hwnd));
799 i2 = GetWndInfoNum(MdiInfo[i]->path);
800 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[i]->path);
801
802 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
803 if(((wParam&MK_CONTROL)||(wParam&MK_SHIFT))&&
804 MdiInfo[i]->MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
805
806 //Shiftキー、Ctrlキーによる複数選択
807 for(i3=0;;i3++){
808 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1){
809 MdiInfo[i]->MdiRadInfo->SelectingItem[i3]=GetItemNumOnMouse(i,i2,mouse.x,mouse.y);
810 InvalidateRect(hwnd,NULL,0);
811
812 //サポートダイアログの内容をセット
813 SetSupportDlgData( i, *pWindowInfo );
814 break;
815 }
816 }
817 }
818 else{
819 RadInfo.NowDragging=GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y);
820 if(!RadInfo.NowDragging){
821 SelectItemNumOnMouse(i,i2,mouse.x,mouse.y);
822 InvalidateRect(hwnd,NULL,0);
823 RadInfo.NowDragging=GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y);
824 }
825 if(RadInfo.NowDragging){
826 //アイテム選択中。サイズ、位置変更開始
827
828 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
829 RadInfo.DraggingRect[0].left=LEVER_THICK;
830 RadInfo.DraggingRect[0].top=LEVER_THICK;
831 RadInfo.DraggingRect[0].right=pWindowInfo->size.cx+LEVER_THICK;
832 RadInfo.DraggingRect[0].bottom=pWindowInfo->size.cy+LEVER_THICK;
833 RadInfo.DragStartRect[0]=RadInfo.DraggingRect[0];
834 }
835 else{
836 i3=0;
837 while(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]!=-1){
838 RadInfo.DraggingRect[i3].left=MdiInfo[i]->MdiRadInfo->ClientPos.x+pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.x;
839 RadInfo.DraggingRect[i3].top=MdiInfo[i]->MdiRadInfo->ClientPos.y+pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.y;
840 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;
841 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;
842 RadInfo.DragStartRect[i3]=RadInfo.DraggingRect[i3];
843 i3++;
844 }
845 }
846 }
847 else{
848 //範囲選択
849
850 RadInfo.NowDragging=SELECTING_FRAME;
851 RadInfo.OldDraggingRect[0].left=LEVER_THICK;
852 RadInfo.OldDraggingRect[0].top=LEVER_THICK;
853 RadInfo.OldDraggingRect[0].right=pWindowInfo->size.cx+LEVER_THICK;
854 RadInfo.OldDraggingRect[0].bottom=pWindowInfo->size.cy+LEVER_THICK;
855 }
856 RadInfo.DragStartPos.x=mouse.x;
857 RadInfo.DragStartPos.y=mouse.y;
858 }
859 SetCursorByState(RadInfo.NowDragging);
860 }
861 else{
862 RadInfo.DraggingRect[0].left=mouse.x;
863 RadInfo.DraggingRect[0].top=mouse.y;
864 RadInfo.NowDragging=ITEM_MAKING;
865 }
866 return 0;
867 }
868 case WM_LBUTTONUP:
869 {
870 ReleaseCapture();
871
872 SetFocus(hwnd);
873 mouse.x=GET_X_LPARAM(lParam);
874 mouse.y=GET_Y_LPARAM(lParam);
875 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
876
877 hParent=GetParent(hwnd);
878 i=GetWndNum(hParent);
879 i2 = GetWndInfoNum(MdiInfo[i]->path);
880 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[i]->path);
881
882 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
883 if(RadInfo.NowDragging){
884 if(RadInfo.DragStartPos.x==mouse.x&&RadInfo.DragStartPos.y==mouse.y){
885 RadInfo.NowDragging=0;
886 InvalidateRect(hwnd,NULL,0);
887 ResetState_EditMenu();
888 return 0;
889 }
890
891 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
892 if(RadInfo.NowDragging==SELECTING_FRAME){
893 SetItemNumOnFrame(i,i2,&RadInfo.DraggingRect[0]);
894 InvalidateRect(hwnd,NULL,1);
895 }
896 else{
897 //ウィンドウ枠の調整完了
898 PointAndSize.size=pWindowInfo->size;
899 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
900 pWindowInfo->size.cx=RadInfo.DraggingRect[0].right-LEVER_THICK;
901 pWindowInfo->size.cy=RadInfo.DraggingRect[0].bottom-LEVER_THICK;
902 DrawRadWindow(i,pWindowInfo);
903 InvalidateRect(hwnd,NULL,1);
904
905 GetClientRect(hwnd,&rect);
906 ResetScrollbarOfRadEditor(i,rect.right,rect.bottom);
907 }
908 }
909 else{
910 i3=0;
911 while(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]!=-1){
912 //アイテム枠の調整完了
913 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos;
914 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size;
915 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
916 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.x=RadInfo.DraggingRect[i3].left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
917 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.y=RadInfo.DraggingRect[i3].top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
918 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size.cx=RadInfo.DraggingRect[i3].right-RadInfo.DraggingRect[i3].left;
919 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size.cy=RadInfo.DraggingRect[i3].bottom-RadInfo.DraggingRect[i3].top;
920 DrawRadWindow(i,pWindowInfo);
921 i3++;
922 }
923 }
924
925 SetStatusText(NULL);
926
927 //サポートダイアログの内容をセット
928 SetSupportDlgData( i, *pWindowInfo );
929 }
930 }
931 else if(RadInfo.NowDragging==ITEM_MAKING){
932 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_BUTTON){
933 //ボタン コントロール作成
934 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
935 RadInfo.DraggingRect[0].left-=44;
936 RadInfo.DraggingRect[0].right=mouse.x+44;
937 RadInfo.DraggingRect[0].top-=10;
938 RadInfo.DraggingRect[0].bottom=mouse.y+11;
939 }
940 else{
941 RadInfo.DraggingRect[0].right=mouse.x;
942 RadInfo.DraggingRect[0].bottom=mouse.y;
943 }
944 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
945 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
946 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
947 size.cx=rect.right-rect.left;
948 size.cy=rect.bottom-rect.top;
949 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
950 i,
951 i2,
952 -1,
953 &pos,
954 &size,
955 "CommandButton",
956 "Button",
957 WS_CHILD|WS_VISIBLE,0,CT_BUTTON,
958 ActiveBasic::PM::ImageReferenceType::File,
959 0,
960 1
961 );
962 }
963 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_CHECKBOX){
964 //チェック ボックス作成
965 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
966 RadInfo.DraggingRect[0].left-=33;
967 RadInfo.DraggingRect[0].right=mouse.x+34;
968 RadInfo.DraggingRect[0].top-=7;
969 RadInfo.DraggingRect[0].bottom=mouse.y+8;
970 }
971 else{
972 RadInfo.DraggingRect[0].right=mouse.x;
973 RadInfo.DraggingRect[0].bottom=mouse.y;
974 }
975 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
976 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
977 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
978 size.cx=rect.right-rect.left;
979 size.cy=rect.bottom-rect.top;
980 MdiInfo[i]->MdiRadInfo->SelectingItem[0]=InsertDlgItem(
981 i,
982 i2,
983 -1,
984 &pos,
985 &size,
986 "CheckBox",
987 "Check",
988 WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,
989 0,
990 CT_CHECKBOX,
991 ActiveBasic::PM::ImageReferenceType::File,
992 0,
993 1
994 );
995 }
996 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_COMBOBOX){
997 //コンボ ボックス作成
998 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
999 RadInfo.DraggingRect[0].left-=42;
1000 RadInfo.DraggingRect[0].right=mouse.x+42;
1001 RadInfo.DraggingRect[0].top-=42;
1002 RadInfo.DraggingRect[0].bottom=mouse.y+42;
1003 }
1004 else{
1005 RadInfo.DraggingRect[0].right=mouse.x;
1006 RadInfo.DraggingRect[0].bottom=mouse.y;
1007 }
1008 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1009 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1010 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1011 size.cx=rect.right-rect.left;
1012 size.cy=rect.bottom-rect.top;
1013 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1014 i,
1015 i2,
1016 -1,
1017 &pos,
1018 &size,
1019 "ComboBox",
1020 "",
1021 WS_CHILD|WS_VISIBLE|CBS_DROPDOWN|CBS_SORT|WS_VSCROLL,
1022 0,
1023 CT_COMBOBOX,
1024 ActiveBasic::PM::ImageReferenceType::File,
1025 0,
1026 1
1027 );
1028 }
1029 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_EDIT){
1030 //エディット コントロール作成
1031 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1032 RadInfo.DraggingRect[0].left-=35;
1033 RadInfo.DraggingRect[0].right=mouse.x+35;
1034 RadInfo.DraggingRect[0].top-=10;
1035 RadInfo.DraggingRect[0].bottom=mouse.y+11;
1036 }
1037 else{
1038 RadInfo.DraggingRect[0].right=mouse.x;
1039 RadInfo.DraggingRect[0].bottom=mouse.y;
1040 }
1041 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1042 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1043 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1044 size.cx=rect.right-rect.left;
1045 size.cy=rect.bottom-rect.top;
1046 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1047 i,
1048 i2,
1049 -1,
1050 &pos,
1051 &size,
1052 "EditBox",
1053 "",
1054 WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,
1055 CT_EDIT,
1056 ActiveBasic::PM::ImageReferenceType::File,
1057 0,
1058 1
1059 );
1060 }
1061 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_GROUPBOX){
1062 //グループ ボックス作成
1063 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1064 RadInfo.DraggingRect[0].left-=42;
1065 RadInfo.DraggingRect[0].right=mouse.x+42;
1066 RadInfo.DraggingRect[0].top-=30;
1067 RadInfo.DraggingRect[0].bottom=mouse.y+30;
1068 }
1069 else{
1070 RadInfo.DraggingRect[0].right=mouse.x;
1071 RadInfo.DraggingRect[0].bottom=mouse.y;
1072 }
1073 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1074 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1075 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1076 size.cx=rect.right-rect.left;
1077 size.cy=rect.bottom-rect.top;
1078 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1079 i,
1080 i2,
1081 -1,
1082 &pos,
1083 &size,
1084 "GroupBox",
1085 "Group",
1086 WS_CHILD|WS_VISIBLE|BS_GROUPBOX,
1087 0,
1088 CT_GROUPBOX,
1089 ActiveBasic::PM::ImageReferenceType::File,
1090 0,
1091 1
1092 );
1093 }
1094 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_HSCROLLBAR){
1095 //水平スクロールバー作成
1096 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1097 RadInfo.DraggingRect[0].left-=35;
1098 RadInfo.DraggingRect[0].right=mouse.x+35;
1099 RadInfo.DraggingRect[0].top-=8;
1100 RadInfo.DraggingRect[0].bottom=mouse.y+9;
1101 }
1102 else{
1103 RadInfo.DraggingRect[0].right=mouse.x;
1104 RadInfo.DraggingRect[0].bottom=mouse.y;
1105 }
1106 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1107 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1108 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1109 size.cx=rect.right-rect.left;
1110 size.cy=rect.bottom-rect.top;
1111 MdiInfo[i]->MdiRadInfo->SelectingItem[0]=InsertDlgItem(
1112 i,
1113 i2,
1114 -1,
1115 &pos,
1116 &size,
1117 "HScrollBar",
1118 "",
1119 WS_CHILD|WS_VISIBLE|SBS_HORZ,
1120 0,
1121 CT_HSCROLLBAR,
1122 ActiveBasic::PM::ImageReferenceType::File,
1123 0,
1124 1
1125 );
1126 }
1127 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_IMAGEBOX){
1128 //イメージ ボックス作成
1129 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1130 RadInfo.DraggingRect[0].left-=16;
1131 RadInfo.DraggingRect[0].right=mouse.x+16;
1132 RadInfo.DraggingRect[0].top-=16;
1133 RadInfo.DraggingRect[0].bottom=mouse.y+16;
1134 }
1135 else{
1136 RadInfo.DraggingRect[0].right=mouse.x;
1137 RadInfo.DraggingRect[0].bottom=mouse.y;
1138 }
1139 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1140 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1141 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1142 size.cx=rect.right-rect.left;
1143 size.cy=rect.bottom-rect.top;
1144 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1145 i,
1146 i2,
1147 -1,
1148 &pos,
1149 &size,
1150 "ImageBox",
1151 "",
1152 WS_CHILD|WS_VISIBLE|SS_BLACKFRAME,0,CT_IMAGEBOX,
1153 ActiveBasic::PM::ImageReferenceType::File,
1154 0,
1155 1
1156 );
1157 }
1158 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_LISTBOX){
1159 //リスト ボックス作成
1160 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1161 RadInfo.DraggingRect[0].left-=42;
1162 RadInfo.DraggingRect[0].right=mouse.x+42;
1163 RadInfo.DraggingRect[0].top-=30;
1164 RadInfo.DraggingRect[0].bottom=mouse.y+30;
1165 }
1166 else{
1167 RadInfo.DraggingRect[0].right=mouse.x;
1168 RadInfo.DraggingRect[0].bottom=mouse.y;
1169 }
1170 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1171 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1172 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1173 size.cx=rect.right-rect.left;
1174 size.cy=rect.bottom-rect.top;
1175 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1176 i,
1177 i2,
1178 -1,
1179 &pos,
1180 &size,
1181 "ListBox",
1182 "",
1183 WS_CHILD|WS_VISIBLE|WS_VSCROLL|LBS_SORT|LBS_NOTIFY,WS_EX_CLIENTEDGE,
1184 CT_LISTBOX,
1185 ActiveBasic::PM::ImageReferenceType::File,
1186 0,
1187 1
1188 );
1189 }
1190 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_LISTVIEW){
1191 //リスト ビュー作成
1192 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1193 RadInfo.DraggingRect[0].left-=52;
1194 RadInfo.DraggingRect[0].right=mouse.x+53;
1195 RadInfo.DraggingRect[0].top-=37;
1196 RadInfo.DraggingRect[0].bottom=mouse.y+38;
1197 }
1198 else{
1199 RadInfo.DraggingRect[0].right=mouse.x;
1200 RadInfo.DraggingRect[0].bottom=mouse.y;
1201 }
1202 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1203 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1204 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1205 size.cx=rect.right-rect.left;
1206 size.cy=rect.bottom-rect.top;
1207 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1208 i,
1209 i2,
1210 -1,
1211 &pos,
1212 &size,
1213 "ListView",
1214 "",
1215 WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,
1216 CT_LISTVIEW,
1217 ActiveBasic::PM::ImageReferenceType::File,
1218 0,
1219 1
1220 );
1221 }
1222 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_PROGRESSBAR){
1223 //プロバレス バー作成
1224 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1225 RadInfo.DraggingRect[0].left-=70;
1226 RadInfo.DraggingRect[0].right=mouse.x+70;
1227 RadInfo.DraggingRect[0].top-=10;
1228 RadInfo.DraggingRect[0].bottom=mouse.y+11;
1229 }
1230 else{
1231 RadInfo.DraggingRect[0].right=mouse.x;
1232 RadInfo.DraggingRect[0].bottom=mouse.y;
1233 }
1234 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1235 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1236 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1237 size.cx=rect.right-rect.left;
1238 size.cy=rect.bottom-rect.top;
1239 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1240 i,
1241 i2,
1242 -1,
1243 &pos,
1244 &size,
1245 "ProgressBar",
1246 "",
1247 WS_CHILD|WS_VISIBLE,WS_EX_STATICEDGE,
1248 CT_PROGRESSBAR,
1249 ActiveBasic::PM::ImageReferenceType::File,
1250 0,
1251 1
1252 );
1253 }
1254 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_RADIOBUTTON){
1255 //ラジオ ボタン作成
1256 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1257 RadInfo.DraggingRect[0].left-=31;
1258 RadInfo.DraggingRect[0].right=mouse.x+32;
1259 RadInfo.DraggingRect[0].top-=7;
1260 RadInfo.DraggingRect[0].bottom=mouse.y+8;
1261 }
1262 else{
1263 RadInfo.DraggingRect[0].right=mouse.x;
1264 RadInfo.DraggingRect[0].bottom=mouse.y;
1265 }
1266 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1267 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1268 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1269 size.cx=rect.right-rect.left;
1270 size.cy=rect.bottom-rect.top;
1271 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1272 i,
1273 i2,
1274 -1,
1275 &pos,
1276 &size,
1277 "RadioButton",
1278 "radio",
1279 WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,
1280 0,
1281 CT_RADIOBUTTON,
1282 ActiveBasic::PM::ImageReferenceType::File,
1283 0,
1284 1
1285 );
1286 }
1287 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_STATIC){
1288 //スタティック コントロール作成
1289 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1290 RadInfo.DraggingRect[0].left-=25;
1291 RadInfo.DraggingRect[0].right=mouse.x+25;
1292 RadInfo.DraggingRect[0].top-=6;
1293 RadInfo.DraggingRect[0].bottom=mouse.y+6;
1294 }
1295 else{
1296 RadInfo.DraggingRect[0].right=mouse.x;
1297 RadInfo.DraggingRect[0].bottom=mouse.y;
1298 }
1299 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1300 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1301 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1302 size.cx=rect.right-rect.left;
1303 size.cy=rect.bottom-rect.top;
1304 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1305 i,
1306 i2,
1307 -1,
1308 &pos,
1309 &size,
1310 "Static",
1311 "Text",
1312 WS_CHILD|WS_VISIBLE,
1313 0,
1314 CT_STATIC,
1315 ActiveBasic::PM::ImageReferenceType::File,
1316 0,
1317 1
1318 );
1319 }
1320 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_TRACKBAR){
1321 //トラック バー作成
1322 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1323 RadInfo.DraggingRect[0].left-=87;
1324 RadInfo.DraggingRect[0].right=mouse.x+88;
1325 RadInfo.DraggingRect[0].top-=11;
1326 RadInfo.DraggingRect[0].bottom=mouse.y+12;
1327 }
1328 else{
1329 RadInfo.DraggingRect[0].right=mouse.x;
1330 RadInfo.DraggingRect[0].bottom=mouse.y;
1331 }
1332 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1333 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1334 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1335 size.cx=rect.right-rect.left;
1336 size.cy=rect.bottom-rect.top;
1337 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1338 i,
1339 i2,
1340 -1,
1341 &pos,
1342 &size,
1343 "TrackBar",
1344 "",
1345 WS_CHILD|WS_VISIBLE|TBS_BOTH|TBS_NOTICKS,
1346 0,
1347 CT_TRACKBAR,
1348 ActiveBasic::PM::ImageReferenceType::File,
1349 0,
1350 1
1351 );
1352 }
1353 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_TREEVIEW){
1354 //ツリー ビュー作成
1355 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1356 RadInfo.DraggingRect[0].left-=52;
1357 RadInfo.DraggingRect[0].right=mouse.x+53;
1358 RadInfo.DraggingRect[0].top-=37;
1359 RadInfo.DraggingRect[0].bottom=mouse.y+38;
1360 }
1361 else{
1362 RadInfo.DraggingRect[0].right=mouse.x;
1363 RadInfo.DraggingRect[0].bottom=mouse.y;
1364 }
1365 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1366 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1367 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1368 size.cx=rect.right-rect.left;
1369 size.cy=rect.bottom-rect.top;
1370 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1371 i,
1372 i2,
1373 -1,
1374 &pos,
1375 &size,
1376 "TreeView",
1377 "",
1378 WS_CHILD|WS_VISIBLE,
1379 WS_EX_CLIENTEDGE,
1380 CT_TREEVIEW,
1381 ActiveBasic::PM::ImageReferenceType::File,
1382 0,
1383 1
1384 );
1385 }
1386 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_UPDOWN){
1387 //アップ ダウン コントロール作成
1388 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1389 RadInfo.DraggingRect[0].left-=8;
1390 RadInfo.DraggingRect[0].right=mouse.x+8;
1391 RadInfo.DraggingRect[0].top-=10;
1392 RadInfo.DraggingRect[0].bottom=mouse.y+11;
1393 }
1394 else{
1395 RadInfo.DraggingRect[0].right=mouse.x;
1396 RadInfo.DraggingRect[0].bottom=mouse.y;
1397 }
1398 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1399 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1400 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1401 size.cx=rect.right-rect.left;
1402 size.cy=rect.bottom-rect.top;
1403 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1404 i,
1405 i2,
1406 -1,
1407 &pos,
1408 &size,
1409 "UpDown",
1410 "",
1411 WS_CHILD|WS_VISIBLE,
1412 0,
1413 CT_UPDOWN,
1414 ActiveBasic::PM::ImageReferenceType::File,
1415 0,
1416 1
1417 );
1418 }
1419 else if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_VSCROLLBAR){
1420 //垂直スクロールバー作成
1421 if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
1422 RadInfo.DraggingRect[0].left-=9;
1423 RadInfo.DraggingRect[0].right=mouse.x+9;
1424 RadInfo.DraggingRect[0].top-=30;
1425 RadInfo.DraggingRect[0].bottom=mouse.y+30;
1426 }
1427 else{
1428 RadInfo.DraggingRect[0].right=mouse.x;
1429 RadInfo.DraggingRect[0].bottom=mouse.y;
1430 }
1431 RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
1432 pos.x=rect.left-MdiInfo[i]->MdiRadInfo->ClientPos.x;
1433 pos.y=rect.top-MdiInfo[i]->MdiRadInfo->ClientPos.y;
1434 size.cx=rect.right-rect.left;
1435 size.cy=rect.bottom-rect.top;
1436 MdiInfo[i]->MdiRadInfo->SelectingItem[0] = InsertDlgItem(
1437 i,
1438 i2,
1439 -1,
1440 &pos,
1441 &size,
1442 "VScrollBar",
1443 "",
1444 WS_CHILD|WS_VISIBLE|SBS_VERT,
1445 0,
1446 CT_VSCROLLBAR,
1447 ActiveBasic::PM::ImageReferenceType::File,
1448 0,
1449 1
1450 );
1451 }
1452 SendMessage(GetWindow(MdiInfo[i]->MdiRadInfo->hTools,GW_CHILD),WM_COMMAND,IDC_TOOL_MOUSE,0);
1453 SendMessage(GetWindow(GetWindow(MdiInfo[i]->MdiRadInfo->hTools,GW_CHILD),GW_CHILD),TB_CHECKBUTTON,IDC_TOOL_MOUSE,TRUE);
1454 ChangePropertyWindow(i,i2);
1455
1456 //複数選択を解除
1457 MdiInfo[i]->MdiRadInfo->SelectingItem[1]=-1;
1458 }
1459
1460 RadInfo.NowDragging=0;
1461
1462 ResetState_EditMenu();
1463 return 0;
1464 }
1465 case WM_MOUSEMOVE:
1466 {
1467 mouse.x=GET_X_LPARAM(lParam);
1468 mouse.y=GET_Y_LPARAM(lParam);
1469 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
1470
1471 hParent=GetParent(hwnd);
1472 i=GetWndNum(hParent);
1473 i2 = GetWndInfoNum(MdiInfo[i]->path);
1474 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[i]->path);
1475
1476 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1477 if(wParam&MK_LBUTTON&&RadInfo.NowDragging){
1478 ////////////////////////////////////////////////
1479 // ドラッグ中の場合(コントロールのサイズ変更)
1480
1481 if(RadInfo.NowDragging==FRAME_UPPER_LEFT){
1482 if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
1483 RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
1484 else if(mouse.x+LEVER_THICK<MdiInfo[i]->MdiRadInfo->ClientPos.x)
1485 RadInfo.DraggingRect[0].left=MdiInfo[i]->MdiRadInfo->ClientPos.x;
1486 else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
1487
1488 if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK))
1489 RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
1490 else if(mouse.y+LEVER_THICK<MdiInfo[i]->MdiRadInfo->ClientPos.y)
1491 RadInfo.DraggingRect[0].top=MdiInfo[i]->MdiRadInfo->ClientPos.y;
1492 else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
1493 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1494 }
1495 else if(RadInfo.NowDragging==FRAME_UPPER_RIGHT){
1496 if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
1497 RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
1498 else if(mouse.x>MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx)
1499 RadInfo.DraggingRect[0].right=MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx;
1500 else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
1501
1502 if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK)) RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
1503 else if(mouse.y+LEVER_THICK<MdiInfo[i]->MdiRadInfo->ClientPos.y)
1504 RadInfo.DraggingRect[0].top=MdiInfo[i]->MdiRadInfo->ClientPos.y;
1505 else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
1506 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1507 }
1508 else if(RadInfo.NowDragging==FRAME_LOWER_LEFT){
1509 if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
1510 RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
1511 else if(mouse.x+LEVER_THICK<MdiInfo[i]->MdiRadInfo->ClientPos.x)
1512 RadInfo.DraggingRect[0].left=MdiInfo[i]->MdiRadInfo->ClientPos.x;
1513 else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
1514
1515 if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
1516 RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
1517 else if(mouse.y>MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy)
1518 RadInfo.DraggingRect[0].bottom=MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy;
1519 else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
1520 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1521 }
1522 else if(RadInfo.NowDragging==FRAME_LOWER_RIGHT){
1523 if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
1524 RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
1525 else if((mouse.x>MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx)&&MdiInfo[i]->MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1526 RadInfo.DraggingRect[0].right=MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx;
1527 else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
1528
1529 if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
1530 RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
1531 else if((mouse.y>MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy)&&MdiInfo[i]->MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1532 RadInfo.DraggingRect[0].bottom=MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy;
1533 else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
1534 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1535 }
1536 else if(RadInfo.NowDragging==FRAME_LEFT){
1537 if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
1538 RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
1539 else if(mouse.x+LEVER_THICK<MdiInfo[i]->MdiRadInfo->ClientPos.x)
1540 RadInfo.DraggingRect[0].left=MdiInfo[i]->MdiRadInfo->ClientPos.x;
1541 else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
1542 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1543 }
1544 else if(RadInfo.NowDragging==FRAME_RIGHT){
1545 if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
1546 RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
1547 else if((mouse.x>MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx)&&MdiInfo[i]->MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1548 RadInfo.DraggingRect[0].right=MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx;
1549 else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
1550 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1551 }
1552 else if(RadInfo.NowDragging==FRAME_UPPER){
1553 if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK))
1554 RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
1555 else if(mouse.y+LEVER_THICK<MdiInfo[i]->MdiRadInfo->ClientPos.y)
1556 RadInfo.DraggingRect[0].top=MdiInfo[i]->MdiRadInfo->ClientPos.y;
1557 else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
1558 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1559 }
1560 else if(RadInfo.NowDragging==FRAME_LOWER){
1561 if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
1562 RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
1563 else if((mouse.y>MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy)&&MdiInfo[i]->MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
1564 RadInfo.DraggingRect[0].bottom=MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy;
1565 else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
1566 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1567 }
1568 else if(RadInfo.NowDragging==FRAME_INSIDE){
1569 i3=0;
1570 while(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]!=-1){
1571 i4=RadInfo.DragStartRect[i3].left+mouse.x-RadInfo.DragStartPos.x;
1572
1573 if(i4>MdiInfo[i]->MdiRadInfo->ClientPos.x){
1574 i4=RadInfo.DragStartRect[i3].right+mouse.x-RadInfo.DragStartPos.x;
1575 if(i4<MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx) i4=0;
1576 else i4-=MdiInfo[i]->MdiRadInfo->ClientPos.x+MdiInfo[i]->MdiRadInfo->ClientSize.cx;
1577 }
1578 else i4-=MdiInfo[i]->MdiRadInfo->ClientPos.x;
1579 //i4は枠外に出たときのポインタと壁にあたったコントロールとの差
1580 RadInfo.DraggingRect[i3].left=RadInfo.DragStartRect[i3].left+mouse.x-RadInfo.DragStartPos.x-i4;
1581 RadInfo.DraggingRect[i3].right=RadInfo.DragStartRect[i3].right+mouse.x-RadInfo.DragStartPos.x-i4;
1582
1583 i4=RadInfo.DragStartRect[i3].top+mouse.y-RadInfo.DragStartPos.y;
1584 if(i4>MdiInfo[i]->MdiRadInfo->ClientPos.y){
1585 i4=RadInfo.DragStartRect[i3].bottom+mouse.y-RadInfo.DragStartPos.y;
1586 if(i4<MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy) i4=0;
1587 else i4-=MdiInfo[i]->MdiRadInfo->ClientPos.y+MdiInfo[i]->MdiRadInfo->ClientSize.cy;
1588 }
1589 else i4-=MdiInfo[i]->MdiRadInfo->ClientPos.y;
1590 RadInfo.DraggingRect[i3].top=RadInfo.DragStartRect[i3].top+mouse.y-RadInfo.DragStartPos.y-i4;
1591 RadInfo.DraggingRect[i3].bottom=RadInfo.DragStartRect[i3].bottom+mouse.y-RadInfo.DragStartPos.y-i4;
1592
1593 if(MdiInfo[i]->MdiRadInfo->SelectingItem[1]==-1) i4=1;
1594 else i4=0;
1595 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[i3],&RadInfo.OldDraggingRect[i3],i4);
1596 i3++;
1597 }
1598 }
1599 else if(RadInfo.NowDragging==SELECTING_FRAME){
1600 RadInfo.DraggingRect[0].left=RadInfo.DragStartPos.x;
1601 RadInfo.DraggingRect[0].top=RadInfo.DragStartPos.y;
1602 RadInfo.DraggingRect[0].right=mouse.x;
1603 RadInfo.DraggingRect[0].bottom=mouse.y;
1604 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1605 }
1606 SetCursorByState(RadInfo.NowDragging);
1607
1608 SetStatusText(NULL);
1609
1610 //サポートダイアログの内容をセット
1611 SetSupportDlgData( i, *pWindowInfo );
1612 }
1613 else{
1614 //ドラッグ中でないとき
1615 SetCursorByState(GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y));
1616 }
1617 }
1618 else{
1619 //アイテム(子ウィンドウ作成中)
1620 if(wParam&MK_LBUTTON&&RadInfo.NowDragging==ITEM_MAKING){
1621 //ドラッグ中の場合
1622
1623 RadInfo.DraggingRect[0].right=mouse.x;
1624 RadInfo.DraggingRect[0].bottom=mouse.y;
1625 DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
1626 }
1627 }
1628 return 0;
1629 }
1630 case WM_LBUTTONDBLCLK:
1631 {
1632 mouse.x=GET_X_LPARAM(lParam);
1633 mouse.y=GET_Y_LPARAM(lParam);
1634 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
1635
1636 hParent=GetParent(hwnd);
1637 i=GetWndNum(hParent);
1638 i2=GetWndInfoNum(MdiInfo[i]->path);
1639 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[i]->path);
1640 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1641 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
1642 temp2[0]=0;
1643 if(pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_BUTTON||
1644 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_CHECKBOX||
1645 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_IMAGEBOX||
1646 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_RADIOBUTTON||
1647 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_STATIC)
1648 {
1649 sprintf(temporary,"%s_%s_Click",
1650 pWindowInfo->GetName().c_str(),
1651 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->GetName().c_str()
1652 );
1653 }
1654 else if(pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_COMBOBOX)
1655 {
1656 sprintf(temporary,"%s_%s_EditChange",
1657 pWindowInfo->GetName().c_str(),
1658 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->GetName().c_str());
1659 }
1660 else if(pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_EDIT)
1661 {
1662 sprintf(temporary,"%s_%s_Change",
1663 pWindowInfo->GetName().c_str(),
1664 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->GetName().c_str());
1665 }
1666 else if(pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->Control==CT_LISTBOX)
1667 {
1668 sprintf(temporary,"%s_%s_SelChange",
1669 pWindowInfo->GetName().c_str(),
1670 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->GetName().c_str());
1671 }
1672 else temporary[0]=0;
1673 if(temporary[0]) SelectProcedureOfMessageCall(i2,temporary,temp2);
1674 }
1675 }
1676 return 0;
1677 }
1678 case WM_KEYDOWN:
1679 {
1680 hParent=GetParent(hwnd);
1681 i=GetWndNum(hParent);
1682 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[i]->path);
1683 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1684 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
1685 PointAndSize.pos=pWindowInfo->pos;
1686 PointAndSize.size=pWindowInfo->size;
1687 if(GetKeyState(VK_SHIFT)&0x8000){
1688 if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP)
1689 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1690
1691 if(wParam==VK_RIGHT)
1692 pWindowInfo->size.cx++;
1693 else if(wParam==VK_LEFT)
1694 pWindowInfo->size.cx--;
1695 else if(wParam==VK_DOWN)
1696 pWindowInfo->size.cy++;
1697 else if(wParam==VK_UP)
1698 pWindowInfo->size.cy--;
1699
1700 if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP){
1701 DrawRadWindow(i,pWindowInfo);
1702
1703 SetStatusText(NULL);
1704
1705 //サポートダイアログの内容をセット
1706 SetSupportDlgData( i, *pWindowInfo );
1707 }
1708 }
1709 }
1710 else{
1711 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->pos;
1712 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->size;
1713 if(wParam==VK_RIGHT){
1714 if(GetKeyState(VK_SHIFT)&0x8000){
1715 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1716 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->size.cx++;
1717 }
1718 else{
1719 for(i3=0;;i3++){
1720 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
1721 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos;
1722 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size;
1723 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1724
1725 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.x++;
1726 }
1727 }
1728 DrawRadWindow(i,pWindowInfo);
1729 SetStatusText(NULL);
1730
1731 //サポートダイアログの内容をセット
1732 SetSupportDlgData( i, *pWindowInfo );
1733 }
1734 else if(wParam==VK_LEFT){
1735 if(GetKeyState(VK_SHIFT)&0x8000){
1736 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1737 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->size.cx--;
1738 }
1739 else{
1740 for(i3=0;;i3++){
1741 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
1742 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos;
1743 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size;
1744 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1745
1746 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.x--;
1747 }
1748 }
1749 DrawRadWindow(i,pWindowInfo);
1750 SetStatusText(NULL);
1751
1752 //サポートダイアログの内容をセット
1753 SetSupportDlgData( i, *pWindowInfo );
1754 }
1755 else if(wParam==VK_UP){
1756 if(GetKeyState(VK_SHIFT)&0x8000){
1757 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1758 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->size.cy--;
1759 }
1760 else{
1761 for(i3=0;;i3++){
1762 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
1763 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos;
1764 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size;
1765 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1766
1767 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.y--;
1768 }
1769 }
1770 DrawRadWindow(i,pWindowInfo);
1771 SetStatusText(NULL);
1772
1773 //サポートダイアログの内容をセット
1774 SetSupportDlgData( i, *pWindowInfo );
1775 }
1776 else if(wParam==VK_DOWN){
1777 if(GetKeyState(VK_SHIFT)&0x8000){
1778 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
1779 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[0]]->size.cy++;
1780 }
1781 else{
1782 for(i3=0;;i3++){
1783 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
1784 PointAndSize.pos=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos;
1785 PointAndSize.size=pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->size;
1786 Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i]->MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
1787
1788 pWindowInfo->childWindowInfos[MdiInfo[i]->MdiRadInfo->SelectingItem[i3]]->pos.y++;
1789 }
1790 }
1791 DrawRadWindow(i,pWindowInfo);
1792 SetStatusText(NULL);
1793
1794 //サポートダイアログの内容をセット
1795 SetSupportDlgData( i, *pWindowInfo );
1796 }
1797 else if(wParam==VK_DELETE)
1798 SendMessage(hwnd,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1799 }
1800 }
1801 return 0;
1802 }
1803 case WM_SETFOCUS:
1804 i=GetWndNum(GetParent(hwnd));
1805 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==NON_TOOL)
1806 MdiInfo[i]->MdiRadInfo->ButtonSelect=IDC_TOOL_MOUSE;
1807 InvalidateRect(hwnd,NULL,0);
1808 return 0;
1809 case WM_KILLFOCUS:
1810 i=GetWndNum(GetParent(hwnd));
1811 if(i==-1) return 0; //ウィンドウが破棄された場合
1812 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE)
1813 MdiInfo[i]->MdiRadInfo->ButtonSelect=NON_TOOL;
1814 InvalidateRect(hwnd,NULL,0);
1815 return 0;
1816 case WM_PAINT:
1817 {
1818 WTL::CPaintDC dc(hwnd);
1819 SendMessage(hwnd, WM_PRINTCLIENT, reinterpret_cast<WPARAM>(dc.m_hDC), 0);
1820 return 0;
1821 }
1822 case WM_PRINTCLIENT:
1823 i=GetWndNum(GetParent(hwnd));
1824 if(i==-1) break; //ウィンドウが初期状態の場合
1825 i2=GetWndInfoNum(MdiInfo[i]->path);
1826
1827 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1828 ScrollInfo.fMask=SIF_RANGE|SIF_POS;
1829 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
1830 si2.cbSize=sizeof(SCROLLINFO);
1831 si2.fMask=SIF_RANGE|SIF_POS;
1832 GetScrollInfo(hwnd,SB_HORZ,&si2);
1833
1834 hdc=reinterpret_cast<HDC>(wParam);
1835 BitBlt(hdc,0,0,ScreenX*2,ScreenY*2,
1836 MdiInfo[i]->MdiRadInfo->hMemDC,si2.nPos,ScrollInfo.nPos,SRCCOPY);
1837
1838 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE||MdiInfo[i]->MdiRadInfo->ButtonSelect==NON_TOOL)
1839 DrawSelectingRect(hwnd,i,i2,MdiInfo[i]->MdiRadInfo->ButtonSelect);
1840 return 0;
1841 case WM_CONTEXTMENU:
1842 if(RadInfo.NowDragging) return 0;
1843
1844 hParent=GetParent(hwnd);
1845 BringWindowToTop(hParent);
1846 SetFocus(hwnd);
1847 i=GetWndNum(hParent);
1848 i2=GetWndInfoNum(MdiInfo[i]->path);
1849
1850 if(MdiInfo[i]->MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
1851 mouse.x=GET_X_LPARAM(lParam);
1852 mouse.y=GET_Y_LPARAM(lParam);
1853 ScreenToClient(hwnd,&mouse);
1854 CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
1855 SelectItemNumOnMouse(i,i2,mouse.x,mouse.y);
1856 InvalidateRect(hwnd,NULL,0);
1857 extern HMENU hRadMenuBase;
1858 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
1859 TrackPopupMenu(GetSubMenu(hRadMenuBase,0),TPM_LEFTALIGN,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam),0,hwnd,0);
1860 else TrackPopupMenu(GetSubMenu(hRadMenuBase,1),TPM_LEFTALIGN,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam),0,hwnd,0);
1861 }
1862 return 0;
1863 case WM_COMMAND:
1864 switch(LOWORD(wParam)){
1865 case IDM_RAD_WINDOW_EVENTCODE:
1866 i=GetWndNum(GetParent(hwnd));
1867 ActiveBasic::Resource::DialogBoxAlt(hResInst, IDD_RAD_EVENTCODE, hwnd, DlgEventCode, 0);
1868 break;
1869 case IDM_RAD_WINDOW_MENUEVENTCODE:
1870 i=GetWndNum(GetParent(hwnd));
1871 ActiveBasic::Resource::DialogBoxAlt(hResInst, IDD_RAD_EVENTCODE, hwnd, DlgEventCode, 1);
1872 break;
1873 case IDM_RAD_ITEM_DELETE:
1874 hParent=GetParent(hwnd);
1875 i=GetWndNum(hParent);
1876 i2=GetWndInfoNum(MdiInfo[i]->path);
1877
1878 //削除順序を考慮しなければならないので、バブルソートを行う
1879 int i5,i6;
1880 for(i5=0;;i5++){
1881 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i5]==-1) break;
1882 }
1883 for(i3=0;i3<i5-1;i3++){
1884 for(i4=i5-1;i4>i3;i4--){
1885 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i4] >
1886 MdiInfo[i]->MdiRadInfo->SelectingItem[i4-1]){
1887 i6=MdiInfo[i]->MdiRadInfo->SelectingItem[i4];
1888 MdiInfo[i]->MdiRadInfo->SelectingItem[i4]=
1889 MdiInfo[i]->MdiRadInfo->SelectingItem[i4-1];
1890 MdiInfo[i]->MdiRadInfo->SelectingItem[i4-1]=i6;
1891 }
1892 }
1893 }
1894
1895
1896 for(i3=0;;i3++){
1897 if(MdiInfo[i]->MdiRadInfo->SelectingItem[i3]==-1) break;
1898 DeleteDlgItem(i,i2,MdiInfo[i]->MdiRadInfo->SelectingItem[i3],1);
1899 }
1900 for(i3=0;i3<MAX_RAD_SELITEM;i3++) MdiInfo[i]->MdiRadInfo->SelectingItem[i3]=-1;
1901
1902 ResetState_EditMenu();
1903 break;
1904 }
1905 return 0;
1906 case WM_VSCROLL:
1907 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1908 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
1909 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
1910 if(LOWORD(wParam)==SB_LINEUP) i=-20;
1911 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
1912 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
1913 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
1914 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
1915 else i=0;
1916 GetClientRect(hwnd,&rect);
1917 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
1918 if(i!=0){
1919 ScrollInfo.nPos+=i;
1920 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
1921 ScrollWindow(hwnd,0,-i,NULL,NULL);
1922 UpdateWindow(hwnd);
1923 }
1924 return 0;
1925 case WM_HSCROLL:
1926 ScrollInfo.cbSize=sizeof(SCROLLINFO);
1927 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
1928 GetScrollInfo(hwnd,SB_HORZ,&ScrollInfo);
1929 if(LOWORD(wParam)==SB_LINEUP) i=-20;
1930 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
1931 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
1932 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
1933 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
1934 else i=0;
1935 GetClientRect(hwnd,&rect);
1936 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.right-ScrollInfo.nPos));
1937 if(i!=0){
1938 ScrollInfo.nPos+=i;
1939 SetScrollInfo(hwnd,SB_HORZ,&ScrollInfo,1);
1940 ScrollWindow(hwnd,-i,0,NULL,NULL);
1941 UpdateWindow(hwnd);
1942 }
1943 return 0;
1944 case WM_SIZE:
1945 i=GetWndNum(GetParent(hwnd));
1946 if(i==-1) break; //ウィンドウが初期状態の場合
1947 ResetScrollbarOfRadEditor(i,LOWORD(lParam),HIWORD(lParam));
1948 return 0;
1949 }
1950 return DefWindowProc(hwnd,message,wParam,lParam);
1951}
1952void ResizeToRadToolWindows(int WndNum,int weight,int height){
1953 int i,i2;
1954 RECT rect;
1955
1956 if(height<200){
1957 i=100;
1958 i2=100;
1959 }
1960 else{
1961 //ツールボタンウィンドウ(長さ、i)
1962 GetClientRect(GetWindow(MdiInfo[WndNum]->MdiRadInfo->hTools,GW_CHILD),&rect);
1963 if(height>rect.bottom+1) i=rect.bottom+1;
1964 else i=height;
1965
1966 //プロパティウィンドウ(長さ、i2)
1967 GetClientRect(GetWindow(MdiInfo[WndNum]->MdiRadInfo->hProperty,GW_CHILD),&rect);
1968 i2=height-i;
1969
1970 if(i2<100){
1971 i=height-100;
1972 i2=100;
1973 }
1974 }
1975 MoveWindow(MdiInfo[WndNum]->MdiRadInfo->hTools,weight-172,0,172,i,1);
1976 MoveWindow(MdiInfo[WndNum]->MdiRadInfo->hProperty,weight-172,i,172,i2,1);
1977
1978 GetWindowRect(MdiInfo[WndNum]->MdiRadInfo->hSupport,&rect);
1979 rect.right-=rect.left;
1980 rect.bottom-=rect.top;
1981
1982 //RADウィンドウ
1983 MoveWindow(MdiInfo[WndNum]->MdiRadInfo->hRad,0,0,weight-172,height-rect.bottom,1);
1984
1985 //サポートウィンドウ
1986 MoveWindow(MdiInfo[WndNum]->MdiRadInfo->hSupport,0,height-rect.bottom,weight-172,rect.bottom,1);
1987}
1988LRESULT CALLBACK MDIClientWindow_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1989 extern HWND hDocCombo;
1990 int i,WndNum;
1991
1992 switch(message){
1993 case WM_CREATE:
1994 extern HICON hWindowDocumentIcon;
1995 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hWindowDocumentIcon);
1996 break;
1997 case WM_MDIACTIVATE:
1998 if(!lParam) return 0;
1999 i=GetWndNum((HWND)lParam);
2000 if(i==-1) return 0; //ウィンドウが初期状態の場合
2001
2002 i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LPARAM)MdiInfo[i]->title.c_str());
2003 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
2004 SetStatusText(NULL);
2005 ResetState_EditMenu();
2006 return 0;
2007 case WM_SIZE:
2008 WndNum=GetWndNum(hwnd);
2009 if(WndNum==-1) break;
2010 ResizeToRadToolWindows(WndNum,LOWORD(lParam),HIWORD(lParam));
2011 break;
2012 case WM_CLOSE:
2013 CloseDocWindow(GetWndNum(hwnd));
2014 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
2015 i=DefMDIChildProc(hwnd,message,wParam,lParam);
2016
2017 //メニュー状態を設定
2018 ResetState_DocMenu();
2019
2020 return i;
2021 }
2022 return DefMDIChildProc(hwnd,message,wParam,lParam);
2023}
Note: See TracBrowser for help on using the repository browser.