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

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

・PROJECTINFO構造体を廃止し、Projectクラスを採用した。
・ProjectInfoをprojectInfoにリネーム

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