source: dev/trunk/ab5.0/abdev/abdev/WindowControl.cpp@ 481

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

構成管理を大幅に改良。

File size: 82.7 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5using namespace ActiveBasic::IDE;
6
7#if defined(JPN)
8//日本語
9#include "pj_msg_jpn.h"
10#else
11//英語
12#include "pj_msg_eng.h"
13#endif
14
15int GetWndInfoNum(char *name){
16 extern PROJECTINFO ProjectInfo;
17 int i;
18 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
19 if(lstrcmpi(name,ProjectInfo.pWindowInfo[i].name)==0) return i;
20 }
21 return -1;
22}
23void ChangeDivisionToOrSign(char *CopyBuffer,const char *ReadBuffer){
24 int i,i2;
25 for(i=0,i2=0;;i++,i2++){
26 if(ReadBuffer[i]=='|'){
27 CopyBuffer[i2]=0;
28 lstrcpy(CopyBuffer+i2," or ");
29 i2+=3;
30 continue;
31 }
32 CopyBuffer[i2]=ReadBuffer[i];
33 if(ReadBuffer[i]=='\0') break;
34 }
35}
36void ChangeOrSignToDivision(char *CopyBuffer,const char *ReadBuffer){
37 int i,i2,IsStr;
38 for(i=0,i2=0,IsStr=0;;i++,i2++){
39 if(ReadBuffer[i]=='\"') IsStr^=1;
40 if(ReadBuffer[i]=='\0'){
41 CopyBuffer[i2]=0;
42 break;
43 }
44 if(ReadBuffer[i+3]=='\0'){
45 memcpy(CopyBuffer+i2,ReadBuffer+i,3);
46 CopyBuffer[i2+3]=0;
47 break;
48 }
49 if((ReadBuffer[i]==' '||ReadBuffer[i]=='\t')&&
50 (ReadBuffer[i+1]=='O'||ReadBuffer[i+1]=='o')&&(ReadBuffer[i+2]=='R'||ReadBuffer[i+2]=='r')&&
51 (ReadBuffer[i+3]==' '||ReadBuffer[i+3]=='\t')&&IsStr==0){
52 CopyBuffer[i2]='|';
53 i+=3;
54 continue;
55 }
56 CopyBuffer[i2]=ReadBuffer[i];
57 }
58}
59
60HGLOBAL Rad_GetChildInfoClipboardData(int WndNum,int WndInfoNum){
61 //CHILDINFO構造体をクリップボード用データ(pByteが示すバッファ)に変換する
62 extern PROJECTINFO ProjectInfo;
63 extern MDIINFO MdiInfo[MAX_WNDNUM];
64 HGLOBAL hGlobal;
65 BYTE *pByte;
66 int i2,i3,MemSize;
67 CHILDINFO *pChildInfo;
68
69 for(i3=0;;i3++){
70 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]==-1) break;
71 }
72
73
74 hGlobal=GlobalAlloc(GMEM_MOVEABLE,sizeof(int));
75 pByte=(BYTE *)GlobalLock(hGlobal);
76 *((int *)pByte)=i3;
77 GlobalUnlock(hGlobal);
78 i2=sizeof(int);
79
80 MemSize=i2;
81
82 for(i3--;i3>=0;i3--){
83 pChildInfo=&ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]];
84
85 MemSize+=lstrlen(pChildInfo->IdName)+1+
86 sizeof(POINT)+
87 sizeof(SIZE)+
88 lstrlen(pChildInfo->caption)+1+
89 sizeof(DWORD)+
90 sizeof(DWORD)+
91 sizeof(int)+
92 sizeof(int)+
93 lstrlen(pChildInfo->ImageCtrlInfo.path)+1;
94
95 hGlobal=GlobalReAlloc(hGlobal,MemSize,0);
96 pByte=(BYTE *)GlobalLock(hGlobal);
97
98 lstrcpy((char *)pByte+i2,pChildInfo->IdName);
99 i2+=lstrlen(pChildInfo->IdName)+1;
100
101 memcpy(pByte+i2,&pChildInfo->pos,sizeof(POINT));
102 i2+=sizeof(POINT);
103
104 memcpy(pByte+i2,&pChildInfo->size,sizeof(SIZE));
105 i2+=sizeof(SIZE);
106
107 lstrcpy((char *)pByte+i2,pChildInfo->caption);
108 i2+=lstrlen(pChildInfo->caption)+1;
109
110 memcpy(pByte+i2,&pChildInfo->style,sizeof(DWORD));
111 i2+=sizeof(DWORD);
112
113 memcpy(pByte+i2,&pChildInfo->ExStyle,sizeof(DWORD));
114 i2+=sizeof(DWORD);
115
116 memcpy(pByte+i2,&pChildInfo->Control,sizeof(int));
117 i2+=sizeof(int);
118
119 memcpy(pByte+i2,&pChildInfo->ImageCtrlInfo.type,sizeof(int));
120 i2+=sizeof(int);
121
122 if(!pChildInfo->ImageCtrlInfo.path){
123 lstrcpy((char *)pByte+i2,"");
124 i2++;
125 }
126 else{
127 lstrcpy((char *)pByte+i2,pChildInfo->ImageCtrlInfo.path);
128 i2+=lstrlen(pChildInfo->ImageCtrlInfo.path)+1;
129 }
130
131 GlobalUnlock(hGlobal);
132 }
133
134 return hGlobal;
135}
136void Rad_PasteChildInfoClipboardData(int WndNum,HGLOBAL hGlobal){
137 //hGlobalに格納されているクリップボードデータをRAD画面に挿入する
138 extern MDIINFO MdiInfo[MAX_WNDNUM];
139 BYTE *pByte;
140 int i2,i3,WndInfoNum;
141 CHILDINFO ChildInfo;
142 char temporary[255];
143
144 for(i2=1;i2<MAX_RAD_SELITEM;i2++) MdiInfo[WndNum].MdiRadInfo->SelectingItem[i2]=-1;
145
146 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
147 pByte=(BYTE *)GlobalLock(hGlobal);
148 i3=*((int *)pByte);
149 i2=sizeof(int);
150
151 for(i3--;i3>=0;i3--){
152 //IdNameメンバは変更される可能性がある
153 ChildInfo.IdName=(char *)temporary;
154 lstrcpy(ChildInfo.IdName,(char *)pByte+i2);
155 i2+=lstrlen(ChildInfo.IdName)+1;
156
157 memcpy(&ChildInfo.pos,pByte+i2,sizeof(POINT));
158 i2+=sizeof(POINT);
159
160 memcpy(&ChildInfo.size,pByte+i2,sizeof(SIZE));
161 i2+=sizeof(SIZE);
162
163 ChildInfo.caption=(char *)pByte+i2;
164 i2+=lstrlen(ChildInfo.caption)+1;
165
166 memcpy(&ChildInfo.style,pByte+i2,sizeof(DWORD));
167 i2+=sizeof(DWORD);
168
169 memcpy(&ChildInfo.ExStyle,pByte+i2,sizeof(DWORD));
170 i2+=sizeof(DWORD);
171
172 memcpy(&ChildInfo.Control,pByte+i2,sizeof(int));
173 i2+=sizeof(int);
174
175 memcpy(&ChildInfo.ImageCtrlInfo.type,pByte+i2,sizeof(int));
176 i2+=sizeof(int);
177
178 ChildInfo.ImageCtrlInfo.path=(char *)pByte+i2;
179 if(lstrlen(ChildInfo.ImageCtrlInfo.path)==0){
180 ChildInfo.ImageCtrlInfo.path=0;
181 i2++;
182 }
183 else i2+=lstrlen(ChildInfo.ImageCtrlInfo.path)+1;
184
185 ChildInfo.pos.x+=17;
186 ChildInfo.pos.y+=10;
187
188 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=InsertDlgItem(WndNum,
189 WndInfoNum,
190 -1,
191 &ChildInfo.pos,
192 &ChildInfo.size,
193 ChildInfo.IdName,
194 ChildInfo.caption,
195 ChildInfo.style,
196 ChildInfo.ExStyle,
197 ChildInfo.Control,
198 ChildInfo.ImageCtrlInfo.type,
199 ChildInfo.ImageCtrlInfo.path,
200 2);
201 }
202
203 GlobalUnlock(hGlobal);
204
205 ChangePropertyWindow(WndNum,WndInfoNum);
206}
207
208char *FormatCaption(char *caption){
209 extern HANDLE hHeap;
210 int i2,i3,BufSize;
211 char *buffer;
212
213 BufSize=256*2;
214 buffer=(char *)HeapAlloc(hHeap,0,BufSize);
215 for(i2=0,i3=0;;i2++,i3++){
216 if(i2+256>=BufSize){
217 BufSize+=256;
218 buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufSize);
219 }
220 if(caption[i3]=='\"'){
221 lstrcpy(buffer+i2,"\"+Chr$(34)+\"");
222 i2+=lstrlen(buffer+i2);
223 i2--;
224 continue;
225 }
226 buffer[i2]=caption[i3];
227 if(caption[i3]=='\0') break;
228 }
229
230 return buffer;
231}
232char *SetCaptionSequence(char *caption){
233 extern HANDLE hHeap;
234 int i2,i3,BufSize;
235 char *buffer;
236
237 BufSize=256*2;
238 buffer=(char *)HeapAlloc(hHeap,0,BufSize);
239 for(i2=0,i3=0;;i2++,i3++){
240 if(i2+256>=BufSize){
241 BufSize+=256;
242 buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufSize);
243 }
244 buffer[i2]=caption[i3];
245 if(caption[i3]=='\"'){
246 buffer[i2++]='\\';
247 buffer[i2]='1';
248 }
249 else if(caption[i3]=='\\'){
250 buffer[i2++]='\\';
251 buffer[i2]='\\';
252 }
253 else if(caption[i3]=='\0') break;
254 }
255
256 return buffer;
257}
258void RestoreCaptionSequence(char *caption){
259 int i2,i3;
260
261 for(i2=0,i3=0;;i2++,i3++){
262 caption[i2]=caption[i3];
263 if(caption[i3]=='\\'){
264 i3++;
265 if(caption[i3]=='1') caption[i2]='\"';
266 else caption[i2]=caption[i3];
267 }
268 else if(caption[i3]=='\0') break;
269 }
270}
271
272//テンプレートソースファイルに値をセットする
273char *PermutationWndPgmTemplate(char *pBuf,char *pPjName, char *pWndName, char *pHandleName, char *pProcName){
274 extern HANDLE hHeap;
275 int i,i2;
276
277 for(i=0;;i++){
278 if(pBuf[i]=='\0') break;
279 if(memicmp(pBuf+i,"#name#",6)==0){
280 //プロジェクト名を置換
281 i2=lstrlen(pPjName);
282 if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-6)+1);
283 SlideString(pBuf+i+6,i2-6);
284 memcpy(pBuf+i,pPjName,i2);
285 }
286 if(memicmp(pBuf+i,"#window#",8)==0){
287 //ウィンドウ名を置換
288 i2=lstrlen(pWndName);
289 if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-8)+1);
290 SlideString(pBuf+i+8,i2-8);
291 memcpy(pBuf+i,pWndName,i2);
292 }
293 if(memicmp(pBuf+i,"#handle#",8)==0){
294 //ハンドル名を置換
295 i2=lstrlen(pHandleName);
296 if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-8)+1);
297 SlideString(pBuf+i+8,i2-8);
298 memcpy(pBuf+i,pHandleName,i2);
299 }
300 if(memicmp(pBuf+i,"#procedure#",11)==0){
301 //プロシージャ名を置換
302 i2=lstrlen(pProcName);
303 if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-11)+1);
304 SlideString(pBuf+i+11,i2-11);
305 memcpy(pBuf+i,pProcName,i2);
306 }
307 }
308
309 return pBuf;
310}
311
312BOOL GetItemNotifyMessageNameByEvent(char *buffer,int ClassID,const char *EventName){
313 if(lstrcmp(EventName,"Click")==0) lstrcpy(buffer,"NM_CLICK");
314 else if(lstrcmp(EventName,"CustomDraw")==0) lstrcpy(buffer,"NM_CUSTOMDRAW");
315 else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"NM_DBLCLK");
316 else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"NM_KILLFOCUS");
317 else if(lstrcmp(EventName,"OutOfMemory")==0) lstrcpy(buffer,"NM_OUTOFMEMORY");
318 else if(lstrcmp(EventName,"RClick")==0) lstrcpy(buffer,"NM_RCLICK");
319 else if(lstrcmp(EventName,"RDblClick")==0) lstrcpy(buffer,"NM_RDBLCLK");
320 else if(lstrcmp(EventName,"ReleasedCapture")==0) lstrcpy(buffer,"NM_RELEASEDCAPTURE");
321 else if(lstrcmp(EventName,"Return")==0) lstrcpy(buffer,"NM_RETURN");
322 else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"NM_SETFOCUS");
323 else{
324 if(ClassID==CT_LISTVIEW){
325 if(lstrcmp(EventName,"BeginDrag")==0) lstrcpy(buffer,"LVN_BEGINDRAG");
326 else if(lstrcmp(EventName,"BeginLabelEdit")==0) lstrcpy(buffer,"LVN_BEGINLABELEDIT");
327 else if(lstrcmp(EventName,"BeginRDrag")==0) lstrcpy(buffer,"LVN_BEGINRDRAG");
328 else if(lstrcmp(EventName,"ColumnClick")==0) lstrcpy(buffer,"LVN_COLUMNCLICK");
329 else if(lstrcmp(EventName,"DeleteAllItems")==0) lstrcpy(buffer,"LVN_DELETEALLITEMS");
330 else if(lstrcmp(EventName,"DeleteItem")==0) lstrcpy(buffer,"LVN_DELETEITEM");
331 else if(lstrcmp(EventName,"EndLabelEdit")==0) lstrcpy(buffer,"LVN_ENDLABELEDIT");
332 else if(lstrcmp(EventName,"GetDispInfo")==0) lstrcpy(buffer,"LVN_GETDISPINFO");
333 else if(lstrcmp(EventName,"InsertItem")==0) lstrcpy(buffer,"LVN_INSERTITEM");
334 else if(lstrcmp(EventName,"ItemChanged")==0) lstrcpy(buffer,"LVN_ITEMCHANGED");
335 else if(lstrcmp(EventName,"ItemChanging")==0) lstrcpy(buffer,"LVN_ITEMCHANGING");
336 else if(lstrcmp(EventName,"KeyDown")==0) lstrcpy(buffer,"LVN_KEYDOWN");
337 else if(lstrcmp(EventName,"SetDispInfo")==0) lstrcpy(buffer,"LVN_SETDISPINFO");
338 else return 0;
339 }
340 else if(ClassID==CT_UPDOWN){
341 if(lstrcmp(EventName,"Deltapos")==0) lstrcpy(buffer,"UDN_DELTAPOS");
342 else return 0;
343 }
344 else return 0;
345 //未完成
346 }
347 return 1;
348}
349BOOL GetNotifyCommandByItemMessage(WINDOW_INFO *pWindowInfo,ITEMEVENTINFO *pItemEventInfo,char *Command,char *spaces){
350 int i,i2,i3,sw;
351 char temporary[MAX_PATH];
352
353 i2=0;
354 sw=0;
355 for(i=0;;i++){
356 if(pItemEventInfo[i].IdName==0) break;
357 if(pItemEventInfo[i].ClassID==CT_LISTVIEW||
358 pItemEventInfo[i].ClassID==CT_TREEVIEW||
359 pItemEventInfo[i].ClassID==CT_UPDOWN||
360 pItemEventInfo[i].ClassID==CT_PROGRESSBAR||
361 pItemEventInfo[i].ClassID==CT_TRACKBAR){
362 //コモン コントロール(WM_NOTIFY)
363 sw=1;
364 sprintf(Command+i2,"%sCase %s\r\n",spaces,pItemEventInfo[i].IdName);
365 i2+=lstrlen(Command+i2);
366 sprintf(Command+i2,"%s\tSelect Case pnmHdr->code\r\n",spaces);
367 i2+=lstrlen(Command+i2);
368 for(i3=0;i3<pItemEventInfo[i].EventNum;i3++){
369 if(GetItemNotifyMessageNameByEvent(temporary,pItemEventInfo[i].ClassID,pItemEventInfo[i].pEventNames[i3])){
370 sprintf(Command+i2,"%s\t\tCase %s\r\n",spaces,temporary);
371 i2+=lstrlen(Command+i2);
372 sprintf(Command+i2,"%s\t\t\t%s_%s_%s(ByVal (pnmHdr As VoidPtr))\r\n",spaces,pWindowInfo->name,pItemEventInfo[i].IdName,pItemEventInfo[i].pEventNames[i3]);
373 i2+=lstrlen(Command+i2);
374 }
375 }
376 sprintf(Command+i2,"%s\tEnd Select\r\n",spaces);
377 i2+=lstrlen(Command+i2);
378 }
379 }
380 return sw;
381}
382void GetItemMessageNameByEvent(char *buffer,int ClassID,const char *EventName){
383 if(ClassID==CT_BUTTON||
384 ClassID==CT_CHECKBOX||
385 ClassID==CT_RADIOBUTTON){
386 if(lstrcmp(EventName,"Click")==0) lstrcpy(buffer,"BN_CLICKED");
387 else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"BN_DBLCLK");
388 }
389 else if(ClassID==CT_COMBOBOX){
390 if(lstrcmp(EventName,"CloseUp")==0) lstrcpy(buffer,"CBN_CLOSEUP");
391 else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"CBN_DBLCLK");
392 else if(lstrcmp(EventName,"DropDown")==0) lstrcpy(buffer,"CBN_DROPDOWN");
393 else if(lstrcmp(EventName,"EditChange")==0) lstrcpy(buffer,"CBN_EDITCHANGE");
394 else if(lstrcmp(EventName,"EditUpdate")==0) lstrcpy(buffer,"CBN_EDITUPDATE");
395 else if(lstrcmp(EventName,"ErrSpace")==0) lstrcpy(buffer,"CBN_ERRSPACE");
396 else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"CBN_KILLFOCUS");
397 else if(lstrcmp(EventName,"SelChange")==0) lstrcpy(buffer,"CBN_SELCHANGE");
398 else if(lstrcmp(EventName,"SelEndCancel")==0) lstrcpy(buffer,"CBN_SELENDCANCEL");
399 else if(lstrcmp(EventName,"SelEndOk")==0) lstrcpy(buffer,"CBN_SELENDOK");
400 else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"CBN_SETFOCUS");
401 }
402 else if(ClassID==CT_EDIT){
403 if(lstrcmp(EventName,"Change")==0) lstrcpy(buffer,"EN_CHANGE");
404 else if(lstrcmp(EventName,"ErrSpace")==0) lstrcpy(buffer,"EN_ERRSPACE");
405 else if(lstrcmp(EventName,"HScroll")==0) lstrcpy(buffer,"EN_HSCROLL");
406 else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"EN_KILLFOCUS");
407 else if(lstrcmp(EventName,"MaxText")==0) lstrcpy(buffer,"EN_MAXTEXT");
408 else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"EN_SETFOCUS");
409 else if(lstrcmp(EventName,"Update")==0) lstrcpy(buffer,"EN_UPDATE");
410 else if(lstrcmp(EventName,"VScroll")==0) lstrcpy(buffer,"EN_VSCROLL");
411 }
412 else if(ClassID==CT_IMAGEBOX||
413 ClassID==CT_STATIC){
414 if(lstrcmp(EventName,"Click")==0) lstrcpy(buffer,"STN_CLICKED");
415 else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"STN_DBLCLK");
416 }
417 else if(ClassID==CT_LISTBOX){
418 if(lstrcmp(EventName,"SelChange")==0) lstrcpy(buffer,"LBN_SELCHANGE");
419 else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"LBN_DBLCLK");
420 else if(lstrcmp(EventName,"ErrSpace")==0) lstrcpy(buffer,"LBN_ERRSPACE");
421 else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"LBN_KILLFOCUS");
422 else if(lstrcmp(EventName,"SelCancel")==0) lstrcpy(buffer,"LBN_SELCANCEL");
423 else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"LBN_SETFOCUS");
424 }
425}
426void GetCommandByItemMessage(WINDOW_INFO *pWindowInfo,ITEMEVENTINFO *pItemEventInfo,char *Command,char *spaces){
427 extern HANDLE hHeap;
428 int i,i2,i3;
429 char temporary[MAX_PATH];
430
431 i2=0;
432 for(i=0;;i++){
433 if(pItemEventInfo[i].IdName==0) break;
434 if(pItemEventInfo[i].ClassID!=CT_LISTVIEW&&
435 pItemEventInfo[i].ClassID!=CT_PROGRESSBAR&&
436 pItemEventInfo[i].ClassID!=CT_TREEVIEW&&
437 pItemEventInfo[i].ClassID!=CT_TRACKBAR&&
438 pItemEventInfo[i].ClassID!=CT_UPDOWN
439 ){
440 //WM_COMMAND
441 sprintf(Command+i2,"%sCase %s\r\n",spaces,pItemEventInfo[i].IdName);
442 i2+=lstrlen(Command+i2);
443 if(pItemEventInfo[i].ClassID==CT_MENU){
444 sprintf(Command+i2,"%s\t%s_%s_MenuClick()\r\n",spaces,pWindowInfo->name,pItemEventInfo[i].IdName);
445 i2+=lstrlen(Command+i2);
446 for(i3=0;i3<pItemEventInfo[i].EventNum;i3++)
447 HeapDefaultFree(pItemEventInfo[i].pEventNames[i3]);
448 }
449 else{
450 sprintf(Command+i2,"%s\tSelect Case HIWORD(wParam)\r\n",spaces);
451 i2+=lstrlen(Command+i2);
452 for(i3=0;i3<pItemEventInfo[i].EventNum;i3++){
453 GetItemMessageNameByEvent(temporary,pItemEventInfo[i].ClassID,pItemEventInfo[i].pEventNames[i3]);
454 sprintf(Command+i2,"%s\t\tCase %s\r\n",spaces,temporary);
455 i2+=lstrlen(Command+i2);
456 sprintf(Command+i2,"%s\t\t\t%s_%s_%s()\r\n",spaces,pWindowInfo->name,pItemEventInfo[i].IdName,pItemEventInfo[i].pEventNames[i3]);
457 i2+=lstrlen(Command+i2);
458 HeapDefaultFree(pItemEventInfo[i].pEventNames[i3]);
459 }
460 sprintf(Command+i2,"%s\tEnd Select\r\n",spaces);
461 i2+=lstrlen(Command+i2);
462 }
463 HeapDefaultFree(pItemEventInfo[i].IdName);
464 HeapDefaultFree(pItemEventInfo[i].pEventNames);
465 }
466 else{
467 //WM_NOTIFY情報のメモリ解放
468 for(i3=0;i3<pItemEventInfo[i].EventNum;i3++)
469 HeapDefaultFree(pItemEventInfo[i].pEventNames[i3]);
470 HeapDefaultFree(pItemEventInfo[i].IdName);
471 HeapDefaultFree(pItemEventInfo[i].pEventNames);
472 }
473 }
474}
475
476void GetItemClassName(char *buffer,int Control){
477 switch(Control){
478 case CT_BUTTON:
479 case CT_CHECKBOX:
480 case CT_GROUPBOX:
481 case CT_RADIOBUTTON:
482 lstrcpy(buffer,"BUTTON");
483 break;
484 case CT_COMBOBOX:
485 lstrcpy(buffer,"COMBOBOX");
486 break;
487 case CT_EDIT:
488 lstrcpy(buffer,"EDIT");
489 break;
490 case CT_HSCROLLBAR:
491 case CT_VSCROLLBAR:
492 lstrcpy(buffer,"SCROLLBAR");
493 break;
494 case CT_LISTBOX:
495 lstrcpy(buffer,"LISTBOX");
496 break;
497 case CT_LISTVIEW:
498 lstrcpy(buffer,"SysListView32");
499 break;
500 case CT_IMAGEBOX:
501 case CT_STATIC:
502 lstrcpy(buffer,"STATIC");
503 break;
504 case CT_PROGRESSBAR:
505 lstrcpy(buffer,"msctls_progress32");
506 break;
507 case CT_TRACKBAR:
508 lstrcpy(buffer,"msctls_trackbar32");
509 break;
510 case CT_TREEVIEW:
511 lstrcpy(buffer,"SysTreeView32");
512 break;
513 //CT_UPDOWNはCreateUpDownControl関数で独自に作成される
514 }
515}
516long GetCommandByMessage(int WndInfoNum,const char *MessageName,BOOL bProcedureCall,char *Command,char *spaces){
517 extern PROJECTINFO ProjectInfo;
518 int i,i2,sw;
519 char temporary[MAX_PATH],*temp2;
520 WINDOW_INFO *pWindowInfo;
521
522 pWindowInfo=&ProjectInfo.pWindowInfo[WndInfoNum];
523
524 Command[0]=0;
525
526
527 /////////////////////
528 // Default コマンド
529
530 if(lstrcmp(MessageName,"Activate")==0){
531 sprintf(Command,"%sCase WM_ACTIVATE\r\n",spaces);
532 i=lstrlen(Command);
533 sprintf(Command+i,"%s\t%s_%s(LOWORD(wParam),HIWORD(wParam))\r\n",spaces,pWindowInfo->name,MessageName);
534 }
535 else if(lstrcmp(MessageName,"Create")==0){
536 if(pWindowInfo->type==WNDTYPE_MODALDLG||pWindowInfo->type==WNDTYPE_MODELESSDLG)
537 sprintf(Command,"%sCase WM_INITDIALOG\r\n",spaces);
538 else sprintf(Command,"%sCase WM_CREATE\r\n",spaces);
539 i=lstrlen(Command);
540
541 sprintf(Command+i,"%s\t%s=hWnd\r\n",spaces,pWindowInfo->HandleName);
542 i+=lstrlen(Command+i);
543
544 if(pWindowInfo->MenuID){
545 //メニュー作成
546 for(i2=0;i2<ProjectInfo.NumberOfMenu;i2++){
547 if(lstrcmpi(ProjectInfo.pMenuInfo[i2].IdName,pWindowInfo->MenuID)==0) break;
548 }
549 if(i2!=ProjectInfo.NumberOfMenu){
550 sprintf(Command+i,"%s\tSetMenu(hWnd,hMenu_%s)\r\n",spaces,ProjectInfo.pMenuInfo[i2].IdName);
551 i+=lstrlen(Command+i);
552 }
553 }
554
555 //子ウィンドウ作成
556 for(i2=0,sw=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
557 if(pWindowInfo->pChildInfo[i2].Control==CT_UPDOWN){
558 sprintf(Command+i,"%s\tCreateUpDownControl(%d,%d,%d,%d,%d,hWnd,%s,GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,0,0,100,0)\r\n",
559 spaces,
560 pWindowInfo->pChildInfo[i2].style,
561 pWindowInfo->pChildInfo[i2].pos.x,pWindowInfo->pChildInfo[i2].pos.y,
562 pWindowInfo->pChildInfo[i2].size.cx,pWindowInfo->pChildInfo[i2].size.cy,
563 pWindowInfo->pChildInfo[i2].IdName);
564 i+=lstrlen(Command+i);
565 }
566 else{
567 GetItemClassName(temporary,pWindowInfo->pChildInfo[i2].Control);
568 temp2=FormatCaption(pWindowInfo->pChildInfo[i2].caption);
569 sprintf(Command+i,"%s\tCreateWindowEx(&H%08x,\"%s\",\"%s\",&H%08x,%d,%d,%d,%d,hWnd,%s As HMENU,GetModuleHandle(0),0)\r\n",
570 spaces,
571 pWindowInfo->pChildInfo[i2].ExStyle,
572 temporary,
573 temp2,
574 pWindowInfo->pChildInfo[i2].style,
575 pWindowInfo->pChildInfo[i2].pos.x,
576 pWindowInfo->pChildInfo[i2].pos.y,
577 pWindowInfo->pChildInfo[i2].size.cx,
578 pWindowInfo->pChildInfo[i2].size.cy,
579 pWindowInfo->pChildInfo[i2].IdName);
580 i+=lstrlen(Command+i);
581 HeapDefaultFree(temp2);
582 sprintf(Command+i,"%s\tSendMessage(GetDlgItem(hWnd,%s),WM_SETFONT,hFont_%s As WPARAM,0)\r\n",
583 spaces,
584 pWindowInfo->pChildInfo[i2].IdName,
585 pWindowInfo->name);
586 i+=lstrlen(Command+i);
587
588 if(pWindowInfo->pChildInfo[i2].Control==CT_IMAGEBOX){
589 //イメージ ボックスの場合
590 if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON){
591 if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE){
592 if(strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,":")||
593 strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,"\\\\")){
594 sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,\"%s\",IMAGE_ICON,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE)\r\n",
595 spaces,
596 pWindowInfo->name,
597 pWindowInfo->pChildInfo[i2].IdName,
598 pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
599 }
600 else{
601 if(sw==0){
602 sw=1;
603 lstrcpy(Command+i,"\r\n");
604 i+=2;
605 sprintf(Command+i,"%s\tDim ImageFilePath[MAX_PATH] As Byte\r\n",spaces);
606 i+=lstrlen(Command+i);
607 sprintf(Command+i,"%s\tDim ModulePath[MAX_PATH] As Byte, i As Long\r\n",spaces);
608 i+=lstrlen(Command+i);
609 sprintf(Command+i,"%s\tGetModuleFileName(GetModuleHandle(0),ModulePath,MAX_PATH)\r\n",spaces);
610 i+=lstrlen(Command+i);
611 sprintf(Command+i,"%s\tFor i=lstrlen(ModulePath)-1 To 0 Step -1\r\n",spaces);
612 i+=lstrlen(Command+i);
613 sprintf(Command+i,"%s\t\tIf ModulePath[i]=&H5C Then Exit For\r\n",spaces);
614 i+=lstrlen(Command+i);
615 sprintf(Command+i,"%s\tNext\r\n",spaces);
616 i+=lstrlen(Command+i);
617 sprintf(Command+i,"%s\tModulePath[i+1]=0\r\n",spaces);
618 i+=lstrlen(Command+i);
619 lstrcpy(Command+i,"\r\n");
620 i+=2;
621 }
622 sprintf(Command+i,"%s\twsprintf(ImageFilePath,\"%%s%s\",ModulePath)\r\n",spaces,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
623 i+=lstrlen(Command+i);
624 sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,ImageFilePath,IMAGE_ICON,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE)\r\n",
625 spaces,
626 pWindowInfo->name,
627 pWindowInfo->pChildInfo[i2].IdName);
628 }
629 i+=lstrlen(Command+i);
630 }
631 else if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_RES){
632 sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,%s As *Byte,IMAGE_ICON,0,0,LR_DEFAULTSIZE)\r\n",
633 spaces,
634 pWindowInfo->name,
635 pWindowInfo->pChildInfo[i2].IdName,
636 pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
637 i+=lstrlen(Command+i);
638 }
639 sprintf(Command+i,"%s\tSendMessage(GetDlgItem(hWnd,%s),STM_SETICON,hImage_%s_%s As WPARAM,0)\r\n",
640 spaces,
641 pWindowInfo->pChildInfo[i2].IdName,
642 pWindowInfo->name,
643 pWindowInfo->pChildInfo[i2].IdName);
644 i+=lstrlen(Command+i);
645 }
646 else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP){
647 if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE){
648 if(strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,":")||
649 strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,"\\\\")){
650 sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,\"%s\",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE)\r\n",
651 spaces,
652 pWindowInfo->name,
653 pWindowInfo->pChildInfo[i2].IdName,
654 pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
655 }
656 else{
657 if(sw==0){
658 sw=1;
659 lstrcpy(Command+i,"\r\n");
660 i+=2;
661 sprintf(Command+i,"%s\tDim ImageFilePath[MAX_PATH] As Byte\r\n",spaces);
662 i+=lstrlen(Command+i);
663 sprintf(Command+i,"%s\tDim ModulePath[MAX_PATH] As Byte, i As Long\r\n",spaces);
664 i+=lstrlen(Command+i);
665 sprintf(Command+i,"%s\tGetModuleFileName(GetModuleHandle(0),ModulePath,MAX_PATH)\r\n",spaces);
666 i+=lstrlen(Command+i);
667 sprintf(Command+i,"%s\tFor i=lstrlen(ModulePath)-1 To 0 Step -1\r\n",spaces);
668 i+=lstrlen(Command+i);
669 sprintf(Command+i,"%s\t\tIf ModulePath[i]=&H5C Then Exit For\r\n",spaces);
670 i+=lstrlen(Command+i);
671 sprintf(Command+i,"%s\tNext\r\n",spaces);
672 i+=lstrlen(Command+i);
673 sprintf(Command+i,"%s\tModulePath[i+1]=0\r\n",spaces);
674 i+=lstrlen(Command+i);
675 lstrcpy(Command+i,"\r\n");
676 i+=2;
677 }
678 sprintf(Command+i,"%s\twsprintf(ImageFilePath,\"%%s%s\",ModulePath)\r\n",spaces,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
679 i+=lstrlen(Command+i);
680 sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,ImageFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE)\r\n",
681 spaces,
682 pWindowInfo->name,
683 pWindowInfo->pChildInfo[i2].IdName);
684 }
685 i+=lstrlen(Command+i);
686 }
687 else if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_RES){
688 sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,%s As *Byte,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE)\r\n",
689 spaces,
690 pWindowInfo->name,
691 pWindowInfo->pChildInfo[i2].IdName,
692 pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
693 i+=lstrlen(Command+i);
694 }
695 sprintf(Command+i,"%s\tSendMessage(GetDlgItem(hWnd,%s),STM_SETIMAGE,IMAGE_BITMAP,hImage_%s_%s As LPARAM)\r\n",
696 spaces,
697 pWindowInfo->pChildInfo[i2].IdName,
698 pWindowInfo->name,
699 pWindowInfo->pChildInfo[i2].IdName);
700 i+=lstrlen(Command+i);
701 }
702 }
703 }
704 }
705
706 if(bProcedureCall)
707 sprintf(Command+i,"%s\t%s_%s(ByVal (lParam As VoidPtr))\r\n",spaces,pWindowInfo->name,MessageName);
708 return WM_CREATE;
709 }
710 else if(lstrcmp(MessageName,"Destroy")==0){
711 sprintf(Command,"%sCase WM_DESTROY\r\n",spaces);
712 i=lstrlen(Command);
713 if(bProcedureCall){
714 sprintf(Command+i,"%s\t%s_%s()\r\n",spaces,pWindowInfo->name,MessageName);
715 i+=lstrlen(Command+i);
716 }
717
718 if(pWindowInfo->MenuID){
719 //メニューを解放
720 for(i2=0;i2<ProjectInfo.NumberOfMenu;i2++){
721 if(lstrcmpi(ProjectInfo.pMenuInfo[i2].IdName,pWindowInfo->MenuID)==0) break;
722 }
723 if(i2!=ProjectInfo.NumberOfMenu){
724 sprintf(Command+i,"%s\tSetMenu(hWnd,NULL)\r\n",spaces);
725 i+=lstrlen(Command+i);
726 }
727 }
728
729 //イメージ ボックス用の変数を解放
730 for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
731 if(pWindowInfo->pChildInfo[i2].Control==CT_IMAGEBOX){
732 if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON)
733 sprintf(Command+i,"%s\tDestroyIcon(hImage_%s_%s)\r\n",spaces,pWindowInfo->name,pWindowInfo->pChildInfo[i2].IdName);
734 else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP)
735 sprintf(Command+i,"%s\tDeleteObject(hImage_%s_%s)\r\n",spaces,pWindowInfo->name,pWindowInfo->pChildInfo[i2].IdName);
736 i+=lstrlen(Command+i);
737 }
738 }
739 return WM_DESTROY;
740 }
741 else if(lstrcmp(MessageName,"DropFiles")==0){
742 sprintf(Command,"%sCase WM_DROPFILES\r\n",spaces);
743 i=lstrlen(Command);
744 sprintf(Command+i,"%s\t%s_%s(wParam As HDROP)\r\n",spaces,pWindowInfo->name,MessageName);
745 }
746 else if(lstrcmp(MessageName,"HScroll")==0){
747 sprintf(Command,"%sCase WM_HSCROLL\r\n",spaces);
748 i=lstrlen(Command);
749 sprintf(Command+i,"%s\t%s_%s(LOWORD(wParam),HIWORD(wParam),lParam As HWND)\r\n",spaces,pWindowInfo->name,MessageName);
750 }
751 else if(lstrcmp(MessageName,"KeyDown")==0){
752 sprintf(Command,"%sCase WM_KEYDOWN\r\n",spaces);
753 i=lstrlen(Command);
754 sprintf(Command+i,"%s\t%s_%s(wParam As Long,lParam As Long)\r\n",spaces,pWindowInfo->name,MessageName);
755 }
756 else if(lstrcmp(MessageName,"KeyPress")==0){
757 sprintf(Command,"%sCase WM_CHAR\r\n",spaces);
758 i=lstrlen(Command);
759 sprintf(Command+i,"%s\t%s_%s(wParam As Long,lParam As Long)\r\n",spaces,pWindowInfo->name,MessageName);
760 }
761 else if(lstrcmp(MessageName,"KeyUp")==0){
762 sprintf(Command,"%sCase WM_KEYUP\r\n",spaces);
763 i=lstrlen(Command);
764 sprintf(Command+i,"%s\t%s_%s(wParam As Long,lParam As Long)\r\n",spaces,pWindowInfo->name,MessageName);
765 }
766 else if(lstrcmp(MessageName,"LButtonDown")==0){
767 sprintf(Command,"%sCase WM_LBUTTONDOWN\r\n",spaces);
768 i=lstrlen(Command);
769 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
770 }
771 else if(lstrcmp(MessageName,"LButtonDblClick")==0){
772 sprintf(Command,"%sCase WM_LBUTTONDBLCLK\r\n",spaces);
773 i=lstrlen(Command);
774 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
775 }
776 else if(lstrcmp(MessageName,"LButtonUp")==0){
777 sprintf(Command,"%sCase WM_LBUTTONUP\r\n",spaces);
778 i=lstrlen(Command);
779 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
780 }
781 else if(lstrcmp(MessageName,"MButtonDown")==0){
782 sprintf(Command,"%sCase WM_MBUTTONDOWN\r\n",spaces);
783 i=lstrlen(Command);
784 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
785 }
786 else if(lstrcmp(MessageName,"MButtonDblClick")==0){
787 sprintf(Command,"%sCase WM_MBUTTONDBLCLK\r\n",spaces);
788 i=lstrlen(Command);
789 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
790 }
791 else if(lstrcmp(MessageName,"MButtonUp")==0){
792 sprintf(Command,"%sCase WM_MBUTTONUP\r\n",spaces);
793 i=lstrlen(Command);
794 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
795 }
796 else if(lstrcmp(MessageName,"MouseMove")==0){
797 sprintf(Command,"%sCase WM_MOUSEMOVE\r\n",spaces);
798 i=lstrlen(Command);
799 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
800 }
801 else if(lstrcmp(MessageName,"Move")==0){
802 sprintf(Command,"%sCase WM_MOVE\r\n",spaces);
803 i=lstrlen(Command);
804 sprintf(Command+i,"%s\t%s_%s(LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
805 }
806 else if(lstrcmp(MessageName,"Notify")==0){
807 //コモンコントロールメッセージと共に挿入
808 return WM_NOTIFY;
809 }
810 else if(lstrcmp(MessageName,"Paint")==0){
811 sprintf(Command,"%sCase WM_PAINT\r\n",spaces);
812 i=lstrlen(Command);
813 sprintf(Command+i,"%s\tDim ps As PAINTSTRUCT\r\n",spaces);
814 i+=lstrlen(Command+i);
815 sprintf(Command+i,"%s\tDim hDC As HDC\r\n",spaces);
816 i+=lstrlen(Command+i);
817 sprintf(Command+i,"%s\thDC=BeginPaint(hWnd,ps)\r\n",spaces);
818 i+=lstrlen(Command+i);
819 sprintf(Command+i,"%s\t%s_%s(hDC)\r\n",spaces,pWindowInfo->name,MessageName);
820 i+=lstrlen(Command+i);
821 sprintf(Command+i,"%s\tEndPaint(hWnd,ps)\r\n",spaces);
822 return WM_PAINT;
823 }
824 else if(lstrcmp(MessageName,"QueryClose")==0){
825 sprintf(Command,"%sCase WM_CLOSE\r\n",spaces);
826 i=lstrlen(Command);
827 sprintf(Command+i,"%s\tDim cancel=0 As Integer\r\n",spaces);
828 i+=lstrlen(Command+i);
829 if(bProcedureCall){
830 sprintf(Command+i,"%s\t%s_%s(cancel)\r\n",spaces,pWindowInfo->name,MessageName);
831 i+=lstrlen(Command+i);
832 }
833 if(pWindowInfo->type==WNDTYPE_MODALDLG)
834 sprintf(Command+i,"%s\tIf cancel=0 Then EndDialog(hWnd,0)\r\n",spaces);
835 else
836 sprintf(Command+i,"%s\tIf cancel=0 Then DestroyWindow(hWnd)\r\n",spaces);
837 return WM_CLOSE;
838 }
839 else if(lstrcmp(MessageName,"RButtonDblClick")==0){
840 sprintf(Command,"%sCase WM_RBUTTONDBLCLK\r\n",spaces);
841 i=lstrlen(Command);
842 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
843 }
844 else if(lstrcmp(MessageName,"RButtonDown")==0){
845 sprintf(Command,"%sCase WM_RBUTTONDOWN\r\n",spaces);
846 i=lstrlen(Command);
847 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
848 }
849 else if(lstrcmp(MessageName,"RButtonUp")==0){
850 sprintf(Command,"%sCase WM_RBUTTONUP\r\n",spaces);
851 i=lstrlen(Command);
852 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
853 }
854 else if(lstrcmp(MessageName,"Resize")==0){
855 sprintf(Command,"%sCase WM_SIZE\r\n",spaces);
856 i=lstrlen(Command);
857 sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
858 }
859 else if(lstrcmp(MessageName,"SetFocus")==0){
860 sprintf(Command,"%sCase WM_SETFOCUS\r\n",spaces);
861 i=lstrlen(Command);
862 sprintf(Command+i,"%s\t%s_%s()\r\n",spaces,pWindowInfo->name,MessageName);
863 }
864 else if(lstrcmp(MessageName,"Timer")==0){
865 sprintf(Command,"%sCase WM_TIMER\r\n",spaces);
866 i=lstrlen(Command);
867 sprintf(Command+i,"%s\t%s_%s(wParam As DWord)\r\n",spaces,pWindowInfo->name,MessageName);
868 }
869 else if(lstrcmp(MessageName,"VScroll")==0){
870 sprintf(Command,"%sCase WM_VSCROLL\r\n",spaces);
871 i=lstrlen(Command);
872 sprintf(Command+i,"%s\t%s_%s(LOWORD(wParam),HIWORD(wParam),lParam As HWND)\r\n",spaces,pWindowInfo->name,MessageName);
873 }
874
875
876 ///////////////////
877 // MMSYS コマンド
878
879 else if(lstrcmp(MessageName,"MciNotify")==0){
880 sprintf(Command,"%sCase MM_MCINOTIFY\r\n",spaces);
881 i=lstrlen(Command);
882 sprintf(Command+i,"%s\t%s_%s(wParam,lParam)\r\n",spaces,pWindowInfo->name,MessageName);
883 }
884 return 0;
885}
886
887char **GetMenuItemConstData(MENU_INFO *pMenuInfo,int NumberOfMenu,int *ConstNumber,char **ppNames,int *NamesNum,char *buffer,int *base){
888 extern HANDLE hHeap;
889 int i,i2,sw1;
890
891 for(i=0;i<NumberOfMenu;i++){
892 if(pMenuInfo[i].pMenuInfo){
893 //ポップアップ
894 ppNames=GetMenuItemConstData(pMenuInfo[i].pMenuInfo,pMenuInfo[i].NumberOfMenu,ConstNumber,ppNames,NamesNum,buffer,base);
895 }
896 else if(pMenuInfo[i].type==MFT_STRING){
897 //重複チェック
898 for(i2=0,sw1=0;i2<*NamesNum;i2++){
899 if(lstrcmpi(ppNames[i2],pMenuInfo[i].IdName)==0){
900 sw1=1;
901 break;
902 }
903 }
904 if(sw1==0){
905 ppNames=(char **)HeapReAlloc(hHeap,0,ppNames,sizeof(char *)*((*NamesNum)+1));
906 ppNames[*NamesNum]=pMenuInfo[i].IdName;
907 (*NamesNum)++;
908
909 sprintf(buffer+(*base),"Const %s=%d\r\n",pMenuInfo[i].IdName,*ConstNumber);
910 (*base)+=lstrlen(buffer+(*base));
911 (*ConstNumber)++;
912 }
913 }
914 }
915 return ppNames;
916}
917int GetMakeMenuCommand(MENU_INFO *pMenuInfo,int NumberOfMenu,char *MenuHandle,char *Command,BOOL bMain){
918 int i,i2;
919 char temporary[MAX_PATH];
920
921 i=0;
922 sprintf(Command+i,"Dim %s As HMENU\r\n",MenuHandle);
923 i+=lstrlen(Command+i);
924 if(bMain) sprintf(Command+i,"%s=CreateMenu()\r\n",MenuHandle);
925 else sprintf(Command+i,"%s=CreatePopupMenu()\r\n",MenuHandle);
926 i+=lstrlen(Command+i);
927
928 for(i2=NumberOfMenu-1;i2>=0;i2--){
929 if(pMenuInfo[i2].pMenuInfo){
930 sprintf(temporary,"%s_%d",MenuHandle,i2);
931 i+=GetMakeMenuCommand(pMenuInfo[i2].pMenuInfo,pMenuInfo[i2].NumberOfMenu,temporary,Command+i,0);
932 sprintf(Command+i,"InsMenu %s,0,MF_BYPOSITION,Ex\"%s\",0,%s,%d\r\n",
933 MenuHandle,
934 pMenuInfo[i2].caption,
935 temporary,
936 pMenuInfo[i2].state);
937 i+=lstrlen(Command+i);
938 }
939 else{
940 if(pMenuInfo[i2].type==MFT_STRING){
941 sprintf(Command+i,"InsMenu %s,0,MF_BYPOSITION,Ex\"%s\",%s,0,%d\r\n",
942 MenuHandle,
943 pMenuInfo[i2].caption,
944 pMenuInfo[i2].IdName,
945 pMenuInfo[i2].state);
946 i+=lstrlen(Command+i);
947 }
948 else if(pMenuInfo[i2].type==MFT_SEPARATOR){
949 sprintf(Command+i,"InsMenu %s,0,MF_BYPOSITION,\"\"\r\n",
950 MenuHandle);
951 i+=lstrlen(Command+i);
952 }
953 }
954 }
955 return i;
956}
957int GetDestroyMenuCommand(MENU_INFO *pMenuInfo,int NumberOfMenu,char *MenuHandle,char *Command){
958 int i,i2;
959 char temporary[MAX_PATH];
960
961 i=0;
962 sprintf(Command+i,"\tDestroyMenu(%s)\r\n",MenuHandle);
963 i+=lstrlen(Command+i);
964
965 for(i2=NumberOfMenu-1;i2>=0;i2--){
966 if(pMenuInfo[i2].pMenuInfo){
967 sprintf(temporary,"%s_%d",MenuHandle,i2);
968 i+=GetDestroyMenuCommand(pMenuInfo[i2].pMenuInfo,pMenuInfo[i2].NumberOfMenu,temporary,Command+i);
969 }
970 }
971 return i;
972}
973void SaveWindowProgram(){
974 extern HANDLE hHeap;
975 extern PROJECTINFO ProjectInfo;
976 int i,i2,i3,i4,i5,i6,sw1,sw2,sw3,sw4,size;
977 char *buffer,**ppNames,temporary[MAX_PATH];
978 WINDOW_INFO *pWindowInfo;
979
980 pWindowInfo=ProjectInfo.pWindowInfo;
981
982 size=2;
983 buffer=(char *)HeapAlloc(hHeap,0,65535*size);
984 lstrcpy(buffer,"'このファイルはウィンドウ定義ファイル(*.wnd)をもとに生成されています\r\n\r\n");
985 i2=lstrlen(buffer);
986
987 if(ProjectInfo.dwOption&PJ_OP_COMMCTRL){
988 //コマンコントロールを初期化
989 lstrcpy(buffer+i2,"Dim _RadSys_InitCtrls As INITCOMMONCONTROLSEX\r\n");
990 i2+=lstrlen(buffer+i2);
991 lstrcpy(buffer+i2,"_RadSys_InitCtrls.dwSize=Len(_RadSys_InitCtrls)\r\n");
992 i2+=lstrlen(buffer+i2);
993 lstrcpy(buffer+i2,"_RadSys_InitCtrls.dwICC=ICC_WIN95_CLASSES\r\n");
994 i2+=lstrlen(buffer+i2);
995 lstrcpy(buffer+i2,"InitCommonControlsEx(_RadSys_InitCtrls)\r\n\r\n");
996 i2+=lstrlen(buffer+i2);
997 }
998
999
1000 ////////////
1001 //IDを定義
1002
1003 ppNames=(char **)HeapAlloc(hHeap,0,1);
1004 for(i=0,i4=1000,i5=0;i<ProjectInfo.NumberOfWindows;i++){
1005 for(i3=0;i3<pWindowInfo[i].NumberOfChildWindows;i3++){
1006
1007 //重複チェック
1008 for(i6=0,sw1=0;i6<i5;i6++){
1009 if(lstrcmpi(ppNames[i6],pWindowInfo[i].pChildInfo[i3].IdName)==0){
1010 sw1=1;
1011 break;
1012 }
1013 }
1014 if(sw1) continue;
1015
1016 ppNames=(char **)HeapReAlloc(hHeap,0,ppNames,sizeof(char *)*(i5+1));
1017 ppNames[i5]=pWindowInfo[i].pChildInfo[i3].IdName;
1018 i5++;
1019
1020 sprintf(buffer+i2,"Const %s=%d\r\n",pWindowInfo[i].pChildInfo[i3].IdName,i4);
1021 i2+=lstrlen(buffer+i2);
1022 i4++;
1023
1024 while(i2>65535*(size-1)){
1025 size++;
1026 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1027 }
1028 }
1029 }
1030
1031 //メニューのIDを定義
1032 ppNames=GetMenuItemConstData(ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu,&i4,ppNames,&i5,buffer,&i2);
1033
1034 HeapDefaultFree(ppNames);
1035 lstrcpy(buffer+i2,"\r\n");
1036 i2+=lstrlen(buffer+i2);
1037
1038
1039 //ハンドル変数を定義
1040 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1041 sprintf(buffer+i2,"Dim %s As HWND\r\n",pWindowInfo[i].HandleName);
1042 i2+=lstrlen(buffer+i2);
1043 sprintf(buffer+i2,"Dim hFont_%s As HFONT\r\n",pWindowInfo[i].name);
1044 i2+=lstrlen(buffer+i2);
1045 sprintf(buffer+i2,"hFont_%s=CreateFont(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\")\r\n",
1046 pWindowInfo[i].name,
1047 pWindowInfo[i].LogFont.lfHeight,
1048 pWindowInfo[i].LogFont.lfWidth,
1049 pWindowInfo[i].LogFont.lfEscapement,
1050 pWindowInfo[i].LogFont.lfOrientation,
1051 pWindowInfo[i].LogFont.lfWeight,
1052 pWindowInfo[i].LogFont.lfItalic,
1053 pWindowInfo[i].LogFont.lfUnderline,
1054 pWindowInfo[i].LogFont.lfStrikeOut,
1055 pWindowInfo[i].LogFont.lfCharSet,
1056 pWindowInfo[i].LogFont.lfOutPrecision,
1057 pWindowInfo[i].LogFont.lfClipPrecision,
1058 pWindowInfo[i].LogFont.lfQuality,
1059 pWindowInfo[i].LogFont.lfPitchAndFamily,
1060 pWindowInfo[i].LogFont.lfFaceName);
1061 i2+=lstrlen(buffer+i2);
1062
1063 while(i2>65535*(size-1)){
1064 size++;
1065 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1066 }
1067 }
1068
1069 //背景に使用するブラシを定義
1070 lstrcpy(buffer+i2,"Dim h3DFaceBrush As HBRUSH\r\n");
1071 i2+=lstrlen(buffer+i2);
1072 lstrcpy(buffer+i2,"h3DFaceBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE))\r\n");
1073 i2+=lstrlen(buffer+i2);
1074 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1075 if(pWindowInfo[i].bgColor<=0&&
1076 pWindowInfo[i].bgColor!=-(int)RGB(255,255,255)&&
1077 pWindowInfo[i].bgColor!=-(int)RGB(0,0,0)){
1078 sprintf(buffer+i2,"Dim _RadSys_hBackBrush%d As HBRUSH\r\n",i);
1079 i2+=lstrlen(buffer+i2);
1080 sprintf(buffer+i2,"_RadSys_hBackBrush%d=CreateSolidBrush(%d)\r\n",i,-pWindowInfo[i].bgColor);
1081 i2+=lstrlen(buffer+i2);
1082 }
1083 if(pWindowInfo[i].bgColor>=0x1000){
1084 sprintf(buffer+i2,"Dim _RadSys_hBackBrush%d As HBRUSH\r\n",i);
1085 i2+=lstrlen(buffer+i2);
1086 sprintf(buffer+i2,"_RadSys_hBackBrush%d=CreatePatternBrush(LoadImage(GetModuleHandle(0),%s,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_SHARED))\r\n",
1087 i,
1088 ProjectInfo.res.pBitmapResInfo[pWindowInfo[i].bgColor-0x1000].IdName);
1089 i2+=lstrlen(buffer+i2);
1090 }
1091 }
1092
1093 lstrcpy(buffer+i2,"\r\n");
1094 i2+=lstrlen(buffer+i2);
1095
1096 //イメージ ボックス用の変数を定義
1097 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1098 for(i3=0;i3<pWindowInfo[i].NumberOfChildWindows;i3++){
1099 if(pWindowInfo[i].pChildInfo[i3].Control==CT_IMAGEBOX){
1100 if((pWindowInfo[i].pChildInfo[i3].style&0x000F)==SS_ICON||
1101 (pWindowInfo[i].pChildInfo[i3].style&0x000F)==SS_BITMAP){
1102 sprintf(buffer+i2,"Dim hImage_%s_%s As HANDLE\r\n",pWindowInfo[i].name,pWindowInfo[i].pChildInfo[i3].IdName);
1103 i2+=lstrlen(buffer+i2);
1104
1105 while(i2>65535*(size-1)){
1106 size++;
1107 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1108 }
1109 }
1110 }
1111 }
1112 }
1113
1114 lstrcpy(buffer+i2,"\r\n");
1115 i2+=lstrlen(buffer+i2);
1116
1117 //メニュー作成
1118 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1119 sprintf(temporary,"hMenu_%s",ProjectInfo.pMenuInfo[i].IdName);
1120
1121 //InsertMenuItem郡
1122 i2+=GetMakeMenuCommand(ProjectInfo.pMenuInfo[i].pMenuInfo,ProjectInfo.pMenuInfo[i].NumberOfMenu,temporary,buffer+i2,1);
1123
1124 lstrcpy(buffer+i2,"\r\n");
1125 i2+=lstrlen(buffer+i2);
1126
1127 while(i2>65535*(size-1)){
1128 size++;
1129 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1130 }
1131 }
1132
1133
1134 //////////////////////////
1135 //オブジェクトの解放処理
1136 sprintf(buffer+i2,"Sub %s_DestroyObjects()\r\n",ProjectInfo.name);
1137 i2+=lstrlen(buffer+i2);
1138
1139 //メニュー解放
1140 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1141 sprintf(temporary,"hMenu_%s",ProjectInfo.pMenuInfo[i].IdName);
1142 i2+=GetDestroyMenuCommand(ProjectInfo.pMenuInfo[i].pMenuInfo,ProjectInfo.pMenuInfo[i].NumberOfMenu,temporary,buffer+i2);
1143
1144 while(i2>65535*(size-1)){
1145 size++;
1146 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1147 }
1148 }
1149
1150 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1151 //フォントハンドル解放
1152 sprintf(buffer+i2,"\tDeleteObject(hFont_%s)\r\n",ProjectInfo.pWindowInfo[i].name);
1153 i2+=lstrlen(buffer+i2);
1154
1155 while(i2>65535*(size-1)){
1156 size++;
1157 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1158 }
1159 }
1160
1161 //背景ブラシを解放
1162 lstrcpy(buffer+i2,"\tDeleteObject(h3DFaceBrush)\r\n");
1163 i2+=lstrlen(buffer+i2);
1164 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1165 if(pWindowInfo[i].bgColor<=0&&
1166 pWindowInfo[i].bgColor!=-(int)RGB(255,255,255)&&
1167 pWindowInfo[i].bgColor!=-(int)RGB(0,0,0)){
1168 sprintf(buffer+i2,"\tDeleteObject(_RadSys_hBackBrush%d)\r\n",i);
1169 i2+=lstrlen(buffer+i2);
1170 }
1171 }
1172
1173 sprintf(buffer+i2,"End Sub\r\n\r\n");
1174 i2+=lstrlen(buffer+i2);
1175
1176 //ユーザー定義のコールバック関数が存在するかどうか
1177 BOOL bAvailUserProc[MAX_WNDNUM];
1178
1179
1180 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1181 if(i!=0){
1182 lstrcpy(buffer+i2,"\r\n");
1183 i2+=lstrlen(buffer+i2);
1184 }
1185
1186 //////////////////////////
1187 //コールバック関数を生成
1188
1189 //処理メッセージを抽出
1190 ITEMEVENTINFO *pItemEventInfo;
1191 ppNames=GetProcedureNamesOfMessageCall(i,&pItemEventInfo,&i3,&bAvailUserProc[i]);
1192
1193 sprintf(buffer+i2,"Function EventCall_%s(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT\r\n",pWindowInfo[i].name);
1194 i2+=lstrlen(buffer+i2);
1195
1196 lstrcpy(buffer+i2,"\tSelect Case message\r\n");
1197 i2+=lstrlen(buffer+i2);
1198
1199 //通常メッセージ郡
1200 for(i4=0,sw1=0,sw2=0,sw3=0,sw4=0;i4<i3;i4++){
1201 i5=GetCommandByMessage(i,ppNames[i4],1,buffer+i2,"\t\t");
1202 i2+=lstrlen(buffer+i2);
1203 if(i5==WM_CREATE) sw1=1;
1204 else if(i5==WM_DESTROY) sw2=1;
1205 else if(i5==WM_CLOSE) sw3=1;
1206 else if(i5==WM_NOTIFY) sw4=1;
1207 HeapDefaultFree(ppNames[i4]);
1208 }
1209 HeapDefaultFree(ppNames);
1210
1211 //WM_CREATE、WM_DESTROY、WM_PAINTが呼び出されていない場合
1212 if(!sw1){
1213 GetCommandByMessage(i,"Create",0,buffer+i2,"\t\t");
1214 i2+=lstrlen(buffer+i2);
1215 }
1216 if(!sw2){
1217 GetCommandByMessage(i,"Destroy",0,buffer+i2,"\t\t");
1218 i2+=lstrlen(buffer+i2);
1219 }
1220 if(!sw3){
1221 GetCommandByMessage(i,"QueryClose",0,buffer+i2,"\t\t");
1222 i2+=lstrlen(buffer+i2);
1223 }
1224
1225 //アイテムメッセージ郡(WM_NOTIFY)
1226 if(pItemEventInfo[0].IdName){
1227 i3=i2;
1228 lstrcpy(buffer+i2,"\t\tCase WM_NOTIFY\r\n");
1229 i2+=lstrlen(buffer+i2);
1230 if(sw4){
1231 sprintf(buffer+i2,"\t\t\t%s_Notify(ByVal (lParam As *NMHDR))\r\n",pWindowInfo[i].name);
1232 i2+=lstrlen(buffer+i2);
1233 }
1234 lstrcpy(buffer+i2,"\t\t\tDim pnmHdr As *NMHDR\r\n");
1235 i2+=lstrlen(buffer+i2);
1236 lstrcpy(buffer+i2,"\t\t\tpnmHdr=lParam As *NMHDR\r\n");
1237 i2+=lstrlen(buffer+i2);
1238 lstrcpy(buffer+i2,"\t\t\tSelect Case LOWORD(wParam)\r\n");
1239 i2+=lstrlen(buffer+i2);
1240
1241 if(GetNotifyCommandByItemMessage(&pWindowInfo[i],pItemEventInfo,buffer+i2,"\t\t\t\t")){
1242 i2+=lstrlen(buffer+i2);
1243
1244 lstrcpy(buffer+i2,"\t\t\tEnd Select\r\n");
1245 i2+=lstrlen(buffer+i2);
1246 }
1247 else{
1248 //WM_NOTIFYを削除
1249 i2=i3;
1250 if(sw4) goto DefaultNotifyEvent;
1251 }
1252 }
1253 else if(sw4){
1254DefaultNotifyEvent:
1255 lstrcpy(buffer+i2,"\t\tCase WM_NOTIFY\r\n");
1256 i2+=lstrlen(buffer+i2);
1257 sprintf(buffer+i2,"\t\t\t%s_Notify(ByVal (lParam As *NMHDR))\r\n",pWindowInfo[i].name);
1258 i2+=lstrlen(buffer+i2);
1259 }
1260
1261 //アイテムメッセージ郡(WM_COMMAND)
1262 if(pItemEventInfo[0].IdName){
1263 lstrcpy(buffer+i2,"\t\tCase WM_COMMAND\r\n");
1264 i2+=lstrlen(buffer+i2);
1265 lstrcpy(buffer+i2,"\t\t\tSelect Case LOWORD(wParam)\r\n");
1266 i2+=lstrlen(buffer+i2);
1267
1268 //pItemEventInfoのIdName、EventNameメンバのメモリ解放はこの関数内で行う
1269 GetCommandByItemMessage(&pWindowInfo[i],pItemEventInfo,buffer+i2,"\t\t\t\t");
1270 i2+=lstrlen(buffer+i2);
1271
1272 lstrcpy(buffer+i2,"\t\t\tEnd Select\r\n");
1273 i2+=lstrlen(buffer+i2);
1274 }
1275 HeapDefaultFree(pItemEventInfo);
1276
1277 // DefWindowProc関数
1278 lstrcpy(buffer+i2,"\t\tCase Else\r\n");
1279 i2+=lstrlen(buffer+i2);
1280 sprintf(buffer+i2,"\t\t\tEventCall_%s=DefWindowProc(hWnd,message,wParam,lParam)\r\n",pWindowInfo[i].name);
1281 i2+=lstrlen(buffer+i2);
1282 lstrcpy(buffer+i2,"\t\t\tExit Function\r\n");
1283 i2+=lstrlen(buffer+i2);
1284
1285 lstrcpy(buffer+i2,"\tEnd Select\r\n");
1286 i2+=lstrlen(buffer+i2);
1287
1288 sprintf(buffer+i2,"\tEventCall_%s=0\r\n",pWindowInfo[i].name);
1289 i2+=lstrlen(buffer+i2);
1290 lstrcpy(buffer+i2,"End Function\r\n");
1291 i2+=lstrlen(buffer+i2);
1292
1293 while(i2>65535*(size-1)){
1294 size++;
1295 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1296 }
1297 }
1298
1299
1300 //////////////////////////
1301 //ダイアログボックス関連
1302
1303 //クラス登録
1304 lstrcpy(buffer+i2,"\r\nFunction DefaultCallProc(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT\r\n");
1305 i2+=lstrlen(buffer+i2);
1306 lstrcpy(buffer+i2,"\tDefaultCallProc=DefWindowProc(hWnd,message,wParam,lParam)\r\n");
1307 i2+=lstrlen(buffer+i2);
1308 lstrcpy(buffer+i2,"End Function\r\n");
1309 i2+=lstrlen(buffer+i2);
1310 lstrcpy(buffer+i2,"\r\nDim _RadSys_dlgwcl As WNDCLASSEX\r\n");
1311 i2+=lstrlen(buffer+i2);
1312 lstrcpy(buffer+i2,"FillMemory(VarPtr(_RadSys_dlgwcl),Len(_RadSys_dlgwcl),0)\r\n");
1313 i2+=lstrlen(buffer+i2);
1314 lstrcpy(buffer+i2,"_RadSys_dlgwcl.cbSize=Len(_RadSys_dlgwcl)\r\n");
1315 i2+=lstrlen(buffer+i2);
1316 lstrcpy(buffer+i2,"_RadSys_dlgwcl.hInstance=GetModuleHandle(0)\r\n");
1317 i2+=lstrlen(buffer+i2);
1318 lstrcpy(buffer+i2,"_RadSys_dlgwcl.style=CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS\r\n");
1319 i2+=lstrlen(buffer+i2);
1320 lstrcpy(buffer+i2,"_RadSys_dlgwcl.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION))\r\n");
1321 i2+=lstrlen(buffer+i2);
1322 lstrcpy(buffer+i2,"_RadSys_dlgwcl.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(IDI_WINLOGO))\r\n");
1323 i2+=lstrlen(buffer+i2);
1324 lstrcpy(buffer+i2,"_RadSys_dlgwcl.hCursor=LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW))\r\n");
1325 i2+=lstrlen(buffer+i2);
1326 lstrcpy(buffer+i2,"_RadSys_dlgwcl.lpszClassName=\"NORMALDLG\"\r\n");
1327 i2+=lstrlen(buffer+i2);
1328 lstrcpy(buffer+i2,"_RadSys_dlgwcl.hbrBackground=h3DFaceBrush\r\n");
1329 i2+=lstrlen(buffer+i2);
1330 lstrcpy(buffer+i2,"_RadSys_dlgwcl.lpfnWndProc=AddressOf(DefaultCallProc)\r\n");
1331 i2+=lstrlen(buffer+i2);
1332 lstrcpy(buffer+i2,"RegisterClassEx(_RadSys_dlgwcl)\r\n");
1333 i2+=lstrlen(buffer+i2);
1334
1335 //DialogBox関数
1336 lstrcpy(buffer+i2,"\r\nFunction DialogBox(hOwnerWnd As HWND, TemplateName As LPSTR) As LONG_PTR\r\n");
1337 i2+=lstrlen(buffer+i2);
1338 lstrcpy(buffer+i2,"\tDim hDlg As HWND\r\n");
1339 i2+=lstrlen(buffer+i2);
1340 for(i=0,sw1=0;i<ProjectInfo.NumberOfWindows;i++){
1341 if(pWindowInfo[i].type==WNDTYPE_MODALDLG){
1342 if(sw1==0){
1343 sprintf(buffer+i2,"\tIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo[i].name);
1344 i2+=lstrlen(buffer+i2);
1345 sw1=1;
1346 }
1347 else{
1348 sprintf(buffer+i2,"\tElseIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo[i].name);
1349 i2+=lstrlen(buffer+i2);
1350 }
1351 sprintf(buffer+i2,"\t\t%s=CreateWindowEx(&H%08x,\"NORMALDLG\",\"%s\",&H%08x,%d,%d,%d,%d,hOwnerWnd,%d As HMENU,GetModuleHandle(0),0)\r\n",
1352 pWindowInfo[i].HandleName,
1353 pWindowInfo[i].ExStyle,
1354 pWindowInfo[i].caption,
1355 pWindowInfo[i].style,
1356 pWindowInfo[i].pos.x,
1357 pWindowInfo[i].pos.y,
1358 pWindowInfo[i].size.cx,
1359 pWindowInfo[i].size.cy,
1360 pWindowInfo[i].id);
1361 i2+=lstrlen(buffer+i2);
1362 sprintf(buffer+i2,"\t\thDlg=%s\r\n",
1363 pWindowInfo[i].HandleName);
1364 i2+=lstrlen(buffer+i2);
1365 if(bAvailUserProc[i]){
1366 sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(%s) As LONG_PTR)\r\n",
1367 pWindowInfo[i].HandleName,
1368 pWindowInfo[i].CallBackName);
1369 }
1370 else{
1371 sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(EventCall_%s) As LONG_PTR)\r\n",
1372 pWindowInfo[i].HandleName,
1373 pWindowInfo[i].name);
1374 }
1375 i2+=lstrlen(buffer+i2);
1376 sprintf(buffer+i2,"\t\tSendMessage(%s,WM_INITDIALOG,0,0)\r\n",pWindowInfo[i].HandleName);
1377 i2+=lstrlen(buffer+i2);
1378 if(pWindowInfo[i].IconResName){
1379 sprintf(buffer+i2,"\t\tSendMessage(%s,WM_SETICON,ICON_SMALL,LoadIcon(GetModuleHandle(0),MAKEINTRESOURCE(%s)) As LPARAM)\r\n",pWindowInfo[i].HandleName,pWindowInfo[i].IconResName);
1380 i2+=lstrlen(buffer+i2);
1381 }
1382 sprintf(buffer+i2,"\t\tShowWindow(%s,SW_SHOW)\r\n",pWindowInfo[i].HandleName);
1383 i2+=lstrlen(buffer+i2);
1384 }
1385 while(i2>65535*(size-1)){
1386 size++;
1387 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1388 }
1389 }
1390 if(sw1){
1391 lstrcpy(buffer+i2,"\tElse\r\n");
1392 i2+=lstrlen(buffer+i2);
1393 lstrcpy(buffer+i2,"\t\tExit Function\r\n");
1394 i2+=lstrlen(buffer+i2);
1395 lstrcpy(buffer+i2,"\tEnd If\r\n");
1396 i2+=lstrlen(buffer+i2);
1397 lstrcpy(buffer+i2,"\tEnableWindow(hOwnerWnd,0)\r\n\r\n");
1398 i2+=lstrlen(buffer+i2);
1399 lstrcpy(buffer+i2,"\tDim msg As MSG, iResult As Long\r\n");
1400 i2+=lstrlen(buffer+i2);
1401 lstrcpy(buffer+i2,"\tDo\r\n");
1402 i2+=lstrlen(buffer+i2);
1403 lstrcpy(buffer+i2,"\t\tiResult=GetMessage(msg,0,0,0)\r\n");
1404 i2+=lstrlen(buffer+i2);
1405 lstrcpy(buffer+i2,"\t\tIf iResult=0 or iResult=-1 Then Exit Do\r\n");
1406 i2+=lstrlen(buffer+i2);
1407 lstrcpy(buffer+i2,"\t\tIf IsDialogMessage(hDlg,msg) Then Continue\r\n");
1408 i2+=lstrlen(buffer+i2);
1409 lstrcpy(buffer+i2,"\t\tTranslateMessage(msg)\r\n");
1410 i2+=lstrlen(buffer+i2);
1411 lstrcpy(buffer+i2,"\t\tDispatchMessage(msg)\r\n");
1412 i2+=lstrlen(buffer+i2);
1413 lstrcpy(buffer+i2,"\tLoop\r\n");
1414 i2+=lstrlen(buffer+i2);
1415 lstrcpy(buffer+i2,"\tDialogBox=msg.wParam\r\n");
1416 i2+=lstrlen(buffer+i2);
1417 }
1418 lstrcpy(buffer+i2,"End Function\r\n");
1419 i2+=lstrlen(buffer+i2);
1420
1421 //EndDialog関数
1422 lstrcpy(buffer+i2,"Sub EndDialog(hWnd As HWND, lResult As Long)\r\n");
1423 i2+=lstrlen(buffer+i2);
1424 lstrcpy(buffer+i2,"\tEnableWindow(GetWindow(hWnd,GW_OWNER),1)\r\n");
1425 i2+=lstrlen(buffer+i2);
1426 lstrcpy(buffer+i2,"\tDestroyWindow(hWnd)\r\n");
1427 i2+=lstrlen(buffer+i2);
1428 lstrcpy(buffer+i2,"\tPostMessage(0,WM_QUIT,lResult,0)\r\n");
1429 i2+=lstrlen(buffer+i2);
1430 lstrcpy(buffer+i2,"End Sub\r\n");
1431 i2+=lstrlen(buffer+i2);
1432
1433 //CreateDialog関数
1434 lstrcpy(buffer+i2,"\r\nFunction CreateDialog(hOwnerWnd As HWND, TemplateName As LPSTR) As HWND\r\n");
1435 i2+=lstrlen(buffer+i2);
1436 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1437 if(pWindowInfo[i].type==WNDTYPE_MODELESSDLG){
1438 sprintf(buffer+i2,"\tIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo[i].name);
1439 i2+=lstrlen(buffer+i2);
1440
1441 sprintf(buffer+i2,"\t\t%s=CreateWindowEx(&H%08x,\"NORMALDLG\",\"%s\",&H%08x,%d,%d,%d,%d,hOwnerWnd,%d As HMENU,GetModuleHandle(0),0)\r\n",
1442 pWindowInfo[i].HandleName,
1443 pWindowInfo[i].ExStyle,
1444 pWindowInfo[i].caption,
1445 pWindowInfo[i].style,
1446 pWindowInfo[i].pos.x,
1447 pWindowInfo[i].pos.y,
1448 pWindowInfo[i].size.cx,
1449 pWindowInfo[i].size.cy,
1450 pWindowInfo[i].id);
1451 i2+=lstrlen(buffer+i2);
1452 sprintf(buffer+i2,"\t\tCreateDialog=%s\r\n",pWindowInfo[i].HandleName);
1453 i2+=lstrlen(buffer+i2);
1454 if(bAvailUserProc[i]){
1455 sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(%s) As LONG_PTR)\r\n",
1456 pWindowInfo[i].HandleName,
1457 pWindowInfo[i].CallBackName);
1458 }
1459 else{
1460 sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(EventCall_%s) As LONG_PTR)\r\n",
1461 pWindowInfo[i].HandleName,
1462 pWindowInfo[i].name);
1463 }
1464 i2+=lstrlen(buffer+i2);
1465 sprintf(buffer+i2,"\t\tSendMessage(%s,WM_INITDIALOG,0,0)\r\n",pWindowInfo[i].HandleName);
1466 i2+=lstrlen(buffer+i2);
1467 if(pWindowInfo[i].IconResName){
1468 sprintf(buffer+i2,"\t\tSendMessage(%s,WM_SETICON,ICON_SMALL,LoadIcon(GetModuleHandle(0),MAKEINTRESOURCE(%s)) As LPARAM)\r\n",pWindowInfo[i].HandleName,pWindowInfo[i].IconResName);
1469 i2+=lstrlen(buffer+i2);
1470 }
1471 sprintf(buffer+i2,"\tEnd If\r\n",pWindowInfo[i].name);
1472 i2+=lstrlen(buffer+i2);
1473 }
1474 while(i2>65535*(size-1)){
1475 size++;
1476 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1477 }
1478 }
1479 lstrcpy(buffer+i2,"End Function\r\n");
1480 i2+=lstrlen(buffer+i2);
1481
1482
1483 ///////////////////////
1484 // 保存(Callback.wbp)
1485 sprintf(temporary,"%sCallback.wbp",ProjectInfo.dir);
1486 WriteBuffer(temporary,buffer,i2);
1487
1488
1489
1490 lstrcpy(buffer,"'このファイルはウィンドウ定義ファイル(*.wnd)をもとに生成されています\r\n\r\n");
1491 i2=lstrlen(buffer);
1492
1493 lstrcpy(buffer+i2,"Dim _RadSys_wcl As WNDCLASSEX\r\n");
1494 i2+=lstrlen(buffer+i2);
1495 lstrcpy(buffer+i2,"FillMemory(VarPtr(_RadSys_wcl),Len(_RadSys_wcl),0)\r\n");
1496 i2+=lstrlen(buffer+i2);
1497 lstrcpy(buffer+i2,"_RadSys_wcl.cbSize=Len(_RadSys_wcl)\r\n");
1498 i2+=lstrlen(buffer+i2);
1499 lstrcpy(buffer+i2,"_RadSys_wcl.hInstance=GetModuleHandle(0)\r\n");
1500 i2+=lstrlen(buffer+i2);
1501 lstrcpy(buffer+i2,"_RadSys_wcl.style=CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS\r\n");
1502 i2+=lstrlen(buffer+i2);
1503 lstrcpy(buffer+i2,"_RadSys_wcl.hCursor=LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW))\r\n");
1504 i2+=lstrlen(buffer+i2);
1505
1506 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1507 if(pWindowInfo[i].type==WNDTYPE_DEFAULT){
1508 //////////////////////
1509 //通常ウィンドウ作成
1510
1511 lstrcpy(buffer+i2,"\r\n");
1512 i2+=2;
1513
1514 if(pWindowInfo[i].IconResName==0){
1515 lstrcpy(buffer+i2,"_RadSys_wcl.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION))\r\n");
1516 i2+=lstrlen(buffer+i2);
1517 lstrcpy(buffer+i2,"_RadSys_wcl.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(IDI_WINLOGO))\r\n");
1518 i2+=lstrlen(buffer+i2);
1519 }
1520 else{
1521 sprintf(buffer+i2,"_RadSys_wcl.hIcon=LoadIcon(_RadSys_wcl.hInstance,MAKEINTRESOURCE(%s))\r\n",pWindowInfo[i].IconResName);
1522 i2+=lstrlen(buffer+i2);
1523 sprintf(buffer+i2,"_RadSys_wcl.hIconSm=LoadIcon(_RadSys_wcl.hInstance,MAKEINTRESOURCE(%s))\r\n",pWindowInfo[i].IconResName);
1524 i2+=lstrlen(buffer+i2);
1525 }
1526
1527 sprintf(buffer+i2,"_RadSys_wcl.lpszClassName=\"NORMAL%d\"\r\n",i);
1528 i2+=lstrlen(buffer+i2);
1529 if(bAvailUserProc[i])
1530 sprintf(buffer+i2,"_RadSys_wcl.lpfnWndProc=AddressOf(%s)\r\n",pWindowInfo[i].CallBackName);
1531 else sprintf(buffer+i2,"_RadSys_wcl.lpfnWndProc=AddressOf(EventCall_%s)\r\n",pWindowInfo[i].name);
1532 i2+=lstrlen(buffer+i2);
1533 if(pWindowInfo[i].bgColor==COLOR_3DFACE)
1534 lstrcpy(buffer+i2,"_RadSys_wcl.hbrBackground=h3DFaceBrush\r\n");
1535 else if(pWindowInfo[i].bgColor==-(int)RGB(255,255,255))
1536 lstrcpy(buffer+i2,"_RadSys_wcl.hbrBackground=GetStockObject(WHITE_BRUSH)\r\n");
1537 else if(pWindowInfo[i].bgColor==-(int)RGB(0,0,0))
1538 lstrcpy(buffer+i2,"_RadSys_wcl.hbrBackground=GetStockObject(BLACK_BRUSH)\r\n");
1539 else if(pWindowInfo[i].bgColor<=0||
1540 pWindowInfo[i].bgColor>=0x1000){
1541 //色指定またはビットマップ
1542 sprintf(buffer+i2,"_RadSys_wcl.hbrBackground=_RadSys_hBackBrush%d\r\n",i);
1543 }
1544 i2+=lstrlen(buffer+i2);
1545 lstrcpy(buffer+i2,"RegisterClassEx(_RadSys_wcl)\r\n");
1546 i2+=lstrlen(buffer+i2);
1547 sprintf(buffer+i2,"CreateWindowEx(&H%08x,\"%s%d\",\"%s\",&H%08x,%d,%d,%d,%d,0,0,GetModuleHandle(0),0)\r\n",
1548 pWindowInfo[i].ExStyle,
1549 pWindowInfo[i].ClassName,i,
1550 pWindowInfo[i].caption,
1551 pWindowInfo[i].style,
1552 pWindowInfo[i].pos.x,
1553 pWindowInfo[i].pos.y,
1554 pWindowInfo[i].size.cx,
1555 pWindowInfo[i].size.cy);
1556 i2+=lstrlen(buffer+i2);
1557 }
1558
1559 while(i2>65535*(size-1)){
1560 size++;
1561 buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
1562 }
1563 }
1564
1565
1566 /////////////////////////
1567 // 保存(MakeWindow.wbp)
1568 sprintf(temporary,"%sMakeWindow.wbp",ProjectInfo.dir);
1569 WriteBuffer(temporary,buffer,i2);
1570 HeapDefaultFree(buffer);
1571}
1572int GetSaveMenuData(char *buffer,int SpaceNum,MENU_INFO *pMenuInfo,int ItemNum){
1573 int i,i2;
1574 char spaces[MAX_PATH];
1575
1576 memset(spaces,' ',SpaceNum*4);
1577 spaces[SpaceNum*4]=0;
1578
1579 for(i=0,i2=0;i<ItemNum;i++){
1580 if(pMenuInfo[i].pMenuInfo){
1581 sprintf(buffer+i2,"%sPOPUP = \"%s\",%d\r\n",spaces,pMenuInfo[i].caption,pMenuInfo[i].state);
1582 i2+=lstrlen(buffer+i2);
1583 i2+=GetSaveMenuData(buffer+i2,SpaceNum+1,pMenuInfo[i].pMenuInfo,pMenuInfo[i].NumberOfMenu);
1584 sprintf(buffer+i2,"%sEND\r\n",spaces);
1585 i2+=lstrlen(buffer+i2);
1586 }
1587 else if(pMenuInfo[i].type==MFT_STRING){
1588 sprintf(buffer+i2,"%sITEM = %s,\"%s\",%d\r\n",spaces,pMenuInfo[i].IdName,pMenuInfo[i].caption,pMenuInfo[i].state);
1589 i2+=lstrlen(buffer+i2);
1590 }
1591 else if(pMenuInfo[i].type==MFT_SEPARATOR){
1592 sprintf(buffer+i2,"%sSEPARATOR\r\n",spaces);
1593 i2+=lstrlen(buffer+i2);
1594 }
1595 }
1596 return i2;
1597}
1598void SaveWindowFile(char *path,WINDOW_INFO *pWindowInfo,int NumberOfWindowInfo){
1599 extern HANDLE hHeap;
1600 extern MDIINFO MdiInfo[MAX_WNDNUM];
1601 extern PROJECTINFO ProjectInfo;
1602 int i,i2,i3,size;
1603 char *buffer,*temporary;
1604
1605 size=2;
1606 buffer=(char *)HeapAlloc(hHeap,0,GENERAL_SIZE*size);
1607 for(i=0,i2=0;i<NumberOfWindowInfo;i++){
1608 sprintf(buffer+i2,"WINDOW:%s\r\n",pWindowInfo[i].name);
1609 i2+=lstrlen(buffer+i2);
1610 sprintf(buffer+i2," HANDLE = %s\r\n",pWindowInfo[i].HandleName);
1611 i2+=lstrlen(buffer+i2);
1612 sprintf(buffer+i2," POINT = %d,%d\r\n",pWindowInfo[i].pos.x,pWindowInfo[i].pos.y);
1613 i2+=lstrlen(buffer+i2);
1614 sprintf(buffer+i2," SIZE = %d,%d\r\n",pWindowInfo[i].size.cx,pWindowInfo[i].size.cy);
1615 i2+=lstrlen(buffer+i2);
1616 sprintf(buffer+i2," CAPTION = \"%s\"\r\n",pWindowInfo[i].caption);
1617 i2+=lstrlen(buffer+i2);
1618 sprintf(buffer+i2," STYLE = &H%08x\r\n",pWindowInfo[i].style);
1619 i2+=lstrlen(buffer+i2);
1620 sprintf(buffer+i2," EXSTYLE = &H%08x\r\n",pWindowInfo[i].ExStyle);
1621 i2+=lstrlen(buffer+i2);
1622 if(pWindowInfo[i].MenuID){
1623 sprintf(buffer+i2," MENUID = %s\r\n",pWindowInfo[i].MenuID);
1624 i2+=lstrlen(buffer+i2);
1625 }
1626 sprintf(buffer+i2," ID = %d\r\n",pWindowInfo[i].id);
1627 i2+=lstrlen(buffer+i2);
1628 sprintf(buffer+i2," BGCOLOR = %d\r\n",pWindowInfo[i].bgColor);
1629 i2+=lstrlen(buffer+i2);
1630 sprintf(buffer+i2," FONT = %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\"\r\n",
1631 pWindowInfo[i].LogFont.lfHeight,
1632 pWindowInfo[i].LogFont.lfWidth,
1633 pWindowInfo[i].LogFont.lfEscapement,
1634 pWindowInfo[i].LogFont.lfOrientation,
1635 pWindowInfo[i].LogFont.lfWeight,
1636 pWindowInfo[i].LogFont.lfItalic,
1637 pWindowInfo[i].LogFont.lfUnderline,
1638 pWindowInfo[i].LogFont.lfStrikeOut,
1639 pWindowInfo[i].LogFont.lfCharSet,
1640 pWindowInfo[i].LogFont.lfOutPrecision,
1641 pWindowInfo[i].LogFont.lfClipPrecision,
1642 pWindowInfo[i].LogFont.lfQuality,
1643 pWindowInfo[i].LogFont.lfPitchAndFamily,
1644 pWindowInfo[i].LogFont.lfFaceName);
1645 i2+=lstrlen(buffer+i2);
1646 if(pWindowInfo[i].IconResName){
1647 sprintf(buffer+i2," ICONID = %s\r\n",pWindowInfo[i].IconResName);
1648 i2+=lstrlen(buffer+i2);
1649 }
1650 sprintf(buffer+i2," CLASS = \"%s\"\r\n",pWindowInfo[i].ClassName);
1651 i2+=lstrlen(buffer+i2);
1652 sprintf(buffer+i2," CALLBACK = %s\r\n",pWindowInfo[i].CallBackName);
1653 i2+=lstrlen(buffer+i2);
1654 sprintf(buffer+i2," TYPE = %d\r\n",pWindowInfo[i].type);
1655 i2+=lstrlen(buffer+i2);
1656 sprintf(buffer+i2," FILEPATH = %s\r\n",pWindowInfo[i].filepath);
1657 i2+=lstrlen(buffer+i2);
1658 for(i3=0;i3<pWindowInfo[i].NumberOfChildWindows;i3++){
1659 temporary=SetCaptionSequence(pWindowInfo[i].pChildInfo[i3].caption);
1660 sprintf(buffer+i2," ITEM = %s,%d,%d,%d,%d,\"%s\",&H%08x,&H%08x,%d",
1661 pWindowInfo[i].pChildInfo[i3].IdName,
1662 pWindowInfo[i].pChildInfo[i3].pos.x,pWindowInfo[i].pChildInfo[i3].pos.y,
1663 pWindowInfo[i].pChildInfo[i3].size.cx,pWindowInfo[i].pChildInfo[i3].size.cy,
1664 temporary,
1665 pWindowInfo[i].pChildInfo[i3].style,
1666 pWindowInfo[i].pChildInfo[i3].ExStyle,
1667 pWindowInfo[i].pChildInfo[i3].Control
1668 );
1669 i2+=lstrlen(buffer+i2);
1670 HeapDefaultFree(temporary);
1671 if(pWindowInfo[i].pChildInfo[i3].Control==CT_IMAGEBOX){
1672 sprintf(buffer+i2,",%d,\"%s\"",pWindowInfo[i].pChildInfo[i3].ImageCtrlInfo.type,pWindowInfo[i].pChildInfo[i3].ImageCtrlInfo.path);
1673 i2+=lstrlen(buffer+i2);
1674 }
1675 lstrcpy(buffer+i2,"\r\n");
1676 i2+=lstrlen(buffer+i2);
1677 if(i2-GENERAL_SIZE<GENERAL_SIZE){
1678 size++;
1679 buffer=(char *)HeapReAlloc(hHeap,0,buffer,GENERAL_SIZE*size);
1680 }
1681 }
1682 sprintf(buffer+i2,"END\r\n",pWindowInfo[i].name);
1683 i2+=lstrlen(buffer+i2);
1684 if(i2-GENERAL_SIZE<GENERAL_SIZE){
1685 size++;
1686 buffer=(char *)HeapReAlloc(hHeap,0,buffer,GENERAL_SIZE*size);
1687 }
1688 }
1689 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1690 sprintf(buffer+i2,"MENU:%s\r\n",ProjectInfo.pMenuInfo[i].IdName);
1691 i2+=lstrlen(buffer+i2);
1692 i2+=GetSaveMenuData(buffer+i2,1,ProjectInfo.pMenuInfo[i].pMenuInfo,ProjectInfo.pMenuInfo[i].NumberOfMenu);
1693 sprintf(buffer+i2,"END\r\n",pWindowInfo[i].name);
1694 i2+=lstrlen(buffer+i2);
1695 if(i2-GENERAL_SIZE<GENERAL_SIZE){
1696 size++;
1697 buffer=(char *)HeapReAlloc(hHeap,0,buffer,GENERAL_SIZE*size);
1698 }
1699 }
1700 WriteBuffer(path,buffer,i2);
1701 HeapDefaultFree(buffer);
1702
1703 extern PROJECTINFO ProjectInfo;
1704 ProjectInfo.ModifyOfMaterial=0;
1705}
1706
1707MENU_INFO *GetMenuData(char *buffer,int *pPos,int *pMenuNum){
1708 extern HANDLE hHeap;
1709 int i,i2,i3,i4;
1710 char temporary[MAX_PATH],*temp2,temp3[MAX_PATH];
1711 MENU_INFO *pMenuInfo;
1712
1713 temp2=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+1);
1714
1715 *pMenuNum=0;
1716 pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1717
1718 for(i=*pPos;;i++){
1719 if(buffer[i]=='\0') return 0;
1720 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||i==0){
1721 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i+=2;
1722 for(i2=0;;i++,i2++){
1723 if(!IsVariableChar(buffer[i])){
1724 temporary[i2]=0;
1725 break;
1726 }
1727 temporary[i2]=buffer[i];
1728 }
1729 if(i2==0){
1730 i--;
1731 continue;
1732 }
1733 if(buffer[i]=='='){
1734 for(i++,i2=0;;i++,i2++){
1735 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1736 temp2[i2]=0;
1737 break;
1738 }
1739 temp2[i2]=buffer[i];
1740 }
1741 }
1742 else{
1743 temp2[0]=0;
1744 i2=0;
1745 }
1746
1747
1748 if(lstrcmpi(temporary,"POPUP")==0){
1749 (*pMenuNum)++;
1750 pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pMenuInfo,(*pMenuNum)*sizeof(MENU_INFO));
1751 i3=*pMenuNum-1;
1752
1753 i4=GetOneParameter(temp2,0,temp3);
1754 RemoveStringQuotes(temp3);
1755 pMenuInfo[i3].caption=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
1756 lstrcpy(pMenuInfo[i3].caption,temp3);
1757
1758 i4=GetOneParameter(temp2,i4,temp3);
1759 pMenuInfo[i3].state=GetValue(temp3);
1760
1761 pMenuInfo[i3].pMenuInfo=GetMenuData(buffer,&i,&pMenuInfo[i3].NumberOfMenu);
1762 }
1763 else if(lstrcmpi(temporary,"ITEM")==0){
1764 (*pMenuNum)++;
1765 pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pMenuInfo,(*pMenuNum)*sizeof(MENU_INFO));
1766 i3=*pMenuNum-1;
1767
1768 i4=GetOneParameter(temp2,0,temp3);
1769 pMenuInfo[i3].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
1770 lstrcpy(pMenuInfo[i3].IdName,temp3);
1771
1772 i4=GetOneParameter(temp2,i4,temp3);
1773 RemoveStringQuotes(temp3);
1774 pMenuInfo[i3].caption=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
1775 lstrcpy(pMenuInfo[i3].caption,temp3);
1776
1777 i4=GetOneParameter(temp2,i4,temp3);
1778 pMenuInfo[i3].state=GetValue(temp3);
1779
1780 pMenuInfo[i3].type=0;
1781 }
1782 else if(lstrcmpi(temporary,"SEPARATOR")==0){
1783 (*pMenuNum)++;
1784 pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pMenuInfo,(*pMenuNum)*sizeof(MENU_INFO));
1785 i3=*pMenuNum-1;
1786
1787 pMenuInfo[i3].type=MFT_SEPARATOR;
1788 }
1789 else if(lstrcmpi(temporary,"END")==0) break;
1790 i--;
1791 }
1792 }
1793 *pPos=i;
1794
1795 HeapDefaultFree(temp2);
1796
1797 return pMenuInfo;
1798}
1799_int8 OpenWindowFile(char *path){
1800 extern HANDLE hHeap;
1801 extern PROJECTINFO ProjectInfo;
1802 int i,i2,i3,i4,i5;
1803 char *buffer,temporary[MAX_PATH],*temp2,temp3[MAX_PATH];
1804 CHILDINFO *pChildInfo;
1805
1806 buffer=ReadBuffer(path);
1807 if(!buffer) return 0;
1808 temp2=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+1);
1809 ChangeOrSignToDivision(temp2,buffer);
1810 KillSpaces(temp2,buffer);
1811 //temp2はこの後の処理の一時保存バッファにも利用するので解放しない
1812
1813 ProjectInfo.NumberOfMenu=0;
1814 ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1815
1816 ProjectInfo.NumberOfWindows=0;
1817 ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapAlloc(hHeap,0,1);
1818
1819 for(i=0,i3=0;;i++){
1820 if(buffer[i]=='\0') break;
1821 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||i==0){
1822 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i+=2;
1823 for(i2=0;;i++,i2++){
1824 if(!IsVariableChar(buffer[i])){
1825 temporary[i2]=0;
1826 break;
1827 }
1828 temporary[i2]=buffer[i];
1829 }
1830 if(i2==0){
1831 i--;
1832 continue;
1833 }
1834 if(buffer[i]==':'||buffer[i]=='='){
1835 for(i++,i2=0;;i++,i2++){
1836 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1837 temp2[i2]=0;
1838 break;
1839 }
1840 temp2[i2]=buffer[i];
1841 }
1842 }
1843 else{
1844 temp2[0]=0;
1845 i2=0;
1846 }
1847
1848
1849 //////////////
1850 //ウィンドウ
1851 if(lstrcmpi(temporary,"WINDOW")==0&&i3==0){
1852 ProjectInfo.NumberOfWindows++;
1853 ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows*sizeof(WINDOW_INFO));
1854 i4=ProjectInfo.NumberOfWindows-1;
1855 i3=1;
1856
1857 ProjectInfo.pWindowInfo[i4].name=(char *)HeapAlloc(hHeap,0,i2+1);
1858 lstrcpy(ProjectInfo.pWindowInfo[i4].name,temp2);
1859
1860 ProjectInfo.pWindowInfo[i4].NumberOfChildWindows=0;
1861 ProjectInfo.pWindowInfo[i4].pChildInfo=(CHILDINFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1862 }
1863 else if(lstrcmpi(temporary,"HANDLE")==0&&i3==1){
1864 ProjectInfo.pWindowInfo[i4].HandleName=(char *)HeapAlloc(hHeap,0,i2+1);
1865 lstrcpy(ProjectInfo.pWindowInfo[i4].HandleName,temp2);
1866 }
1867 else if(lstrcmpi(temporary,"POINT")==0&&i3==1){
1868 sscanf(temp2,"%d,%d",
1869 &ProjectInfo.pWindowInfo[i4].pos.x,
1870 &ProjectInfo.pWindowInfo[i4].pos.y);
1871 if(ProjectInfo.pWindowInfo[i4].pos.x==-1) ProjectInfo.pWindowInfo[i4].pos.x=CW_USEDEFAULT;
1872 if(ProjectInfo.pWindowInfo[i4].pos.y==-1) ProjectInfo.pWindowInfo[i4].pos.y=CW_USEDEFAULT;
1873 }
1874 else if(lstrcmpi(temporary,"SIZE")==0&&i3==1){
1875 sscanf(temp2,"%d,%d",
1876 &ProjectInfo.pWindowInfo[i4].size.cx,
1877 &ProjectInfo.pWindowInfo[i4].size.cy);
1878 }
1879 else if(lstrcmpi(temporary,"CAPTION")==0&&i3==1){
1880 if(temp2[0]=='\"'&&temp2[lstrlen(temp2)-1]=='\"'){
1881 temp2[lstrlen(temp2)-1]=0;
1882 ProjectInfo.pWindowInfo[i4].caption=(char *)HeapAlloc(hHeap,0,i2+1);
1883 lstrcpy(ProjectInfo.pWindowInfo[i4].caption,temp2+1);
1884 }
1885 }
1886 else if(lstrcmpi(temporary,"STYLE")==0&&i3==1) ProjectInfo.pWindowInfo[i4].style=GetValue(temp2);
1887 else if(lstrcmpi(temporary,"EXSTYLE")==0&&i3==1) ProjectInfo.pWindowInfo[i4].ExStyle=GetValue(temp2);
1888 else if(lstrcmpi(temporary,"MENUID")==0&&i3==1){
1889 ProjectInfo.pWindowInfo[i4].MenuID=(char *)HeapAlloc(hHeap,0,i2+1);
1890 lstrcpy(ProjectInfo.pWindowInfo[i4].MenuID,temp2);
1891 }
1892 else if(lstrcmpi(temporary,"ID")==0&&i3==1) ProjectInfo.pWindowInfo[i4].id=GetValue(temp2);
1893 else if(lstrcmpi(temporary,"BGCOLOR")==0&&i3==1){
1894 ProjectInfo.pWindowInfo[i4].bgColor=GetValue(temp2);
1895 if(ProjectInfo.dwVersion<=3){
1896 //プロジェクトバージョンが3以前のときは新値に変換する
1897 if(ProjectInfo.pWindowInfo[i4].bgColor==-1)
1898 ProjectInfo.pWindowInfo[i4].bgColor=-(int)RGB(255,255,255);
1899 }
1900 }
1901 else if(lstrcmpi(temporary,"FONT")==0&&i3==1){
1902 i5=GetOneParameter(temp2,0,temp3);
1903 ProjectInfo.pWindowInfo[i4].LogFont.lfHeight=GetValue(temp3);
1904
1905 i5=GetOneParameter(temp2,i5,temp3);
1906 ProjectInfo.pWindowInfo[i4].LogFont.lfWidth=GetValue(temp3);
1907
1908 i5=GetOneParameter(temp2,i5,temp3);
1909 ProjectInfo.pWindowInfo[i4].LogFont.lfEscapement=GetValue(temp3);
1910
1911 i5=GetOneParameter(temp2,i5,temp3);
1912 ProjectInfo.pWindowInfo[i4].LogFont.lfOrientation=GetValue(temp3);
1913
1914 i5=GetOneParameter(temp2,i5,temp3);
1915 ProjectInfo.pWindowInfo[i4].LogFont.lfWeight=GetValue(temp3);
1916
1917 i5=GetOneParameter(temp2,i5,temp3);
1918 ProjectInfo.pWindowInfo[i4].LogFont.lfItalic=(BYTE)GetValue(temp3);
1919
1920 i5=GetOneParameter(temp2,i5,temp3);
1921 ProjectInfo.pWindowInfo[i4].LogFont.lfUnderline=(BYTE)GetValue(temp3);
1922
1923 i5=GetOneParameter(temp2,i5,temp3);
1924 ProjectInfo.pWindowInfo[i4].LogFont.lfStrikeOut=(BYTE)GetValue(temp3);
1925
1926 i5=GetOneParameter(temp2,i5,temp3);
1927 ProjectInfo.pWindowInfo[i4].LogFont.lfCharSet=(BYTE)GetValue(temp3);
1928
1929 i5=GetOneParameter(temp2,i5,temp3);
1930 ProjectInfo.pWindowInfo[i4].LogFont.lfOutPrecision=(BYTE)GetValue(temp3);
1931
1932 i5=GetOneParameter(temp2,i5,temp3);
1933 ProjectInfo.pWindowInfo[i4].LogFont.lfClipPrecision=(BYTE)GetValue(temp3);
1934
1935 i5=GetOneParameter(temp2,i5,temp3);
1936 ProjectInfo.pWindowInfo[i4].LogFont.lfQuality=(BYTE)GetValue(temp3);
1937
1938 i5=GetOneParameter(temp2,i5,temp3);
1939 ProjectInfo.pWindowInfo[i4].LogFont.lfPitchAndFamily=(BYTE)GetValue(temp3);
1940
1941 i5=GetOneParameter(temp2,i5,temp3);
1942 RemoveStringQuotes(temp3);
1943 lstrcpy(ProjectInfo.pWindowInfo[i4].LogFont.lfFaceName,temp3);
1944 }
1945 else if(lstrcmpi(temporary,"ICONID")==0&&i3==1){
1946 ProjectInfo.pWindowInfo[i4].IconResName=(char *)HeapAlloc(hHeap,0,i2+1);
1947 lstrcpy(ProjectInfo.pWindowInfo[i4].IconResName,temp2);
1948 }
1949 else if(lstrcmpi(temporary,"CLASS")==0&&i3==1){
1950 if(temp2[0]=='\"'&&temp2[lstrlen(temp2)-1]=='\"'){
1951 temp2[lstrlen(temp2)-1]=0;
1952 ProjectInfo.pWindowInfo[i4].ClassName=(char *)HeapAlloc(hHeap,0,i2+1);
1953 lstrcpy(ProjectInfo.pWindowInfo[i4].ClassName,temp2+1);
1954 }
1955 }
1956 else if(lstrcmpi(temporary,"CALLBACK")==0&&i3==1){
1957 ProjectInfo.pWindowInfo[i4].CallBackName=(char *)HeapAlloc(hHeap,0,i2+1);
1958 lstrcpy(ProjectInfo.pWindowInfo[i4].CallBackName,temp2);
1959 }
1960
1961 //以前のバージョンとの互換用
1962 else if(lstrcmpi(temporary,"DLGTMP")==0&&i3==1) ProjectInfo.pWindowInfo[i4].type=GetValue(temp2);
1963
1964 else if(lstrcmpi(temporary,"TYPE")==0&&i3==1) ProjectInfo.pWindowInfo[i4].type=GetValue(temp2);
1965 else if(lstrcmpi(temporary,"FILEPATH")==0&&i3==1){
1966 ProjectInfo.pWindowInfo[i4].filepath=(char *)HeapAlloc(hHeap,0,i2+1);
1967 lstrcpy(ProjectInfo.pWindowInfo[i4].filepath,temp2);
1968 }
1969 else if(lstrcmpi(temporary,"ITEM")==0&&i3==1){
1970 ProjectInfo.pWindowInfo[i4].pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pWindowInfo[i4].pChildInfo,(ProjectInfo.pWindowInfo[i4].NumberOfChildWindows+1)*sizeof(CHILDINFO));
1971 pChildInfo=&ProjectInfo.pWindowInfo[i4].pChildInfo[ProjectInfo.pWindowInfo[i4].NumberOfChildWindows];
1972
1973 //ID
1974 i5=GetOneParameter(temp2,0,temp3);
1975 pChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
1976 lstrcpy(pChildInfo->IdName,temp3);
1977
1978 //位置
1979 i5=GetOneParameter(temp2,i5,temp3);
1980 pChildInfo->pos.x=GetValue(temp3);
1981 i5=GetOneParameter(temp2,i5,temp3);
1982 pChildInfo->pos.y=GetValue(temp3);
1983 i5=GetOneParameter(temp2,i5,temp3);
1984 pChildInfo->size.cx=GetValue(temp3);
1985 i5=GetOneParameter(temp2,i5,temp3);
1986 pChildInfo->size.cy=GetValue(temp3);
1987
1988 //テキスト
1989 i5=GetOneParameter(temp2,i5,temp3);
1990 RemoveStringQuotes(temp3);
1991 RestoreCaptionSequence(temp3);
1992 pChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
1993 lstrcpy(pChildInfo->caption,temp3);
1994
1995 //スタイル
1996 i5=GetOneParameter(temp2,i5,temp3);
1997 pChildInfo->style=GetValue(temp3);
1998
1999 //拡張スタイル
2000 i5=GetOneParameter(temp2,i5,temp3);
2001 pChildInfo->ExStyle=GetValue(temp3);
2002
2003 //クラス
2004 i5=GetOneParameter(temp2,i5,temp3);
2005 pChildInfo->Control=GetValue(temp3);
2006
2007 if(pChildInfo->Control==CT_IMAGEBOX){
2008 //イメージ ボックスの場合
2009 i5=GetOneParameter(temp2,i5,temp3);
2010 pChildInfo->ImageCtrlInfo.type=GetValue(temp3);
2011 i5=GetOneParameter(temp2,i5,temp3);
2012 RemoveStringQuotes(temp3);
2013 pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
2014 lstrcpy(pChildInfo->ImageCtrlInfo.path,temp3);
2015 }
2016
2017 ProjectInfo.pWindowInfo[i4].NumberOfChildWindows++;
2018 }
2019
2020
2021 ////////////
2022 //メニュー
2023 else if(lstrcmpi(temporary,"MENU")==0&&i3==0){
2024 ProjectInfo.NumberOfMenu++;
2025 ProjectInfo.pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu*sizeof(MENU_INFO));
2026 i4=ProjectInfo.NumberOfMenu-1;
2027
2028 //ID名
2029 ProjectInfo.pMenuInfo[i4].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
2030 lstrcpy(ProjectInfo.pMenuInfo[i4].IdName,temp2);
2031 ProjectInfo.pMenuInfo[i4].pMenuInfo=GetMenuData(buffer,&i,&ProjectInfo.pMenuInfo[i4].NumberOfMenu);
2032 if(!ProjectInfo.pMenuInfo[i4].pMenuInfo){
2033 //"ウィンドウ定義ファイルが壊れています。\n\n%s"
2034 sprintf(temporary,STRING_ERROR_BROKEN_WNDFILE,path);
2035 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2036
2037 HeapDefaultFree(temp2);
2038 HeapDefaultFree(buffer);
2039 return 0;
2040 }
2041 }
2042
2043
2044 else if(lstrcmpi(temporary,"END")==0&&i3) i3=0;
2045 else{
2046 //"ウィンドウ定義ファイルが壊れています。\n\n%s"
2047 sprintf(temporary,STRING_ERROR_BROKEN_WNDFILE,path);
2048 MessageBox(hOwner,temporary,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
2049
2050 HeapDefaultFree(temp2);
2051 HeapDefaultFree(buffer);
2052 return 0;
2053 }
2054 i--;
2055 }
2056 }
2057
2058 HeapDefaultFree(temp2);
2059 HeapDefaultFree(buffer);
2060 return 1;
2061}
2062
2063struct NEW_WINDOW{
2064 char name[MAX_PATH];
2065 char HandleName[MAX_PATH];
2066 char CallBackName[MAX_PATH];
2067 BOOL type;
2068};
2069NEW_WINDOW NewWindow;
2070BOOL CALLBACK DlgProject_NewWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
2071 char temporary[MAX_PATH],temp2[MAX_PATH];
2072 switch(message){
2073 case WM_INITDIALOG:
2074 SetPosCenter(hwnd);
2075 SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_SETCHECK,BST_CHECKED,0);
2076 SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0);
2077 SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_SETCHECK,BST_CHECKED,0);
2078 break;
2079 case WM_COMMAND:
2080 switch(LOWORD(wParam)){
2081 case IDOK:
2082 GetDlgItemText(hwnd,IDC_WINDOWNAME,NewWindow.name,MAX_PATH);
2083 GetDlgItemText(hwnd,IDC_WINDOWHANDLE,NewWindow.HandleName,MAX_PATH);
2084 GetDlgItemText(hwnd,IDC_WINDOWPROC,NewWindow.CallBackName,MAX_PATH);
2085 if(SendDlgItemMessage(hwnd,IDC_DEFWINDOW,BM_GETCHECK,0,0))
2086 NewWindow.type=WNDTYPE_DEFAULT;
2087 else if(SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_GETCHECK,0,0))
2088 NewWindow.type=WNDTYPE_MODALDLG;
2089 else if(SendDlgItemMessage(hwnd,IDC_MODELESSDLG,BM_GETCHECK,0,0))
2090 NewWindow.type=WNDTYPE_MODELESSDLG;
2091 EndDialog(hwnd,1);
2092 return 1;
2093 case IDCANCEL:
2094 EndDialog(hwnd,0);
2095 return 1;
2096 case IDC_WINDOWNAME:
2097 if(HIWORD(wParam)==EN_CHANGE) SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0);
2098 return 1;
2099 case IDC_AUTOSET:
2100 if(SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_GETCHECK,0,0)){
2101 SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,1,0);
2102 SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,1,0);
2103 GetDlgItemText(hwnd,IDC_WINDOWNAME,temporary,MAX_PATH);
2104 if(temporary[0]){
2105 sprintf(temp2,"h%s",temporary);
2106 SetDlgItemText(hwnd,IDC_WINDOWHANDLE,temp2);
2107 sprintf(temp2,"%sProc",temporary);
2108 SetDlgItemText(hwnd,IDC_WINDOWPROC,temp2);
2109 }
2110 else{
2111 SetDlgItemText(hwnd,IDC_WINDOWHANDLE,"");
2112 SetDlgItemText(hwnd,IDC_WINDOWPROC,"");
2113 }
2114 }
2115 else{
2116 SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,0,0);
2117 SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,0,0);
2118 }
2119 return 1;
2120 }
2121 break;
2122 }
2123 return 0;
2124}
2125void GetDefaultWindowFont(LOGFONT *LogFont){
2126 LogFont->lfHeight=-12;
2127 LogFont->lfWidth=0;
2128 LogFont->lfEscapement=0;
2129 LogFont->lfOrientation=0;
2130 LogFont->lfWeight=FW_REGULAR;
2131 LogFont->lfItalic=0;
2132 LogFont->lfUnderline=0;
2133 LogFont->lfStrikeOut=0;
2134 LogFont->lfCharSet=SHIFTJIS_CHARSET;
2135 LogFont->lfOutPrecision=OUT_STROKE_PRECIS;
2136 LogFont->lfClipPrecision=CLIP_STROKE_PRECIS;
2137 LogFont->lfQuality=DRAFT_QUALITY;
2138 LogFont->lfPitchAndFamily=FF_SWISS;
2139 lstrcpy(LogFont->lfFaceName,"MS Pゴシック");
2140}
2141void Project_Window_Insert(void){
2142 extern HANDLE hHeap;
2143 extern PROJECTINFO ProjectInfo;
2144 int i;
2145 char temporary[MAX_PATH],temp2[1024],*pTemp;
2146
2147 if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_PROJECT_NEWWINDOW),hOwner,(DLGPROC)DlgProject_NewWindow)) return;
2148
2149 //重複チェック
2150 sprintf(temporary,"%s.sbp",NewWindow.name);
2151 if(ProjectInfo.pobj_DBFileInfo->dupli_check(temporary)){
2152 sprintf(temp2,"\"%s\" ファイルは既にプロジェクト内に存在します。",temporary);
2153 MessageBox(hOwner,temp2,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
2154 return;
2155 }
2156 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
2157 if(lstrcmpi(NewWindow.name,ProjectInfo.pWindowInfo[i].name)==0){
2158 //"\"%s\" ウィンドウは既にプロジェクト内に存在します。"
2159 sprintf(temporary,STRING_DUPLICATIONERROR_WINDOW_IN_PROJECT,ProjectInfo.pWindowInfo[i].name);
2160 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2161 return;
2162 }
2163 if(lstrcmpi(NewWindow.HandleName,ProjectInfo.pWindowInfo[i].HandleName)==0){
2164 //"\"%s\" ハンドルは既にプロジェクト内に存在します。"
2165 sprintf(temporary,STRING_DUPLICATIONERROR_HANDLE_IN_PROJECT,ProjectInfo.pWindowInfo[i].HandleName);
2166 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2167 return;
2168 }
2169 if(lstrcmpi(NewWindow.CallBackName,ProjectInfo.pWindowInfo[i].CallBackName)==0){
2170 //"\"%s\" プロシージャは既にプロジェクト内に存在します。"
2171 sprintf(temporary,STRING_DUPLICATIONERROR_PROC_IN_PROJECT,ProjectInfo.pWindowInfo[i].CallBackName);
2172 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2173 return;
2174 }
2175 }
2176
2177 //ProjectInfo.pWindowInfo構造体に追加
2178 ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo,(ProjectInfo.NumberOfWindows+1)*sizeof(WINDOW_INFO));
2179
2180
2181 ///////////////////////////////////////
2182 //ProjectInfo.pWindowInfo構造体を設定
2183
2184 //ウィンドウ名
2185 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.name)+1);
2186 lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name,NewWindow.name);
2187
2188 //ハンドル名
2189 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].HandleName=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.HandleName)+1);
2190 lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].HandleName,NewWindow.HandleName);
2191
2192 //位置情報
2193 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].pos.x=-1;
2194 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].pos.y=-1;
2195 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].size.cx=480;
2196 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].size.cy=360;
2197
2198 //ウィンドウテキスト
2199 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].caption=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.name)+1);
2200 lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].caption,NewWindow.name);
2201
2202 //スタイル
2203 switch(NewWindow.type){
2204 case WNDTYPE_DEFAULT:
2205 //通常ウィンドウ
2206 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX;
2207 break;
2208 case WNDTYPE_MODALDLG:
2209 case WNDTYPE_MODELESSDLG:
2210 //ダイアログ テンプレート(最大化、最小化ボタンをなくして、細枠にする)
2211 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU;
2212 break;
2213 }
2214
2215 //拡張スタイル
2216 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].ExStyle=0;
2217
2218 //メニュー
2219 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].MenuID=0;
2220
2221 //ID
2222 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].id=0;
2223
2224 //背景色
2225 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].bgColor=COLOR_3DFACE;
2226
2227 //フォント
2228 GetDefaultWindowFont(&ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].LogFont);
2229
2230 //アイコン
2231 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].IconResName=0;
2232
2233 //クラス名
2234 lstrcpy(temporary,"NORMAL");
2235 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].ClassName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
2236 lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].ClassName,temporary);
2237
2238 //コールバック関数名
2239 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].CallBackName=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.CallBackName)+1);
2240 lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].CallBackName,NewWindow.CallBackName);
2241
2242 //タイプ識別
2243 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].type=NewWindow.type;
2244
2245 //子ウィンドウ情報
2246 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].NumberOfChildWindows=0;
2247 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].pChildInfo=(CHILDINFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
2248
2249
2250 //メッセージ処理ファイル名
2251 sprintf(temporary,"%s.ab",ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name);
2252 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].filepath=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
2253 lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].filepath,temporary);
2254
2255
2256 //////////////////////////
2257 // メッセージ処理ファイル
2258 //////////////////////////
2259
2260 //テンプレートを読み込む
2261 const std::string newWindowTemplateSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\new_window_template.sbp";
2262 pTemp = ReadBuffer( newWindowTemplateSbpPath );
2263
2264 //#name#をプロジェクト名に置換
2265 pTemp=PermutationWndPgmTemplate(pTemp,
2266 ProjectInfo.name,
2267 NewWindow.name,
2268 NewWindow.HandleName,
2269 NewWindow.CallBackName);
2270
2271 sprintf(temporary,"%s%s.ab",ProjectInfo.dir,ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name);
2272
2273 //書き込み
2274 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
2275 Project_File_Insert(temporary);
2276
2277 HeapDefaultFree(pTemp);
2278
2279
2280 //////////////////////
2281 //ツリービューに追加
2282
2283 extern HWND hMaterialTreeView;
2284 TV_INSERTSTRUCT tv;
2285 tv.hInsertAfter=TVI_SORT;
2286 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
2287 tv.item.iImage=2;
2288 tv.item.iSelectedImage=2;
2289 tv.hParent=ProjectInfo.hWindowTreeItem;
2290 tv.item.pszText=ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name;
2291
2292 ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
2293
2294 TreeView_SelectItem(hMaterialTreeView,ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].hTreeItem);
2295
2296
2297 ProjectInfo.NumberOfWindows++;
2298 ProjectInfo.ModifyOfMaterial=1;
2299
2300 NewRadWindow(ProjectInfo.NumberOfWindows-1);
2301}
2302void Project_Window_Delete(int WndInfoNum){
2303 extern HANDLE hHeap;
2304 extern MDIINFO MdiInfo[MAX_WNDNUM];
2305 extern PROJECTINFO ProjectInfo;
2306 int i;
2307
2308 //ウィンドウが開かれている場合は閉じる
2309 for(i=0;i<MAX_WNDNUM;i++){
2310 if(MdiInfo[i].hwnd&&lstrcmpi(ProjectInfo.pWindowInfo[WndInfoNum].name,MdiInfo[i].path)==0){
2311 SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
2312 break;
2313 }
2314 }
2315
2316 //ウィンドウ情報のメモリを解放
2317 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].name);
2318 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].filepath);
2319 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].HandleName);
2320 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].caption);
2321 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].ClassName);
2322 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].CallBackName);
2323
2324 //子ウィンドウのメモリを解放
2325 for(i=0;i<ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i++){
2326 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].IdName);
2327 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].caption);
2328 }
2329 HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo);
2330
2331 //ツリービューから削除
2332 extern HWND hMaterialTreeView;
2333 TreeView_DeleteItem(hMaterialTreeView,ProjectInfo.pWindowInfo[WndInfoNum].hTreeItem);
2334
2335 //ProjectInfo.pWindowInfo構造体から削除
2336 ProjectInfo.NumberOfWindows--;
2337 for(i=WndInfoNum;i<ProjectInfo.NumberOfWindows;i++) ProjectInfo.pWindowInfo[i]=ProjectInfo.pWindowInfo[i+1];
2338 if(ProjectInfo.NumberOfWindows==0) ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo,1);
2339 else ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows*sizeof(WINDOW_INFO));
2340
2341 ProjectInfo.ModifyOfMaterial=1;
2342}
Note: See TracBrowser for help on using the repository browser.