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

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

WndInfoNum利用コード周りをリファクタリング中

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