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

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

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

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