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

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

"extern PROJECTINFO ProjectInfo;" をすべて除去した。
PROJECTINFO構造体の定義位置を移動した。

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