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

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

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

File size: 11.7 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5#if defined(JPN)
6//日本語
7#include "rad_msg_jpn.h"
8#else
9//英語
10#include "rad_msg_eng.h"
11#endif
12
13int bSupportDlg_NoChange;
14
15LRESULT CALLBACK TestWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
16    switch(message){
17        case WM_CREATE:
18            SetPosCenter(hwnd);
19            break;
20        case WM_KEYDOWN:
21            if(wParam==VK_ESCAPE) DestroyWindow(hwnd);
22            break;
23        case WM_PAINT:
24            break;
25        case WM_CLOSE:
26            DestroyWindow(hwnd);
27            break;
28        case WM_DESTROY:
29            PostQuitMessage(0);
30            break;
31    }
32    return DefWindowProc(hwnd,message,wParam,lParam);
33}
34
35void ShowTestWindow(int WndInfoNum){
36    extern HINSTANCE hInst;
37    extern HANDLE hHeap;
38    extern PROJECTINFO ProjectInfo;
39    static HWND hWnd;
40    HWND hChild;
41    HFONT *lphFont;
42    HANDLE *lphImage;
43    int i2,i3;
44    char temporary[MAX_PATH];
45
46    if(hWnd){
47        OpenIcon(hWnd);
48
49        _endthread();
50        return;
51    }
52
53    WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
54
55    if(pWindowInfo->style&WS_CHILD){
56        //"チャイルドウィンドウをテスト表示することはできません"
57        MessageBox(hOwner,STRING_RAD_ERROR_CANT_CHILDTEST,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
58
59        _endthread();
60        return;
61    }
62
63    lphFont=(HFONT *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->NumberOfChildWindows*sizeof(DWORD));
64    lphImage=(HANDLE *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->NumberOfChildWindows*sizeof(DWORD));
65
66    //テスト用のメインウィンドウを作成
67    hWnd=CreateWindowEx(pWindowInfo->ExStyle,
68        "TestWindow",
69        pWindowInfo->name,
70        pWindowInfo->style|WS_VISIBLE,
71        CW_USEDEFAULT,CW_USEDEFAULT,
72        pWindowInfo->size.cx,pWindowInfo->size.cy,
73        hOwner,NULL,hInst,NULL);
74
75    //子ウィンドウ作成
76    for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
77        if(pWindowInfo->pChildInfo[i2].Control==CT_UPDOWN){
78            CreateUpDownControl(
79                pWindowInfo->pChildInfo[i2].style,
80                pWindowInfo->pChildInfo[i2].pos.x,pWindowInfo->pChildInfo[i2].pos.y,
81                pWindowInfo->pChildInfo[i2].size.cx,pWindowInfo->pChildInfo[i2].size.cy,
82                hWnd,0,hInst,
83                0,0,100,0);
84        }
85        else{
86            GetItemClassName(temporary,pWindowInfo->pChildInfo[i2].Control);
87            hChild=CreateWindowEx(
88                pWindowInfo->pChildInfo[i2].ExStyle,
89                temporary,
90                pWindowInfo->pChildInfo[i2].caption,
91                pWindowInfo->pChildInfo[i2].style,
92                pWindowInfo->pChildInfo[i2].pos.x,
93                pWindowInfo->pChildInfo[i2].pos.y,
94                pWindowInfo->pChildInfo[i2].size.cx,
95                pWindowInfo->pChildInfo[i2].size.cy,
96                hWnd,0,hInst,0);
97
98            lphFont[i2]=CreateFontIndirect(&pWindowInfo->LogFont);
99            SendMessage(hChild,WM_SETFONT,(long)lphFont[i2],0);
100
101            if(pWindowInfo->pChildInfo[i2].Control==CT_IMAGEBOX){
102                ///////////////////////////
103                // イメージ ボックスの場合
104                ///////////////////////////
105                if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON){
106                    if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE)
107                        lstrcpy(temporary,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
108                    else{
109                        for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
110                            if(lstrcmp(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,
111                                ProjectInfo.res.pIconResInfo[i3].IdName)==0) break;
112                        }
113                        if(i3==ProjectInfo.res.NumberOfIconRes) temporary[0]=0;
114                        else lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i3].path);
115                    }
116                    if(temporary[0]){
117                        GetFullPath(temporary,ProjectInfo.dir);
118                        lphImage[i2]=LoadImage(hInst,temporary,IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
119
120                        SendMessage(hChild,STM_SETICON,(long)lphImage[i2],0);
121                    }
122                }
123                else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP){
124                    if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE)
125                        lstrcpy(temporary,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
126                    else{
127                        for(i3=0;i3<ProjectInfo.res.NumberOfBitmapRes;i3++){
128                            if(lstrcmp(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,
129                                ProjectInfo.res.pBitmapResInfo[i3].IdName)==0) break;
130                        }
131                        if(i3==ProjectInfo.res.NumberOfBitmapRes) temporary[0]=0;
132                        else lstrcpy(temporary,ProjectInfo.res.pBitmapResInfo[i3].path);
133                    }
134                    if(temporary[0]){
135                        GetFullPath(temporary,ProjectInfo.dir);
136                        lphImage[i2]=LoadImage(hInst,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
137
138                        SendMessage(hChild,STM_SETIMAGE,IMAGE_BITMAP,(long)lphImage[i2]);
139                    }
140                }
141            }
142        }
143    }
144
145    MSG msg;
146    while(GetMessage(&msg,NULL,0,0)){
147        if(IsDialogMessage(hWnd,&msg)) continue;
148        TranslateMessage(&msg);
149        DispatchMessage(&msg);
150    }
151
152    //フォントハンドルを破棄
153    for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
154        if(lphFont[i2]) DeleteObject(lphFont[i2]);
155    }
156    HeapDefaultFree(lphFont);
157
158    //イメージハンドルを破棄
159    for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
160        if(lphImage[i2]){
161            if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON)
162                DestroyIcon((HICON)lphImage[i2]);
163            else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP)
164                DeleteObject(lphImage[i2]);
165        }
166    }
167    HeapDefaultFree(lphImage);
168
169    hWnd=0;
170
171    _endthread();
172}
173
174void SetSupportDlgData(int WndNum,int WndInfoNum){
175    ////////////////////////////////////
176    // サポートダイアログの内容をセット
177    ////////////////////////////////////
178    extern PROJECTINFO ProjectInfo;
179    extern MDIINFO MdiInfo[MAX_WNDNUM];
180    extern RADINFO RadInfo;
181    char temporary[255];
182    HWND hSupport;
183
184    bSupportDlg_NoChange=1;
185
186    hSupport=MdiInfo[WndNum].MdiRadInfo->hSupport;
187
188    WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
189
190    if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END&&
191        (!(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=-1&&MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1))){
192        sprintf(temporary,"%d",RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x);
193        SetDlgItemText(hSupport,IDC_XPOS,temporary);
194
195        sprintf(temporary,"%d",RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
196        SetDlgItemText(hSupport,IDC_YPOS,temporary);
197
198        sprintf(temporary,"%d",RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left);
199        SetDlgItemText(hSupport,IDC_WIDTH,temporary);
200
201        sprintf(temporary,"%d",RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
202        SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
203    }
204    else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
205        EnableWindow(GetDlgItem(hSupport,IDC_XPOS),0);
206        EnableWindow(GetDlgItem(hSupport,IDC_YPOS),0);
207        EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
208        EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
209        EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
210        EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
211
212        SetDlgItemText(hSupport,IDC_XPOS,"");
213        SetDlgItemText(hSupport,IDC_YPOS,"");
214
215        sprintf(temporary,"%d",pWindowInfo->size.cx);
216        SetDlgItemText(hSupport,IDC_WIDTH,temporary);
217
218        sprintf(temporary,"%d",pWindowInfo->size.cy);
219        SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
220    }
221    else{
222        EnableWindow(GetDlgItem(hSupport,IDC_XPOS),1);
223        EnableWindow(GetDlgItem(hSupport,IDC_YPOS),1);
224
225        if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1){
226            EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
227            EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
228            EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),0);
229            EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),0);
230
231            SetDlgItemText(hSupport,IDC_XPOS,"");
232            SetDlgItemText(hSupport,IDC_YPOS,"");
233            SetDlgItemText(hSupport,IDC_WIDTH,"");
234            SetDlgItemText(hSupport,IDC_HEIGHT,"");
235        }
236        else{
237            EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),1);
238            EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),1);
239            EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
240            EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
241
242            sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x);
243            SetDlgItemText(hSupport,IDC_XPOS,temporary);
244
245            sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y);
246            SetDlgItemText(hSupport,IDC_YPOS,temporary);
247
248            sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx);
249            SetDlgItemText(hSupport,IDC_WIDTH,temporary);
250
251            sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cy);
252            SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
253        }
254    }
255
256    bSupportDlg_NoChange=0;
257}
258
259BOOL CALLBACK DlgRadSupport(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
260    extern PROJECTINFO ProjectInfo;
261    extern MDIINFO MdiInfo[MAX_WNDNUM];
262    static BOOL bTimer;
263    int i,i3;
264    char temporary[255];
265    POINTANDSIZE PointAndSize;
266    RECT rect;
267
268    switch(message){
269        case WM_INITDIALOG:
270            SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_XPOS),0);
271            SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_YPOS),0);
272            SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_WIDTH),0);
273            SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_HEIGHT),0);
274
275            SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETRANGE32,0,0x7FFF);
276            SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETRANGE32,0,0x7FFF);
277            SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETRANGE32,0,0x7FFF);
278            SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETRANGE32,0,0x7FFF);
279            return 0;
280        case WM_COMMAND:
281            switch(LOWORD(wParam)){
282                case IDC_TEST:
283                    _beginthread(
284                        (void (__cdecl *)(void *))ShowTestWindow,
285                        0,
286                        (void *)GetWndInfoNum(MdiInfo[GetWndNum(GetParent(hwnd))].path));
287                    return 1;
288                case IDC_XPOS:
289                case IDC_YPOS:
290                case IDC_WIDTH:
291                case IDC_HEIGHT:
292                    if(HIWORD(wParam)==EN_UPDATE){
293                        if(bSupportDlg_NoChange) return 1;
294
295                        if(bTimer) KillTimer(hwnd,0);
296
297                        bTimer=1;
298                        SetTimer(hwnd,0,650,NULL);
299                    }
300                    return 1;
301            }
302            break;
303        case WM_TIMER:
304            KillTimer(hwnd,0);
305            bTimer=0;
306
307            i=GetWndNum(GetParent(hwnd));
308            WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[i].path);
309
310            for(i3=0;;i3++){
311                if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
312                PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
313                PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
314                Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
315            }
316
317            GetDlgItemText(hwnd,IDC_XPOS,temporary,255);
318            if(temporary[0]){
319                for(i3=0;;i3++){
320                    if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
321                    pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x=atol(temporary);
322                }
323            }
324
325            GetDlgItemText(hwnd,IDC_YPOS,temporary,255);
326            if(temporary[0]){
327                for(i3=0;;i3++){
328                    if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
329                    pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y=atol(temporary);
330                }
331            }
332
333            GetDlgItemText(hwnd,IDC_WIDTH,temporary,255);
334            if(temporary[0]){
335                if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
336                    pWindowInfo->size.cx=atol(temporary);
337                else{
338                    for(i3=0;;i3++){
339                        if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
340                        pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx=atol(temporary);
341                    }
342                }
343            }
344
345            GetDlgItemText(hwnd,IDC_HEIGHT,temporary,255);
346            if(temporary[0]){
347                if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
348                    pWindowInfo->size.cy=atol(temporary);
349                else{
350                    for(i3=0;;i3++){
351                        if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
352                        pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy=atol(temporary);
353                    }
354                }
355            }
356
357            //描画
358            DrawRadWindow(i,pWindowInfo);
359
360            //スクロールバーをリセット
361            GetClientRect(MdiInfo[i].MdiRadInfo->hRad,&rect);
362            ResetScrollbarOfRadEditor(i,rect.right,rect.bottom);
363
364            return 1;
365    }
366    return 0;
367}
Note: See TracBrowser for help on using the repository browser.