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

Last change on this file since 609 was 609, checked in by dai_9181, 15 years ago

ProjectInfo構造体のpWindowInfoメンバをwindowInfosメンバに置き換えた。

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