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

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

FileManager周りをリファクタリング

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