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

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

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

File size: 11.7 KB
RevLine 
[475]1#include "stdafx.h"
2
[3]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
[609]53 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
[3]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
[609]188 WINDOW_INFO *pWindowInfo = &ProjectInfo.windowInfos[WndInfoNum];
189
[3]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
[609]215 sprintf(temporary,"%d",pWindowInfo->size.cx);
[3]216 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
217
[609]218 sprintf(temporary,"%d",pWindowInfo->size.cy);
[3]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
[609]242 sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x);
[3]243 SetDlgItemText(hSupport,IDC_XPOS,temporary);
244
[609]245 sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y);
[3]246 SetDlgItemText(hSupport,IDC_YPOS,temporary);
247
[609]248 sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx);
[3]249 SetDlgItemText(hSupport,IDC_WIDTH,temporary);
250
[609]251 sprintf(temporary,"%d",pWindowInfo->pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cy);
[3]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;
[609]263 int i,i3;
[3]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));
[609]308 WINDOW_INFO *pWindowInfo = GetWndInfo(MdiInfo[i].path);
[3]309
310 for(i3=0;;i3++){
311 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
[609]312 PointAndSize.pos=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
313 PointAndSize.size=pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
[3]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;
[609]321 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x=atol(temporary);
[3]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;
[609]329 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y=atol(temporary);
[3]330 }
331 }
332
333 GetDlgItemText(hwnd,IDC_WIDTH,temporary,255);
334 if(temporary[0]){
335 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
[609]336 pWindowInfo->size.cx=atol(temporary);
[3]337 else{
338 for(i3=0;;i3++){
339 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
[609]340 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx=atol(temporary);
[3]341 }
342 }
343 }
344
345 GetDlgItemText(hwnd,IDC_HEIGHT,temporary,255);
346 if(temporary[0]){
347 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
[609]348 pWindowInfo->size.cy=atol(temporary);
[3]349 else{
350 for(i3=0;;i3++){
351 if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
[609]352 pWindowInfo->pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy=atol(temporary);
[3]353 }
354 }
355 }
356
357 //描画
[609]358 DrawRadWindow(i,pWindowInfo);
[3]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.