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

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

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

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