source: dev/trunk/ab5.0/abdev/abdev/src/ProjectManager/ProjectManager.cpp@ 622

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

ResourceManagerクラスを追加。既存のリソース管理モジュールの置き換えを行った。

File size: 19.4 KB
Line 
1#include "stdafx.h"
2
3using namespace ActiveBasic::IDE;
4
5void OpenWorkfile( const std::string &path );
6
7void Project::Load( char *path )
8{
9 extern HANDLE hHeap;
10 int i,i2;
11 char *buffer,temporary[MAX_PATH],temp2[MAX_PATH];
12
13 //既にプロジェクトが開かれている場合は閉じる
14 if( this->IsOpened() ){
15 if(!this->Close()) return;
16 }
17 //memset(&projectInfo,0,sizeof(PROJECTINFO));
18
19 //プロジェクトの作業ディレクトリを取得
20 _splitpath(path,temporary,temp2,0,0);
21 lstrcat( temporary, temp2 );
22 this->workDir = Jenga::Common::Directory( temporary );
23
24 //ファイルを開く、保存の初期ディレクトリをセット
25 lstrcpy(pobj_nv->DefSaveDir,this->GetWorkDir().GetPath().c_str());
26
27
28 //////////////////////////////////////////
29 // リソースデータ用領域を確保
30 this->res.pCursorResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
31 this->res.NumberOfCursorRes=0;
32 this->res.pBitmapResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
33 this->res.NumberOfBitmapRes=0;
34 this->res.pIconResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
35 this->res.NumberOfIconRes=0;
36
37
38 //////////////////////////////////////////
39 //プロジェクトファイル(*.pj)をオープン
40 buffer=ReadBuffer(path);
41 if(!buffer) return;
42
43 //解析
44 this->pobj_DBFileInfo=new CDBFileInfo();
45 bool isUseWindow = false;
46 for(i=0;;i++){
47 if(buffer[i]=='\0') break;
48 if(buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]=='#'){
49 for(i+=3,i2=0;;i++,i2++){
50 if(!IsVariableChar(buffer[i])){
51 temporary[i2]=0;
52 break;
53 }
54 temporary[i2]=buffer[i];
55 }
56 if(lstrcmpi(temporary,"VERSION")==0&&buffer[i]=='='){
57 for(i++,i2=0;;i++,i2++){
58 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
59 temporary[i2]=0;
60 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
61 break;
62 }
63 temporary[i2]=buffer[i];
64 }
65 this->dwVersion=GetValue(temporary);
66 }
67 else if(lstrcmpi(temporary,"MODULETYPE")==0&&buffer[i]=='='){
68 for(i++,i2=0;;i++,i2++){
69 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
70 temporary[i2]=0;
71 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
72 break;
73 }
74 temporary[i2]=buffer[i];
75 }
76 this->moduleType = (ActiveBasic::Common::TargetModuleType::EnumType)atoi(temporary);
77 }
78 else if(lstrcmpi(temporary,"NAME")==0&&buffer[i]=='='){
79 for(i++,i2=0;;i++,i2++){
80 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
81 temporary[i2]=0;
82 break;
83 }
84 temporary[i2]=buffer[i];
85 }
86 this->name = temporary;
87 }
88 else if(lstrcmpi(temporary,"PLATFORM")==0&&buffer[i]=='='){
89 for(i++,i2=0;;i++,i2++){
90 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
91 temporary[i2]=0;
92 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
93 break;
94 }
95 temporary[i2]=buffer[i];
96 }
97 i2=atoi(temporary);
98 extern HWND hSelectCompilerCombo;
99 if(i2==32){
100 //プラットフォームにWin32を選択
101 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0);
102 }
103 else if(i2==64){
104 //プラットフォームにWin64を選択
105 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,1,0);
106 }
107 SendMessage(hSelectCompilerCombo,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
108 }
109 else if(lstrcmpi(temporary,"USEWINDOW")==0&&buffer[i]=='='){
110 for(i++,i2=0;;i++,i2++){
111 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
112 temporary[i2]=0;
113 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
114 break;
115 }
116 temporary[i2]=buffer[i];
117 }
118 if( atoi(temporary) > 0 )
119 {
120 isUseWindow = true;
121 }
122 }
123 else if(lstrcmpi(temporary,"OPTION")==0&&buffer[i]=='='){
124 for(i++,i2=0;;i++,i2++){
125 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
126 temporary[i2]=0;
127 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
128 break;
129 }
130 temporary[i2]=buffer[i];
131 }
132 this->dwOption=GetValue(temporary);
133 }
134 else if(lstrcmpi(temporary,"OUTPUT_RELEASE")==0&&buffer[i]=='='){
135 for(i++,i2=0;;i++,i2++){
136 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
137 temporary[i2]=0;
138 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
139 break;
140 }
141 temporary[i2]=buffer[i];
142 }
143 lstrcpy(this->lpszOutput_Release,temporary);
144 }
145 else if(lstrcmpi(temporary,"OUTPUT_DEBUG")==0&&buffer[i]=='='){
146 for(i++,i2=0;;i++,i2++){
147 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
148 temporary[i2]=0;
149 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
150 break;
151 }
152 temporary[i2]=buffer[i];
153 }
154 lstrcpy(this->lpszOutput_Debug,temporary);
155 }
156 else if(lstrcmpi(temporary,"MANIFEST")==0&&buffer[i]=='='){
157 for(i++,i2=0;;i++,i2++){
158 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
159 temporary[i2]=0;
160 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
161 break;
162 }
163 temporary[i2]=buffer[i];
164 }
165 lstrcpy(this->szManifestPath,temporary);
166 }
167 else if(lstrcmpi(temporary,"DEBUG_CMD_LINE")==0&&buffer[i]=='='){
168 for(i++,i2=0;;i++,i2++){
169 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
170 temporary[i2]=0;
171 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
172 break;
173 }
174 temporary[i2]=buffer[i];
175 }
176 lstrcpy(this->szCmdLine,temporary);
177 }
178 else if(lstrcmpi(temporary,"DEBUG_EXE_PATH")==0&&buffer[i]=='='){
179 for(i++,i2=0;;i++,i2++){
180 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
181 temporary[i2]=0;
182 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
183 break;
184 }
185 temporary[i2]=buffer[i];
186 }
187 lstrcpy(this->szExePath,temporary);
188 }
189 else if(lstrcmpi(temporary,"RESOURCE")==0&&buffer[i]=='='){
190 for(i++,i2=0;;i++,i2++){
191 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
192 temporary[i2]=0;
193 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
194 break;
195 }
196 temporary[i2]=buffer[i];
197 }
198
199 // このパラメータは使用しなくなった
200 }
201 else if(lstrcmpi(temporary,"SOURCE")==0&&buffer[i]=='\r'&&buffer[i+1]=='\n'){
202 while(1){
203 for(i+=2,i2=0;;i++,i2++){
204 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
205 temporary[i2]=0;
206 break;
207 }
208 temporary[i2]=buffer[i];
209 }
210 if(temporary[0]=='\0') break;
211 this->pobj_DBFileInfo->add(temporary,0);
212
213 if(buffer[i]=='\0') break;
214 }
215 }
216 else{
217 //不明なパラメータは無視
218 for(i++;;i++){
219 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
220 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
221 break;
222 }
223 }
224 }
225 if(buffer[i]=='\0') break;
226 }
227 }
228 HeapDefaultFree(buffer);
229
230 //古いバージョンファイルを考慮
231 if(this->dwVersion<=4){
232 if( this->GetModuleType() == ActiveBasic::Common::TargetModuleType::Dll )
233 {
234 sprintf(this->lpszOutput_Release,".\\%s.dll",this->GetName().c_str());
235 }
236 else
237 {
238 sprintf(this->lpszOutput_Release,".\\%s.exe",this->GetName().c_str());
239 }
240 sprintf(this->lpszOutput_Debug,".\\%s_debug.exe",this->GetName().c_str());
241 }
242
243 // リソースを読み込む
244 Jenga::Common::Path resourcePath( projectInfo.GetResourceFileFullPath() );
245 if( resourcePath.IsExistFile() )
246 {
247 GetResourceData();
248 }
249
250 //ブレークポイントを初期化
251 this->pobj_DBBreakPoint=new CDBBreakPoint();
252
253
254 if( isUseWindow )
255 {
256 /////////////////////////////////////////////
257 //ウィンドウ定義ファイル(*.wnd)をオープン
258 sprintf(temp2,"%s%s.wnd",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
259 if(!OpenWindowFile(temp2)) return;
260 }
261 else{
262 this->windowInfos.Clear();
263
264 this->NumberOfMenu=0;
265 this->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
266 }
267
268 OpenWorkfile( this->GetWorkDir().GetPath() + this->GetName() + ".wrk" );
269
270 this->modify=0;
271 this->ModifyOfMaterial=0;
272 this->ModifuOfResource=0;
273}
274
275void SetStatusText(char *MenuText);
276void Project::Save()
277{
278 extern MDIINFO MdiInfo[MAX_WNDNUM];
279 int i,i2,i3,WndNum;
280 char temporary[MAX_PATH],buffer[32767];
281 HWND hChild;
282
283 SetStatusText( "プロジェクトを保存中..." );
284
285 //プロジェクトファイルのバージョンを設定
286 this->dwVersion=PROJECT_VERSION;
287
288 hChild=GetWindow(hClient,GW_CHILD);
289 while(hChild){
290 WndNum=GetWndNum(hChild);
291 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
292 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
293 for(i=0;i<this->pobj_DBFileInfo->iNum;i++){
294 this->pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
295 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
296 SaveDocument(hChild,NULL);
297 break;
298 }
299 }
300 }
301 }
302 if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
303 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
304 for(i=0;i<this->res.NumberOfIconRes;i++){
305 lstrcpy(temporary,this->res.pIconResInfo[i].path);
306 lstrcpy( temporary, this->GetWorkDir().GetFullPath( temporary ).c_str() );
307 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
308 SaveDocument(hChild,NULL);
309 break;
310 }
311 }
312 }
313 }
314 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
315 }
316
317
318 //////////////////////////////////////
319 //プロジェクトファイル(*.pj)を作成
320 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
321 i2=lstrlen(buffer);
322 sprintf(buffer+i2,"#VERSION=%d\r\n\r\n",this->dwVersion);
323 i2+=lstrlen(buffer+i2);
324 sprintf(buffer+i2,"#MODULETYPE=%d\r\n\r\n",(int)this->GetModuleType());
325 i2+=lstrlen(buffer+i2);
326 sprintf(buffer+i2,"#NAME=%s\r\n\r\n",this->GetName().c_str());
327 i2+=lstrlen(buffer+i2);
328 extern HWND hSelectCompilerCombo;
329 if(SendMessage(hSelectCompilerCombo,CB_GETCURSEL,0,0)==0){
330 sprintf(buffer+i2,"#PLATFORM=32\r\n\r\n",this->GetName().c_str());
331 i2+=lstrlen(buffer+i2);
332 }
333 else{
334 sprintf(buffer+i2,"#PLATFORM=64\r\n\r\n",this->GetName().c_str());
335 i2+=lstrlen(buffer+i2);
336 }
337 sprintf(buffer+i2,"#USEWINDOW=%d\r\n\r\n",this->windowInfos.size());
338 i2+=lstrlen(buffer+i2);
339 sprintf(buffer+i2,"#OPTION=&H%08x\r\n\r\n",this->dwOption);
340 i2+=lstrlen(buffer+i2);
341 sprintf(buffer+i2,"#OUTPUT_RELEASE=%s\r\n\r\n",this->lpszOutput_Release);
342 i2+=lstrlen(buffer+i2);
343 sprintf(buffer+i2,"#OUTPUT_DEBUG=%s\r\n\r\n",this->lpszOutput_Debug);
344 i2+=lstrlen(buffer+i2);
345 sprintf(buffer+i2,"#MANIFEST=%s\r\n\r\n",this->szManifestPath);
346 i2+=lstrlen(buffer+i2);
347 sprintf(buffer+i2,"#DEBUG_CMD_LINE=%s\r\n\r\n",this->szCmdLine);
348 i2+=lstrlen(buffer+i2);
349 sprintf(buffer+i2,"#DEBUG_EXE_PATH=%s\r\n\r\n",this->szExePath);
350 i2+=lstrlen(buffer+i2);
351 sprintf(buffer+i2,"#SOURCE\r\n");
352 i2+=lstrlen(buffer+i2);
353 for(i=0;i<this->pobj_DBFileInfo->iNum;i++){
354 sprintf(buffer+i2,"%s\r\n",this->pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
355 i2+=lstrlen(buffer+i2);
356 }
357
358 //保存
359 sprintf(temporary,"%s%s.pj",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
360 WriteBuffer(temporary,buffer,i2);
361
362
363 //////////////////////////////////
364 // リソースファイル(*.rc、resource.ab)を作成
365 {
366 i2=0;
367 i3=101;
368 for(i=0;i<this->res.NumberOfCursorRes;i++,i3++){
369 sprintf(buffer+i2,"Const %s=%d\r\n",
370 this->res.pCursorResInfo[i].IdName,
371 i3);
372 i2+=lstrlen(buffer+i2);
373 }
374 for(i=0;i<this->res.NumberOfBitmapRes;i++,i3++){
375 sprintf(buffer+i2,"Const %s=%d\r\n",
376 this->res.pBitmapResInfo[i].IdName,
377 i3);
378 i2+=lstrlen(buffer+i2);
379 }
380 for(i=0;i<this->res.NumberOfIconRes;i++,i3++){
381 sprintf(buffer+i2,"Const %s=%d\r\n",
382 this->res.pIconResInfo[i].IdName,
383 i3);
384 i2+=lstrlen(buffer+i2);
385 }
386
387 //保存(resource.ab)
388 WriteBuffer(this->GetWorkDir().GetFullPath( "resource.ab" ),buffer,i2);
389
390 i2=0;
391 for(i=0;i<this->res.NumberOfCursorRes;i++){
392 sprintf(buffer+i2,"%s CURSOR \"%s\"\r\n",
393 this->res.pCursorResInfo[i].IdName,
394 this->res.pCursorResInfo[i].path);
395 i2+=lstrlen(buffer+i2);
396 }
397 for(i=0;i<this->res.NumberOfBitmapRes;i++){
398 sprintf(buffer+i2,"%s BITMAP \"%s\"\r\n",
399 this->res.pBitmapResInfo[i].IdName,
400 this->res.pBitmapResInfo[i].path);
401 i2+=lstrlen(buffer+i2);
402 }
403 for(i=0;i<this->res.NumberOfIconRes;i++){
404 sprintf(buffer+i2,"%s ICON \"%s\"\r\n",
405 this->res.pIconResInfo[i].IdName,
406 this->res.pIconResInfo[i].path);
407 i2+=lstrlen(buffer+i2);
408 }
409
410 //マニフェスト
411 if(this->dwOption&PJ_OP_RC_MANIFEST){
412 sprintf(buffer+i2,"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST \"%s\"\r\n",
413 this->szManifestPath);
414 i2+=lstrlen(buffer+i2);
415 }
416
417 //保存
418 WriteBuffer(this->GetResourceFileFullPath(),buffer,i2);
419 }
420
421
422 ///////////////////////////////////////
423 //インデックスファイル(*.idx)を作成
424 buffer[0]=0;
425 lstrcpy(buffer,"' インデックス プログラム\r\n");
426 i2=lstrlen(buffer);
427 if(this->dwOption&PJ_OP_SOURCE_MASK){
428 if(this->dwOption&PJ_OP_STRICT){
429 /* #strictディレクティブは今は使われていない
430 lstrcpy(buffer+i2,"\r\n");
431 i2+=lstrlen(buffer+i2);
432 lstrcpy(buffer+i2,"#strict");
433 i2+=lstrlen(buffer+i2);
434 lstrcpy(buffer+i2,"\r\n");
435 i2+=lstrlen(buffer+i2);
436 */
437 }
438 lstrcpy(buffer+i2,"\r\n");
439 i2+=lstrlen(buffer+i2);
440 lstrcpy(buffer+i2,"'Win32APIの定義ファイル\r\n");
441 i2+=lstrlen(buffer+i2);
442 if(this->dwOption&PJ_OP_MMSYSTEM){
443 lstrcpy(buffer+i2,"#include <api_mmsys.sbp>\r\n");
444 i2+=lstrlen(buffer+i2);
445 }
446 if(this->dwOption&PJ_OP_COMMCTRL){
447 lstrcpy(buffer+i2,"#include <api_commctrl.sbp>\r\n");
448 i2+=lstrlen(buffer+i2);
449 }
450 if(this->dwOption&PJ_OP_RICHEDIT){
451 lstrcpy(buffer+i2,"#include <api_richedit.sbp>\r\n");
452 i2+=lstrlen(buffer+i2);
453 }
454 if(this->dwOption&PJ_OP_WINSOCK){
455 lstrcpy(buffer+i2,"#include <api_winsock2.sbp>\r\n");
456 i2+=lstrlen(buffer+i2);
457 }
458 }
459 if( !this->windowInfos.empty() )
460 {
461 lstrcpy(buffer+i2,"\r\n");
462 i2+=lstrlen(buffer+i2);
463 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ制御プログラム\r\n");
464 i2+=lstrlen(buffer+i2);
465 sprintf(buffer+i2,"#include \"Callback.wbp\"\r\n");
466 i2+=lstrlen(buffer+i2);
467 }
468 if(this->pobj_DBFileInfo->iNum>1){
469 lstrcpy(buffer+i2,"\r\n");
470 i2+=lstrlen(buffer+i2);
471 lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
472 i2+=lstrlen(buffer+i2);
473 for(i=1;i<this->pobj_DBFileInfo->iNum;i++){
474 //メインファイルは含まない
475 sprintf(buffer+i2,"#include \"%s\"\r\n",this->pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
476 i2+=lstrlen(buffer+i2);
477 lstrcpy(buffer+i2,"_ClearNamespaceImported\r\n");
478 i2+=lstrlen(buffer+i2);
479 }
480 }
481 if( !this->windowInfos.empty() )
482 {
483 lstrcpy(buffer+i2,"\r\n");
484 i2+=lstrlen(buffer+i2);
485 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ生成プログラム\r\n");
486 i2+=lstrlen(buffer+i2);
487 sprintf(buffer+i2,"#include \"MakeWindow.wbp\"\r\n");
488 i2+=lstrlen(buffer+i2);
489 }
490
491 //リソースファイル
492 lstrcpy(buffer+i2,"\r\n");
493 i2+=lstrlen(buffer+i2);
494 lstrcpy(buffer+i2,"'リソースファイル\r\n");
495 i2+=lstrlen(buffer+i2);
496 lstrcpy(buffer+i2,"#include \"resource.ab\"\r\n");
497 i2+=lstrlen(buffer+i2);
498 sprintf(buffer+i2,"#resource \"%s.rc\"\r\n",this->GetName().c_str());
499 i2+=lstrlen(buffer+i2);
500
501 //保存
502 sprintf(temporary,"%s%s.idx",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
503 WriteBuffer(temporary,buffer,i2);
504
505
506 if( !this->windowInfos.empty() )
507 {
508 /////////////////////////////////////////////////////
509 //ウィンドウ関連ファイル(*.wnd)を作成、保存
510 if(this->ModifyOfMaterial){
511 sprintf(temporary,"%s%s.wnd",this->GetWorkDir().GetPath().c_str(),this->GetName().c_str());
512 SaveWindowFile( temporary, this->windowInfos );
513 }
514
515 //.wbpファイルを生成
516 SaveWindowProgram();
517 }
518
519
520 MakeWorkFile();
521
522 SetStatusText("");
523
524 this->modify=0;
525 this->ModifuOfResource=0;
526}
527
528bool Project::Close()
529{
530 extern HANDLE hHeap;
531 extern MDIINFO MdiInfo[MAX_WNDNUM];
532 int i,i2,WndNum;
533 HWND hChild,hCloseChild;
534 char temporary[MAX_PATH];
535
536
537 //保存確認
538 i=ProjectModifyCheck(0);
539 if(i==0) return false;
540 else if(i==2) MakeWorkFile();
541
542 //プロジェクトに関するMDIウィンドウをすべて閉じる
543 hChild=GetWindow(hClient,GW_CHILD);
544 while(hChild){
545 hCloseChild=hChild;
546 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
547 WndNum=GetWndNum(hCloseChild);
548 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
549 for(i=0;i<this->pobj_DBFileInfo->iNum;i++){
550 this->pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
551 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
552
553 //変更フラグをオフにする
554 MdiInfo[WndNum].pMdiTextEdit->UnModify();
555
556 SendMessage(hCloseChild,WM_CLOSE,0,0);
557 break;
558 }
559 }
560 }
561 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
562 {
563 BOOST_FOREACH( const WindowInfo *pWindowInfo, windowInfos )
564 {
565 if( pWindowInfo->GetName() == MdiInfo[WndNum].path ){
566 SendMessage(hCloseChild,WM_CLOSE,0,0);
567 break;
568 }
569 }
570 }
571 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
572 for(i=0;i<this->NumberOfMenu;i++){
573 if(lstrcmp(MdiInfo[WndNum].path,this->pMenuInfo[i].IdName)==0){
574 SendMessage(hCloseChild,WM_CLOSE,0,0);
575 break;
576 }
577 }
578 }
579 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
580 for(i=0;this->res.NumberOfIconRes;i++){
581 lstrcpy(temporary,this->res.pIconResInfo[i].path);
582 lstrcpy( temporary, this->GetWorkDir().GetFullPath( temporary ).c_str() );
583 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
584 SendMessage(hCloseChild,WM_CLOSE,0,0);
585 break;
586 }
587 }
588 }
589 }
590
591 //ファイル情報のメモリを解放
592 delete this->pobj_DBFileInfo;
593
594 //ブレークポイントのオブジェクトを解放
595 delete this->pobj_DBBreakPoint;
596
597 //ウィンドウ情報のメモリを解放
598 BOOST_FOREACH( WindowInfo *pWindowInfo, windowInfos )
599 {
600 HeapDefaultFree(pWindowInfo->caption);
601 HeapDefaultFree(pWindowInfo->ClassName);
602 HeapDefaultFree(pWindowInfo->CallBackName);
603 HeapDefaultFree(pWindowInfo->filepath);
604 if(pWindowInfo->MenuID)
605 HeapDefaultFree(pWindowInfo->MenuID);
606 if(pWindowInfo->IconResName)
607 HeapDefaultFree(pWindowInfo->IconResName);
608
609 //子ウィンドウのメモリを解放
610 for(i2=0;i2<pWindowInfo->childWindowInfos.size();i2++){
611 HeapDefaultFree(pWindowInfo->childWindowInfos[i2]->IdName);
612 HeapDefaultFree(pWindowInfo->childWindowInfos[i2]->caption);
613 if(pWindowInfo->childWindowInfos[i2]->Control==CT_IMAGEBOX){
614 //イメージ ボックスの場合
615 HeapDefaultFree(pWindowInfo->childWindowInfos[i2]->ImageCtrlInfo.path);
616 }
617
618 delete pWindowInfo->childWindowInfos[i2];
619 }
620 pWindowInfo->childWindowInfos.clear();
621 }
622 this->windowInfos.Clear();
623
624 //メニュー情報のメモリを解放
625 HeapMenuDataFree(this->pMenuInfo,this->NumberOfMenu,0);
626 HeapDefaultFree(this->pMenuInfo);
627
628 //リソースのメモリを解放
629 for(i=0;i<this->res.NumberOfCursorRes;i++){
630 HeapDefaultFree(this->res.pCursorResInfo[i].IdName);
631 HeapDefaultFree(this->res.pCursorResInfo[i].path);
632 }
633 HeapDefaultFree(this->res.pCursorResInfo);
634 for(i=0;i<this->res.NumberOfBitmapRes;i++){
635 HeapDefaultFree(this->res.pBitmapResInfo[i].IdName);
636 HeapDefaultFree(this->res.pBitmapResInfo[i].path);
637 }
638 HeapDefaultFree(this->res.pBitmapResInfo);
639 for(i=0;i<this->res.NumberOfIconRes;i++){
640 HeapDefaultFree(this->res.pIconResInfo[i].IdName);
641 HeapDefaultFree(this->res.pIconResInfo[i].path);
642 }
643 HeapDefaultFree(this->res.pIconResInfo);
644
645 //プロジェクト ビューを非表示にする
646 extern HWND hProjectView;
647 if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
648 SetWindowText(hProjectView,"Project View");
649
650 extern HWND hProcedureTreeView;
651 extern HWND hMaterialTreeView;
652 TreeView_DeleteAllItems(pobj_FileTree->hTree);
653 TreeView_DeleteAllItems(hProcedureTreeView);
654 TreeView_DeleteAllItems(hMaterialTreeView);
655
656 //ウィンドウ タイトルを変更
657 SetWindowText(hOwner,APPLICATION_NAME);
658
659 this->name = "";
660
661 //メニュー状態を設定
662 ResetState_DocMenu();
663
664 return true;
665}
Note: See TracBrowser for help on using the repository browser.