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

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

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

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