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

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

Projectクラスをリファクタリング

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