source: dev/trunk/ab5.0/abdev/abdev/ProjectControl.cpp@ 609

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

ProjectInfo構造体のpWindowInfoメンバをwindowInfosメンバに置き換えた。

File size: 79.1 KB
RevLine 
[475]1#include "stdafx.h"
2
[3]3#include "Common.h"
4
[475]5using namespace ActiveBasic::IDE;
6
[3]7#if defined(JPN)
8//日本語
9#include "pj_msg_jpn.h"
10#else
11//英語
12#include "pj_msg_eng.h"
13#endif
14
15HWND hProjectViewTab;
16HWND hProcedureTreeView,hMaterialTreeView;
17HIMAGELIST hProcedureTreeViewImageList,hMaterialTreeViewImageList;
18WNDPROC OldProcedureTreeViewProc,OldMaterialTreeViewProc;
19WNDPROC OldTabProc;
20
21LRESULT CALLBACK ProcedureTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
22 if(message==WM_CHAR&&wParam==VK_RETURN){
23 SendMessage(hProjectViewTab,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
24 //デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
25 return 0;
26 }
27 else if(message==WM_LBUTTONDBLCLK){
28 SendMessage(hProjectViewTab,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
29 return 0;
30 }
31 return CallWindowProc(OldProcedureTreeViewProc,hwnd,message,wParam,lParam);
32}
33LRESULT CALLBACK MaterialTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
34 if(message==WM_CHAR&&wParam==VK_RETURN){
35 SendMessage(hProjectViewTab,WM_COMMAND,IDM_MATERIALTREE_OPEN,0);
36 //デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
37 return 0;
38 }
39 if(message==WM_KEYDOWN&&wParam==VK_DELETE) SendMessage(hProjectViewTab,WM_COMMAND,IDM_MATERIALTREE_DELETE,0);
40 return CallWindowProc(OldMaterialTreeViewProc,hwnd,message,wParam,lParam);
41}
42LRESULT CALLBACK TabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
43 extern HANDLE hHeap;
44 extern MDIINFO MdiInfo[MAX_WNDNUM];
45 extern LPSTR DefFileFilter;
46 extern PROJECTINFO ProjectInfo;
47 int i,i2,WndNum;
48 char str[MAX_PATH],temporary[MAX_PATH];
49 HWND hTree,hChild;
50 HTREEITEM hTreeItem,hTreeItem2;
51 TV_HITTESTINFO tvHitTestInfo;
52 TVITEM tvItem;
53
54 switch(message){
55 case WM_CONTEXTMENU:
56 i=TabCtrl_GetCurSel(hwnd);
57 if(i==0){
58 //ファイルツリー
59 POINT pos;
60 pos.x=LOWORD(lParam);
61 pos.y=HIWORD(lParam);
62 pobj_FileTree->ContextMenu(&pos);
63 return 0;
64 }
65 else if(i==1) hTree=hProcedureTreeView;
66 else if(i==2) hTree=hMaterialTreeView;
67 tvHitTestInfo.pt.x=LOWORD(lParam);
68 tvHitTestInfo.pt.y=HIWORD(lParam);
69 ScreenToClient(hTree,&tvHitTestInfo.pt);
70 hTreeItem=TreeView_HitTest(hTree,&tvHitTestInfo);
71 if(hTreeItem){
72 TreeView_SelectItem(hTree,hTreeItem);
73 if(i==1){
74 extern HMENU hProcedureTreeMenuBase;
75 if(TreeView_GetRoot(hTree)!=hTreeItem)
76 TrackPopupMenu(GetSubMenu(hProcedureTreeMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
77 }
78 else if(i==2){
79 extern HMENU hMaterialTreeMenuBase;
80 hTreeItem2=TreeView_GetRoot(hTree);
81 for(i2=0;;i2++){
82 if(hTreeItem2==hTreeItem) break;
83 hTreeItem2=TreeView_GetNextSibling(hTree,hTreeItem2);
84 if(!hTreeItem2) break;
85 }
86 if(hTreeItem2){
87 if(i2==0)
88 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,0),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
89 else if(i2==1)
90 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,2),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
91 else if(i2==2)
92 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,4),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
93 else if(i2==3)
94 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,6),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
95 else if(i2==4)
96 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,8),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
97 }
98 else{
99 hTreeItem=TreeView_GetNextItem(hTree,hTreeItem,TVGN_PARENT);
100 hTreeItem2=TreeView_GetRoot(hTree);
101 for(i2=0;;i2++){
102 if(hTreeItem2==hTreeItem) break;
103 hTreeItem2=TreeView_GetNextSibling(hTree,hTreeItem2);
104 if(!hTreeItem2) break;
105 }
106 if(hTreeItem2){
107 if(i2==0)
108 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
109 else if(i2==1)
110 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,3),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
111 else if(i2==2)
112 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,5),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
113 else if(i2==3)
114 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,7),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
115 else if(i2==4)
116 TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,9),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
117 }
118 }
119 }
120 }
121 break;
122 case WM_COMMAND:
123 switch(LOWORD(wParam)){
124
125 case IDM_PROCEDURETREE_SHOW:
126 extern BOOL bSearchingClasses;
127 if(bSearchingClasses){
128 pobj_ClassTreeView->bShowSwitch=1;
129 break;
130 }
131
132 hTreeItem=TreeView_GetSelection(hProcedureTreeView);
133 for(i=0;i<pobj_ClassTreeView->NumberOfProcedures;i++){
134 if(pobj_ClassTreeView->pProcInfo[i].hTreeItem==hTreeItem){
135
[81]136 if( ProjectInfo.name[0] ){
137 // 対象ファイルを開く
138 lstrcpy(temporary,
139 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[pobj_ClassTreeView->pProcInfo[i].FileNum]->m_path);
140 GetFullPath(temporary,ProjectInfo.dir);
141 hChild=OpenFileWithExtension(temporary);
142 }
143 else{
144 hChild = GetWindow(hClient,GW_CHILD);
145 }
146
[3]147 //プロシージャの行を選択する
148 //ResetScrollbarが再描画時に呼び出されるので、再描画する
149 WndNum=GetWndNum(hChild);
[24]150 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
151 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
[3]152 TextEdit_SelectOneLine(WndNum,pobj_ClassTreeView->pProcInfo[i].code_pos,TRUE);
153
154 //タイマーをセット
155 // ※フォーカスをエディタにセットするため
156 // ※タイミングを遅らせてSetFocusを実行する必要あり
157 SetTimer(hwnd,100,10,NULL);
158
159 break;
160 }
161 }
[81]162
[3]163 break;
164
165 case IDM_MATERIALTREE_INSERTCURSOR:
166 Project_CursorResInsert();
167 break;
168 case IDM_MATERIALTREE_INSERTBITMAP:
169 Project_BitmapResInsert();
170 break;
171 case IDM_MATERIALTREE_INSERTICON:
172 Project_IconResInsert();
173 break;
174 case IDM_MATERIALTREE_INSERTMENU:
175 Project_Menu_Insert();
176 break;
177 case IDM_MATERIALTREE_INSERTWINDOW:
178 Project_Window_Insert();
179 break;
180 case IDM_MATERIALTREE_OPEN:
181 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
[609]182 for(i=0;i<static_cast<int>(ProjectInfo.windowInfos.size());i++){
183 if(ProjectInfo.windowInfos[i].hTreeItem==hTreeItem){
[3]184 NewRadWindow(i);
185 break;
186 }
187 }
188 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
189 if(ProjectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
190 NewMenuWindow(&ProjectInfo.pMenuInfo[i]);
191 break;
192 }
193 }
194 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
195 if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
196 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
197 GetFullPath(temporary,ProjectInfo.dir);
198 NewIconEditWindow(temporary);
199 break;
200 }
201 }
202 break;
203 case IDM_MATERIALTREE_DELETE:
204 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
205 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
206 if(ProjectInfo.res.pCursorResInfo[i].hTreeItem==hTreeItem){
207
208 //"%s カーソルをプロジェクトから削除します。よろしいですか?"
209 sprintf(str,STRING_PJ_CHECK_DELETECURSOR,ProjectInfo.res.pCursorResInfo[i].IdName);
210 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
211
212 Project_Cursor_Delete(i);
213 break;
214 }
215 }
216 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
217 if(ProjectInfo.res.pBitmapResInfo[i].hTreeItem==hTreeItem){
218
219 //"%s ビットマップをプロジェクトから削除します。よろしいですか?"
220 sprintf(str,STRING_PJ_CHECK_DELETEBITMAP,ProjectInfo.res.pBitmapResInfo[i].IdName);
221 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
222
223 Project_Bitmap_Delete(i);
224 break;
225 }
226 }
227 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
228 if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
229
230 //"%s アイコンをプロジェクトから削除します。よろしいですか?"
231 sprintf(str,STRING_PJ_CHECK_DELETEICON,ProjectInfo.res.pIconResInfo[i].IdName);
232 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
233
234 Project_Icon_Delete(i);
235 break;
236 }
237 }
238 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
239 if(ProjectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
240
241 //"%s メニューをプロジェクトから削除します。よろしいですか?"
242 sprintf(str,STRING_PJ_CHECK_DELETEMENU,ProjectInfo.pMenuInfo[i].IdName);
243 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
244
245 Project_Menu_Delete(i);
246 break;
247 }
248 }
[609]249 for(i=0;i<static_cast<int>(ProjectInfo.windowInfos.size());i++){
250 if(ProjectInfo.windowInfos[i].hTreeItem==hTreeItem){
[3]251
252 //"%s ウィンドウをプロジェクトから削除します。よろしいですか?"
[609]253 sprintf(str,STRING_PJ_CHECK_DELETEWINDOW,ProjectInfo.windowInfos[i].name);
[3]254 if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
255
256 Project_Window_Delete(i);
257 break;
258 }
259 }
260 break;
261 case IDM_MENUTREE_RENAMEID:
262 extern char NewIdName[MAX_PATH];
263 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
264 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
265 if(ProjectInfo.res.pCursorResInfo[i].hTreeItem==hTreeItem){
266 Project_Cursor_RenameID(i);
267 break;
268 }
269 }
270 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
271 if(ProjectInfo.res.pBitmapResInfo[i].hTreeItem==hTreeItem){
272 Project_Bitmap_RenameID(i);
273 break;
274 }
275 }
276 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
277 if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
278 Project_Icon_RenameID(i);
279 }
280 }
281 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
282 if(ProjectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
[302]283 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_MenuID_Input,(long)ProjectInfo.pMenuInfo[i].IdName)) break;
[3]284
285 //重複チェック
286 for(i2=0;i2<ProjectInfo.NumberOfMenu;i2++){
287 if(i2==i) continue;
288 if(lstrcmp(NewIdName,ProjectInfo.pMenuInfo[i2].IdName)==0){
289 //"ID \"%s\" は既にプロジェクト内に存在します。"
290 sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
291 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
292 return 0;
293 }
294 }
295
296 HeapDefaultFree(ProjectInfo.pMenuInfo[i].IdName);
297 ProjectInfo.pMenuInfo[i].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
298 lstrcpy(ProjectInfo.pMenuInfo[i].IdName,NewIdName);
299
300 tvItem.hItem=hTreeItem;
301 tvItem.mask=TVIF_TEXT;
302 tvItem.pszText=ProjectInfo.pMenuInfo[i].IdName;
303 tvItem.cchTextMax=lstrlen(ProjectInfo.pMenuInfo[i].IdName)+1;
304 TreeView_SetItem(hMaterialTreeView,&tvItem);
305
306 ProjectInfo.ModifyOfMaterial=1;
307
308 TreeView_SortChildren(hMaterialTreeView,
309 TreeView_GetParent(hMaterialTreeView,hTreeItem),
310 0);
311 break;
312 }
313 }
314 break;
315 case IDM_MATERIALTREE_ICON_SETMAIN:
316 RESITEMINFO TempIconResInfo;
317 hTreeItem=TreeView_GetSelection(hMaterialTreeView);
318 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
319 if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
320 if(i==0) break;
321
322 TempIconResInfo=ProjectInfo.res.pIconResInfo[i];
323 for(;i>0;i--)
324 ProjectInfo.res.pIconResInfo[i]=ProjectInfo.res.pIconResInfo[i-1];
325 ProjectInfo.res.pIconResInfo[0]=TempIconResInfo;
326
327 tvItem.hItem=ProjectInfo.res.pIconResInfo[1].hTreeItem;
328 tvItem.mask=TVIF_TEXT;
329 tvItem.pszText=ProjectInfo.res.pIconResInfo[1].IdName;
330 tvItem.cchTextMax=lstrlen(ProjectInfo.res.pIconResInfo[1].IdName)+1;
331 TreeView_SetItem(hMaterialTreeView,&tvItem);
332
333 tvItem.hItem=ProjectInfo.res.pIconResInfo[0].hTreeItem;
334 tvItem.mask=TVIF_TEXT;
335 sprintf(temporary,"%s (Main)",ProjectInfo.res.pIconResInfo[0].IdName);
336 tvItem.pszText=temporary;
337 tvItem.cchTextMax=lstrlen(temporary)+1;
338 TreeView_SetItem(hMaterialTreeView,&tvItem);
339
340 ProjectInfo.ModifuOfResource=1;
341 break;
342 }
343 }
344 break;
345 }
346 break;
347 case WM_TIMER:
348 KillTimer(hwnd,wParam);
349
350 //フォーカスをエディタにセット
351 SetFocus(GetWindow(GetWindow(hClient,GW_CHILD),GW_CHILD));
352 break;
353 case WM_NOTIFY:
354 NMHDR *hdr;
355 hdr=(NMHDR *)lParam;
356 if(hdr->code==NM_DBLCLK){
357 if(hdr->hwndFrom==hProcedureTreeView) SendMessage(hwnd,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
358 else if(hdr->hwndFrom==hMaterialTreeView) SendMessage(hwnd,WM_COMMAND,IDM_MATERIALTREE_OPEN,0);
359 }
360 if(hdr->code==TVN_ITEMEXPANDEDW||hdr->code==TVN_ITEMEXPANDED){
361 NMTREEVIEW *nmTreeView;
362 TVITEM tvItem;
363 nmTreeView=(NMTREEVIEW *)lParam;
364 tvItem.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
365 tvItem.hItem=nmTreeView->itemNew.hItem;
366 TreeView_GetItem(nmTreeView->hdr.hwndFrom,&tvItem);
367 if(tvItem.iImage==0||tvItem.iImage==1){
368 if(nmTreeView->action==TVE_EXPAND){
369 tvItem.iImage=1;
370 tvItem.iSelectedImage=1;
371 }
372 else if(nmTreeView->action==TVE_COLLAPSE){
373 tvItem.iImage=0;
374 tvItem.iSelectedImage=0;
375 }
376 tvItem.hItem=nmTreeView->itemNew.hItem;
377 TreeView_SetItem(nmTreeView->hdr.hwndFrom,&tvItem);
378 }
379 }
380 break;
381 }
382 return CallWindowProc(OldTabProc,hwnd,message,wParam,lParam);
383}
384void ResizeProjectView_ToolWindow(void){
385 extern HWND hProjectView_ToolWindow;
386 RECT rect;
387 GetClientRect(hProjectView_ToolWindow,&rect);
388 SendMessage(hProjectView_ToolWindow,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
389}
390LRESULT CALLBACK ProjectView_ToolWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
391 extern HWND hProjectView;
392 switch(message){
393 case WM_SIZE:
394 MoveWindow(hProjectView,0,0,
395 LOWORD(lParam),
396 HIWORD(lParam),1);
397 return 0;
398 case WM_CLOSE:
399 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
400 return 0;
401 }
402 return DefWindowProc(hwnd,message,wParam,lParam);
403}
[84]404void ShowFileView(){
405 TabCtrl_SetCurSel(hProjectViewTab,0);
406 ShowWindow(pobj_FileTree->hTree,SW_SHOW);
407 ShowWindow(hProcedureTreeView,SW_HIDE);
408 ShowWindow(hMaterialTreeView,SW_HIDE);
409}
410void ShowClassView(){
411 TabCtrl_SetCurSel(hProjectViewTab,1);
412 ShowWindow(pobj_FileTree->hTree,SW_HIDE);
413 ShowWindow(hMaterialTreeView,SW_HIDE);
414 ShowWindow(hProcedureTreeView,SW_SHOW);
415}
416void ShowMaterialView(){
417 TabCtrl_SetCurSel(hProjectViewTab,2);
418 ShowWindow(pobj_FileTree->hTree,SW_HIDE);
419 ShowWindow(hProcedureTreeView,SW_HIDE);
420 ShowWindow(hMaterialTreeView,SW_SHOW);
421}
[3]422LRESULT CALLBACK ProjectViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
423 extern HINSTANCE hInst,hResInst;
424 extern PROJECTINFO ProjectInfo;
425 extern HWND hTabOfProjectView;
426 extern HFONT hStatusFont;
427 extern HWND hProjectView_ToolWindow;
428 RECT rect;
429 HWND hButton;
430
431 switch(message){
432 case WM_CREATE:
433 hProjectViewTab=CreateWindow(WC_TABCONTROL,NULL,
434 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
435 0,0,0,0,hwnd,0,hInst,0);
436 SendMessage(hProjectViewTab,WM_SETFONT,(long)hStatusFont,0);
437
438 hButton=CreateWindow("BUTTON","↓",WS_CHILD|WS_VISIBLE,
439 0,0,30,13,
440 hwnd,(HMENU)IDC_CLIP,hInst,0);
441 SendMessage(hButton,WM_SETFONT,(long)hStatusFont,0);
442
[302]443 OldTabProc=(WNDPROC)GetWindowLongPtr(hProjectViewTab,GWLP_WNDPROC);
444 SetWindowLongPtr(hProjectViewTab,GWLP_WNDPROC,(long)TabProc);
[3]445
446 //タブを設定
447 TC_ITEM tcItem;
448 tcItem.mask=TCIF_TEXT;
449 tcItem.pszText="File";
450 TabCtrl_InsertItem(hProjectViewTab,0,&tcItem);
451 tcItem.mask=TCIF_TEXT;
452 tcItem.pszText="Class";
453 TabCtrl_InsertItem(hProjectViewTab,1,&tcItem);
454 tcItem.mask=TCIF_TEXT;
455 tcItem.pszText="Material";
456 TabCtrl_InsertItem(hProjectViewTab,2,&tcItem);
457
458 //ファイルツリービューを作成
459 pobj_FileTree=new CFileTree(hProjectViewTab);
460
461 //クラスツリービューを作成
462 hProcedureTreeView=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
463 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
464 0,0,0,0,
465 hProjectViewTab,0,hInst,0);
[302]466 OldProcedureTreeViewProc=(WNDPROC)GetWindowLongPtr(hProcedureTreeView,GWLP_WNDPROC);
467 SetWindowLongPtr(hProcedureTreeView,GWLP_WNDPROC,(long)ProcedureTreeViewProc);
[3]468 //イメージリスト読み込み、設定
469 hProcedureTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,8,0);
470 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
471 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
472 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROCEDURE)));
473 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROGRAM_FOLDER)));
474 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_VARIABLE)));
475 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_FUNCTION)));
476 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_VARIABLE)));
477 ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_FUNCTION)));
478 TreeView_SetImageList(hProcedureTreeView,hProcedureTreeViewImageList,TVSIL_NORMAL);
479
480 //マテリアルツリービューを作成
481 hMaterialTreeView=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
482 WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
483 0,0,0,0,
484 hProjectViewTab,0,hInst,0);
[302]485 OldMaterialTreeViewProc=(WNDPROC)GetWindowLongPtr(hMaterialTreeView,GWLP_WNDPROC);
486 SetWindowLongPtr(hMaterialTreeView,GWLP_WNDPROC,(long)MaterialTreeViewProc);
[3]487 //イメージリスト読み込み、設定
488 hMaterialTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
489 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
490 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
491 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_WINDOW)));
492 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MENU)));
493 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_ICON)));
494 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_BMP)));
495 ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_CURSOR)));
496 TreeView_SetImageList(hMaterialTreeView,hMaterialTreeViewImageList,TVSIL_NORMAL);
497
498 ShowWindow(pobj_FileTree->hTree,SW_SHOW);
499 GetClientRect(hwnd,&rect);
500 SendMessage(hwnd,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
501 return 0;
502 case WM_COMMAND:
503 switch(LOWORD(wParam)){
504 case IDC_CLIP:
505 if(pobj_nv->bClipProjectView==0){
506 pobj_nv->bClipProjectView=1;
507
[302]508 SetWindowLongPtr(hwnd,GWL_EXSTYLE,WS_EX_STATICEDGE);
[3]509 SetParent(hwnd,hOwner);
510 ResizeOwnerWnd();
511
512 ShowWindow(hProjectView_ToolWindow,SW_HIDE);
513 }
514 else{
515 pobj_nv->bClipProjectView=0;
516
[302]517 SetWindowLongPtr(hwnd,GWL_EXSTYLE,0);
[3]518
519 SetParent(hwnd,hProjectView_ToolWindow);
520
521 ResizeOwnerWnd();
522 ResizeProjectView_ToolWindow();
523
524 ShowWindow(hProjectView_ToolWindow,SW_SHOW);
525 }
526 return 0;
527 }
528 break;
529 case WM_NOTIFY:
530 NMHDR *hdr;
531 hdr=(NMHDR *)lParam;
532 if(hdr->hwndFrom==hProjectViewTab&&hdr->code==TCN_SELCHANGE){
[84]533 switch( TabCtrl_GetCurSel(hProjectViewTab) ){
534 case 0:
535 ShowFileView();
536 break;
537 case 1:
538 ShowClassView();
539 break;
540 case 2:
541 ShowMaterialView();
542 break;
[3]543 }
544 }
545 return 0;
546 case WM_PAINT:
547 PAINTSTRUCT ps;
548 HDC hdc;
549 HFONT hOldFont;
550 SIZE size;
551 HBRUSH hBrush,hOldBrush;
552 HPEN hPen,hOldPen;
553 char temporary[MAX_PATH];
554
555 if(pobj_nv->bClipProjectView==0) break;
556
557 hBrush=CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
558 hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW));
559
560 hdc=BeginPaint(hwnd,&ps);
561
562 hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
[81]563 if( ProjectInfo.name[0] ){
564 sprintf(temporary,"%s \'%s\'",STRING_PROJECT,ProjectInfo.name);
565 }
566 else{
567 lstrcpy( temporary, "現在のドキュメント" );
568 }
[3]569
570 GetTextExtentPoint32(hdc,temporary,lstrlen(temporary),&size);
571 GetClientRect(hwnd,&rect);
572 rect.left++;
573 rect.top++;
574 rect.right--;
575 rect.bottom=size.cy+2;
576
577 hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
578 hOldPen=(HPEN)SelectObject(hdc,hPen);
579 Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
580 SelectObject(hdc,hOldBrush);
581 SelectObject(hdc,hPen);
582
583 rect.top++;
584 rect.bottom--;
585 SetBkMode(hdc,OPAQUE);
586 SetBkColor(hdc,GetSysColor(COLOR_3DSHADOW));
587 SetTextColor(hdc,GetSysColor(COLOR_3DHILIGHT));
588 DrawText(hdc,temporary,lstrlen(temporary),&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
589
590 EndPaint(hwnd,&ps);
591
592 DeleteObject(hBrush);
593 DeleteObject(hPen);
594 return 0;
595 case WM_SIZE:
596 if(pobj_nv->bClipProjectView){
597 MoveWindow(hProjectViewTab,
598 LEVER_THICK,
599 LEVER_THICK+11,
600 LOWORD(lParam)-LEVER_THICK*2,
601 HIWORD(lParam)-LEVER_THICK*2-21,1);
602
603 GetClientRect(hProjectViewTab,&rect);
604 TabCtrl_AdjustRect(hProjectViewTab,FALSE,&rect);
605 rect.left-=2;
606 rect.right++;
607 rect.bottom++;
608
609 pobj_FileTree->resize(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top);
610 MoveWindow(hProcedureTreeView,
611 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
612 MoveWindow(hMaterialTreeView,
613 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
614
615 GetClientRect(GetDlgItem(hwnd,IDC_CLIP),&rect);
616 MoveWindow(GetDlgItem(hwnd,IDC_CLIP),LOWORD(lParam)-rect.right,HIWORD(lParam)-rect.bottom,rect.right,rect.bottom,1);
617 InvalidateRect(GetDlgItem(hwnd,IDC_CLIP),NULL,0);
618 }
619 else{
620 MoveWindow(hProjectViewTab,0,0,
621 LOWORD(lParam),
622 HIWORD(lParam)-15,1);
623
624 GetClientRect(hProjectViewTab,&rect);
625 TabCtrl_AdjustRect(hProjectViewTab,FALSE,&rect);
626
627 pobj_FileTree->resize(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top);
628 MoveWindow(hProcedureTreeView,
629 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
630 MoveWindow(hMaterialTreeView,
631 rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
632
633 GetClientRect(GetDlgItem(hwnd,IDC_CLIP),&rect);
634 MoveWindow(GetDlgItem(hwnd,IDC_CLIP),LOWORD(lParam)-rect.right,HIWORD(lParam)-rect.bottom,rect.right,rect.bottom,1);
635 }
636 return 0;
637 case WM_CLOSE:
638 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
639 return 0;
640 case WM_DESTROY:
641 delete pobj_FileTree;
642 ImageList_Destroy(hProcedureTreeViewImageList);
643 ImageList_Destroy(hMaterialTreeViewImageList);
644 return 0;
645 }
646 return DefWindowProc(hwnd,message,wParam,lParam);
647}
648
649void Project_File_Insert(char *path){
650 extern HANDLE hHeap;
651 extern PROJECTINFO ProjectInfo;
652 char temporary[MAX_PATH],temp2[MAX_PATH];
653
654 GetRelationalPath(path,ProjectInfo.dir);
655
656 //重複チェック
657 if(ProjectInfo.pobj_DBFileInfo->dupli_check(path)){
658 //"\"%s\" ファイルは既にプロジェクト内に存在します。"
659 sprintf(temporary,STRING_DUPLICATIONERROR_FILE_IN_PROJECT,path);
660 MessageBox(hOwner,temporary,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
661 return;
662 }
663
664
665 //////////////////////
666 //ツリービューに追加
667 HTREEITEM hTreeItem;
668 _splitpath(path,0,0,temporary,temp2);
669 lstrcat(temporary,temp2);
670 hTreeItem=pobj_FileTree->insert(temporary);
671
672
673 //ProjectInfo.ppobj_DBFileInfoオブジェクトに追加
674 ProjectInfo.pobj_DBFileInfo->add(path,hTreeItem);
675
676
677 ProjectInfo.modify=1;
678
679 //ファイル操作によるクラスビューの再表示
680 ResetClassTree(-1);
681}
682void Project_File_Delete(HTREEITEM hTreeItem){
683 extern HANDLE hHeap;
684 extern PROJECTINFO ProjectInfo;
685
686 if(ProjectInfo.pobj_DBFileInfo->IsMainFile(hTreeItem)){
687 //"このファイルはプロジェクトのメイン ファイルです。プロジェクト内から削除することはできません。"
688 MessageBox(hOwner,STRING_ERROR_CANT_MAINFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
689 return;
690 }
691
692 //ツリービューから削除
693 TreeView_DeleteItem(pobj_FileTree->hTree,hTreeItem);
694
695 //ProjectInfo.pobj_DBFileInfoオブジェクトから削除
696 ProjectInfo.pobj_DBFileInfo->del(hTreeItem);
697
698 ProjectInfo.modify=1;
699
700 //ファイル操作によるクラスビューの再表示
701 ResetClassTree(-1);
702}
703
704void MakeNewProject(){
705 extern HANDLE hHeap;
706 extern NEWPROJECTINFO NewProjectInfo;
707 int i;
708 char buffer[GENERAL_SIZE],dir[MAX_PATH],temporary[MAX_PATH],*pTemp;
709 HANDLE hFind;
710 WIN32_FIND_DATA wfd;
711
712 //既にプロジェクトが開かれている場合は閉じる
713 extern PROJECTINFO ProjectInfo;
714 if(ProjectInfo.name[0]){
715 if(!CloseProject()) return;
716 }
717
718 //ワークディレクトリを作成
719 i=lstrlen(pobj_nv->ProjectSaveDir);
720 if(pobj_nv->ProjectSaveDir[i-1]=='\\'&&pobj_nv->ProjectSaveDir[i-2]!=':') pobj_nv->ProjectSaveDir[i-1]=0;
721 sprintf(dir,"%s\\%s\\",pobj_nv->ProjectSaveDir,NewProjectInfo.name);
722 i=0;
723 while(!(dir[i]==':'||(dir[i-1]=='\\'&&dir[i]=='\\'))) i++;
724 if(dir[i]==':') i++;
725 else{
726 i++;
727 while(dir[i]!='\\') i++;
728 }
729 for(i++;;i++){
730 if(dir[i]=='\\'){
731 lstrcpy(temporary,dir);
732 temporary[i]=0;
733 hFind=FindFirstFile(temporary,&wfd);
734 if(hFind==INVALID_HANDLE_VALUE){
735 if(!CreateDirectory(temporary,NULL)){
736 MessageBox(hOwner,"ディレクトリを作成できませんでした",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
737 return;
738 }
739 }
740 else FindClose(hFind);
741 }
742 if(dir[i]=='\0') break;
743 }
744
745
746 //////////////////////////////////////
747 // プロジェクトファイル(*.pj)を作成
748 //////////////////////////////////////
749
[608]750 // 出力先拡張子
751 const std::string outputFileExt
752 = ( NewProjectInfo.dwTypeID == IDC_DLL ) ? ".dll"
753 : ( NewProjectInfo.dwTypeID == IDC_SLL ) ? ".lib"
754 : ".exe";
755
[3]756 //先頭の注釈
757 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
758 i=lstrlen(buffer);
759
760 //プロジェクトのフォーマットバージョン
761 sprintf(buffer+i,"#VERSION=%d\r\n\r\n",PROJECT_VERSION);
762 i+=lstrlen(buffer+i);
763
764 //モジュールタイプ(EXEならば0、DLLならば1)
[608]765 ActiveBasic::Common::TargetModuleType::EnumType moduleType
766 = ( NewProjectInfo.dwTypeID == IDC_DLL ) ? ActiveBasic::Common::TargetModuleType::Dll
767 : ( NewProjectInfo.dwTypeID == IDC_SLL ) ? ActiveBasic::Common::TargetModuleType::Sll
768 : ActiveBasic::Common::TargetModuleType::Exe;
769 lstrcpy(buffer+i,( (std::string)"#MODULETYPE=" + Jenga::Common::ToString( static_cast<int>(moduleType) ) + "\r\n\r\n" ).c_str());
[3]770 i+=lstrlen(buffer+i);
771
772 //プロジェクト名
773 sprintf(buffer+i,"#NAME=%s\r\n\r\n",NewProjectInfo.name);
774 i+=lstrlen(buffer+i);
775
776 lstrcpy(buffer+i,"#PLATFORM=32\r\n\r\n");
777 i+=lstrlen(buffer+i);
778
779 //RADウィンドウの数
780 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
781 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
782 lstrcpy(buffer+i,"#USEWINDOW=1\r\n\r\n");
783 else lstrcpy(buffer+i,"#USEWINDOW=0\r\n\r\n");
784 i+=lstrlen(buffer+i);
785
786 //プロジェクトオプション
787 sprintf(buffer+i,"#OPTION=&H%08x\r\n\r\n",NewProjectInfo.dwOption);
788 i+=lstrlen(buffer+i);
789
790 //出力先(Release)
[608]791 sprintf(buffer+i,"#OUTPUT_RELEASE=.\\%s%s\r\n\r\n",NewProjectInfo.name, outputFileExt.c_str());
[3]792 i+=lstrlen(buffer+i);
793
794 //出力先(Debug)
[608]795 sprintf(buffer+i,"#OUTPUT_DEBUG=.\\%s_debug%s\r\n\r\n",NewProjectInfo.name, outputFileExt.c_str());
[3]796 i+=lstrlen(buffer+i);
797
798 //マニフェスト
799 sprintf(buffer+i,"#MANIFEST=%s.manifest.xml\r\n\r\n",NewProjectInfo.name);
800 i+=lstrlen(buffer+i);
801
802 //デバッグ用(コマンドライン)
803 lstrcpy(buffer+i,"#DEBUG_CMD_LINE=\r\n\r\n");
804 i+=lstrlen(buffer+i);
805
806 //デバッグ用(DLL用の実行ファイル)
807 lstrcpy(buffer+i,"#DEBUG_EXE_PATH=\r\n\r\n");
808 i+=lstrlen(buffer+i);
809
810 //リソースファイル
811 lstrcpy(buffer+i,"#RESOURCE=0\r\n\r\n");
812 i+=lstrlen(buffer+i);
813
814 //ソースファイル
815 sprintf(buffer+i,"#SOURCE\r\n%s.ab\r\n",NewProjectInfo.name);
816 i+=lstrlen(buffer+i);
817 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
818 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
819 lstrcpy(buffer+i,"MainWnd.ab\r\n");
820 i+=lstrlen(buffer+i);
821 }
822 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
823 lstrcpy(buffer+i,"dx_graphics.sbp\r\n");
824 i+=lstrlen(buffer+i);
825 lstrcpy(buffer+i,"dx_input.sbp\r\n");
826 i+=lstrlen(buffer+i);
827 lstrcpy(buffer+i,"dx_music.sbp\r\n");
828 i+=lstrlen(buffer+i);
829 }
830
831 //保存
832 sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
833 if(hFind=FindFirstFile(temporary,&wfd)){
834 if(hFind!=INVALID_HANDLE_VALUE){
835 FindClose(hFind);
836
837 //"指定したディレクトリにはすでにプロジェクトが存在します。上書きしますか?"
838 if(MessageBox(hOwner,STRING_ERROR_PROJECT_OVERWRITE,APPLICATION_NAME,MB_YESNO|MB_ICONEXCLAMATION)==IDNO) return;
839 }
840 }
841 if(!WriteBuffer(temporary,buffer,i)) return;
842
843
844 ///////////////////////////////////////////
845 //メインプログラムファイル(*.ab)を作成
846 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
847 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
848 i=lstrlen(buffer);
849 lstrcpy(buffer+i,"'---------------------------\r\n");
850 i+=lstrlen(buffer+i);
851 lstrcpy(buffer+i,"' Window Message Loop\r\n");
852 i+=lstrlen(buffer+i);
853 lstrcpy(buffer+i,"'---------------------------\r\n");
854 i+=lstrlen(buffer+i);
855 lstrcpy(buffer+i,"Dim msgMain As MSG, iResult As Long\r\n");
856 i+=lstrlen(buffer+i);
857 lstrcpy(buffer+i,"Do\r\n");
858 i+=lstrlen(buffer+i);
859 lstrcpy(buffer+i,"\tiResult=GetMessage(msgMain,0,0,0)\r\n");
860 i+=lstrlen(buffer+i);
861 lstrcpy(buffer+i,"\tIf iResult=0 or iResult=-1 Then Exit Do\r\n");
862 i+=lstrlen(buffer+i);
863 lstrcpy(buffer+i,"\tTranslateMessage(msgMain)\r\n");
864 i+=lstrlen(buffer+i);
865 lstrcpy(buffer+i,"\tDispatchMessage(msgMain)\r\n");
866 i+=lstrlen(buffer+i);
867 lstrcpy(buffer+i,"Loop\r\n\r\n");
868 i+=lstrlen(buffer+i);
869 lstrcpy(buffer+i,"' Call destructores and exit process\r\n");
870 i+=lstrlen(buffer+i);
871 lstrcpy(buffer+i,"End\r\n");
872 i+=lstrlen(buffer+i);
873 }
874 else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
875 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
876 i=lstrlen(buffer);
877 lstrcpy(buffer+i,"#N88BASIC\r\n\r\n");
878 i+=lstrlen(buffer+i);
879 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
880 i+=lstrlen(buffer+i);
881 if(NewProjectInfo.ShowHelloWorld){
882 lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
883 i+=lstrlen(buffer+i);
884 }
885 }
886 else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
887 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
888 i=lstrlen(buffer);
889 lstrcpy(buffer+i,"#console\r\n\r\n");
890 i+=lstrlen(buffer+i);
891 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
892 i+=lstrlen(buffer+i);
893 if(NewProjectInfo.ShowHelloWorld){
894 lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
895 i+=lstrlen(buffer+i);
896 }
897 }
898 else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
899 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
900 i=lstrlen(buffer);
901 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
902 i+=lstrlen(buffer+i);
903 }
904 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
[477]905 const std::string mainExeDirectXAbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\main_exe_directx.abp";
[475]906 pTemp = ReadBuffer( mainExeDirectXAbpPath );
[3]907
908 //#name#をプロジェクト名に置換
909 pTemp=PermutationWndPgmTemplate(pTemp,NewProjectInfo.name,0,0,0);
910 }
911 else if(NewProjectInfo.dwTypeID==IDC_DLL){
912 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
913 i=lstrlen(buffer);
914 lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
915 i+=lstrlen(buffer+i);
916 lstrcpy(buffer+i,"' メモ - このファイルには、DLLの構成要素を記述します。\r\n");
917 i+=lstrlen(buffer+i);
918 lstrcpy(buffer+i,"' (例:関数定義、グローバル変数、定数定義など)\r\n");
919 i+=lstrlen(buffer+i);
920 lstrcpy(buffer+i,"'\r\n");
921 i+=lstrlen(buffer+i);
922 lstrcpy(buffer+i,"' エクスポートが必要な関数には、\"Export\" 修飾子を指定します。\r\n");
923 i+=lstrlen(buffer+i);
924 lstrcpy(buffer+i,"' (例:Function Export FuncName() As Long)\r\n");
925 i+=lstrlen(buffer+i);
926 lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
927 i+=lstrlen(buffer+i);
928 lstrcpy(buffer+i,"\r\n");
929 i+=lstrlen(buffer+i);
930 lstrcpy(buffer+i,"Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long\r\n");
931 i+=lstrlen(buffer+i);
932 lstrcpy(buffer+i,"\t'DLLエントリポイント\r\n");
933 i+=lstrlen(buffer+i);
934 lstrcpy(buffer+i,"\tSelect Case fdwReason\r\n");
935 i+=lstrlen(buffer+i);
936 lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_ATTACH\r\n");
937 i+=lstrlen(buffer+i);
938 lstrcpy(buffer+i,"\t\t\t'DLLがプロセス空間にロードされた時に実行されます。\r\n");
939 i+=lstrlen(buffer+i);
940 lstrcpy(buffer+i,"\t\t\t_System_StartupProgram()\r\n");
941 i+=lstrlen(buffer+i);
942 lstrcpy(buffer+i,"\t\t\tDllMain=1\r\n");
943 i+=lstrlen(buffer+i);
944 lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_DETACH\r\n");
945 i+=lstrlen(buffer+i);
946 lstrcpy(buffer+i,"\t\t\t_System_Call_Destructor_of_GlobalObject()\r\n");
947 i+=lstrlen(buffer+i);
948 lstrcpy(buffer+i,"\tEnd Select\r\n");
949 i+=lstrlen(buffer+i);
950 lstrcpy(buffer+i,"End Function\r\n");
951 i+=lstrlen(buffer+i);
952 lstrcpy(buffer+i,"\r\n");
953 i+=lstrlen(buffer+i);
954 }
[608]955 else if( NewProjectInfo.dwTypeID == IDC_SLL )
956 {
957 buffer[0] = 0;
958 }
[3]959
960 //保存
961 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
962 sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
963 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
964
965 HeapDefaultFree(pTemp);
966 }
967 else{
968 sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
[608]969 if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
[3]970 }
971
972
973 /////////////////////
974 // MainWnd.abを作成
975 /////////////////////
976
[475]977 std::string mainWndSbpPath = "";
978 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
979 {
[477]980 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_windowbase.sbp";
[3]981 }
982 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
[475]983 {
[477]984 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_directx.sbp";
[475]985 }
[3]986
[475]987 if( !mainWndSbpPath.empty() ){
988 pTemp = ReadBuffer( mainWndSbpPath );
[3]989
990 //#name#をプロジェクト名に置換
991 pTemp=PermutationWndPgmTemplate(pTemp,
992 NewProjectInfo.name,
993 "MainWnd",
994 "hMainWnd",
995 "MainWndProc");
996
997 if(NewProjectInfo.ShowHelloWorld){
998 //Hello World!表示
999 i=0;
1000 lstrcpy(buffer+i,"\r\nSub MainWnd_Paint(hDC As HDC)\r\n");
1001 i+=lstrlen(buffer+i);
1002 lstrcpy(buffer+i,"\tDim rect As RECT\r\n");
1003 i+=lstrlen(buffer+i);
1004 lstrcpy(buffer+i,"\tGetClientRect(hMainWnd,rect)\r\n");
1005 i+=lstrlen(buffer+i);
1006 lstrcpy(buffer+i,"\tDrawText(hDC,\"Hello World!\",-1,rect,DT_CENTER or DT_VCENTER or DT_SINGLELINE)\r\n");
1007 i+=lstrlen(buffer+i);
1008 lstrcpy(buffer+i,"End Sub\r\n");
1009 i+=lstrlen(buffer+i);
1010
1011 pTemp=(char *)HeapReAlloc(hHeap,0,pTemp,lstrlen(pTemp)+lstrlen(buffer)+1);
1012 lstrcat(pTemp,buffer);
1013 }
1014
1015 sprintf(temporary,"%sMainWnd.ab",dir,NewProjectInfo.name);
1016 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1017
1018 HeapDefaultFree(pTemp);
1019 }
1020
1021
1022 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
1023 ///////////////////////////
1024 // DirextX対応アプリのとき
1025 ///////////////////////////
1026
1027 //dx_graphics.sbpをコピー
[477]1028 const std::string dxGraphicsSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_graphics.sbp";
[475]1029 pTemp = ReadBuffer( dxGraphicsSbpPath );
[3]1030 sprintf(temporary,"%sdx_graphics.sbp",dir,NewProjectInfo.name);
1031 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1032 HeapDefaultFree(pTemp);
1033
1034 //dx_input.sbpをコピー
[477]1035 const std::string dxInputSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_input.sbp";
[475]1036 pTemp = ReadBuffer( dxInputSbpPath );
[3]1037 sprintf(temporary,"%sdx_input.sbp",dir,NewProjectInfo.name);
1038 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1039 HeapDefaultFree(pTemp);
1040
1041 //dx_music.sbpをコピー
[477]1042 const std::string dxMusicSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_music.sbp";
[475]1043 pTemp = ReadBuffer( dxMusicSbpPath );
[3]1044 sprintf(temporary,"%sdx_music.sbp",dir,NewProjectInfo.name);
1045 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1046 HeapDefaultFree(pTemp);
1047
1048 //dx9abm.dllをコピー
1049 sprintf(temporary,"%sRuntime\\dx9abm.dll",pj_editor_Dir);
1050 sprintf(buffer,"%sdx9abm.dll",dir,NewProjectInfo.name);
1051 CopyFile(temporary,buffer,0);
1052 }
1053
1054
1055 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
1056 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
1057 /////////////////////////////////////////
1058 // ウィンドウ定義ファイル(*.wnd)を作成
1059 /////////////////////////////////////////
[609]1060 std::vector<WINDOW_INFO> windowInfos;
1061 windowInfos.push_back( WINDOW_INFO() );
1062 windowInfos.back().name="MainWnd";
1063 windowInfos.back().HandleName="hMainWnd";
1064 windowInfos.back().pos.x=CW_USEDEFAULT;
1065 windowInfos.back().pos.y=CW_USEDEFAULT;
1066 windowInfos.back().size.cx=480;
1067 windowInfos.back().size.cy=360;
1068 windowInfos.back().caption=NewProjectInfo.name;
[3]1069 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
[609]1070 windowInfos.back().style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE;
[3]1071 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
[609]1072 windowInfos.back().style=WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU;
1073 windowInfos.back().ExStyle=0;
1074 windowInfos.back().MenuID=0;
1075 windowInfos.back().id=0;
1076 windowInfos.back().bgColor=COLOR_3DFACE;
1077 GetDefaultWindowFont(&windowInfos.back().LogFont);
1078 windowInfos.back().IconResName=0;
1079 windowInfos.back().ClassName="NORMAL";
1080 windowInfos.back().CallBackName="MainWndProc";
1081 windowInfos.back().type=WNDTYPE_DEFAULT;
1082 windowInfos.back().filepath="MainWnd.ab";
1083 windowInfos.back().NumberOfChildWindows=0;
[3]1084 sprintf(temporary,"%s%s.wnd",dir,NewProjectInfo.name);
1085
1086 ProjectInfo.NumberOfMenu=0;
[609]1087 SaveWindowFile( temporary, windowInfos );
[3]1088 }
1089
1090
1091 ////////////////////////
1092 // ワークファイルを作成
1093 ////////////////////////
1094 lstrcpy(buffer,"case4\r\n\r\n");
1095 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
1096 lstrcat(buffer,"rad,MainWnd\r\n\r\n");
1097 }
1098 else{
1099 sprintf(buffer+lstrlen(buffer),"text,\"%s.ab\",0,0,0,0\r\n\r\n",NewProjectInfo.name);
1100 }
1101 lstrcat(buffer,"0\r\n0\r\n0\r\n0,0");
1102 //保存
1103 sprintf(temporary,"%s%s.wrk",dir,NewProjectInfo.name);
1104 if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
1105
1106
1107 //マニフェストを作成
1108 char temp2[MAX_PATH];
[477]1109 const std::string manifestTempXmlPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\manifest_temp.xml";
[3]1110 sprintf(temp2,"%s%s.manifest.xml",dir,NewProjectInfo.name);
[475]1111 CopyFile( manifestTempXmlPath.c_str(), temp2, 0 );
[3]1112
1113
1114 sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
1115 OpenProject(temporary);
1116 SaveProject();
1117}
1118void SetTreeViewForProjectInfo(){
1119 extern HANDLE hHeap;
1120 extern HWND hProjectView;
1121 extern PROJECTINFO ProjectInfo;
1122 int i;
1123 char temporary[MAX_PATH];
1124 TV_INSERTSTRUCT tv;
1125
1126 sprintf(temporary,"%s ",ProjectInfo.name);
1127 lstrcat(temporary,STRING_PROJECT);
1128 SetWindowText(hProjectView,temporary);
1129
1130 tv.hInsertAfter=TVI_SORT;
1131 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
1132
1133 //ファイル ツリー
1134 ProjectInfo.pobj_DBFileInfo->ResetTree();
1135
1136 //関数ツリー
1137 ResetClassTree(-1);
1138
1139 /////////////////////
1140 // マテリアル ツリー
1141
1142 //Cursorリソース フォルダ
1143 sprintf(temporary,"Cursor %s",STRING_RESOURCE);
1144 tv.hParent=TVI_ROOT;
1145 tv.item.iImage=0;
1146 tv.item.iSelectedImage=0;
1147 tv.item.pszText=temporary;
1148 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1149 ProjectInfo.res.hCursorTreeItem=tv.hParent;
1150 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
1151 tv.item.iImage=6;
1152 tv.item.iSelectedImage=6;
1153 tv.item.pszText=ProjectInfo.res.pCursorResInfo[i].IdName;
1154 ProjectInfo.res.pCursorResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1155 }
1156
1157 //Bitmapリソース フォルダ
1158 sprintf(temporary,"Bitmap %s",STRING_RESOURCE);
1159 tv.hParent=TVI_ROOT;
1160 tv.item.iImage=0;
1161 tv.item.iSelectedImage=0;
1162 tv.item.pszText=temporary;
1163 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1164 ProjectInfo.res.hBitmapTreeItem=tv.hParent;
1165 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
1166 tv.item.iImage=5;
1167 tv.item.iSelectedImage=5;
1168 tv.item.pszText=ProjectInfo.res.pBitmapResInfo[i].IdName;
1169 ProjectInfo.res.pBitmapResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1170 }
1171
1172 //Iconリソース フォルダ
1173 sprintf(temporary,"Icon %s",STRING_RESOURCE);
1174 tv.hParent=TVI_ROOT;
1175 tv.item.iImage=0;
1176 tv.item.iSelectedImage=0;
1177 tv.item.pszText=temporary;
1178 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1179 ProjectInfo.res.hIconTreeItem=tv.hParent;
1180 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1181 tv.item.iImage=4;
1182 tv.item.iSelectedImage=4;
1183 if(i==0){
1184 sprintf(temporary,"%s (Main)",ProjectInfo.res.pIconResInfo[i].IdName);
1185 tv.item.pszText=temporary;
1186 }
1187 else tv.item.pszText=ProjectInfo.res.pIconResInfo[i].IdName;
1188 ProjectInfo.res.pIconResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1189 }
1190
1191 //Menuフォルダ
1192 tv.hParent=TVI_ROOT;
1193 tv.item.iImage=0;
1194 tv.item.iSelectedImage=0;
1195 tv.item.pszText="Menu";
1196 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1197 ProjectInfo.hMenuTreeItem=tv.hParent;
1198 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1199 tv.item.iImage=3;
1200 tv.item.iSelectedImage=3;
1201 tv.item.pszText=ProjectInfo.pMenuInfo[i].IdName;
1202 ProjectInfo.pMenuInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1203 }
1204
1205 //Windowフォルダ
1206 tv.hParent=TVI_ROOT;
1207 tv.item.iImage=0;
1208 tv.item.iSelectedImage=0;
1209 tv.item.pszText="Window";
1210 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1211 ProjectInfo.hWindowTreeItem=tv.hParent;
[609]1212 BOOST_FOREACH( WINDOW_INFO &windowInfo, ProjectInfo.windowInfos )
1213 {
[3]1214 tv.item.iImage=2;
1215 tv.item.iSelectedImage=2;
[609]1216 tv.item.pszText = windowInfo.name;
1217 windowInfo.hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
[3]1218 }
1219}
1220void OpenProject(char *path){
1221 extern HANDLE hHeap;
1222 extern PROJECTINFO ProjectInfo;
1223 int i,i2,i3;
1224 char *buffer,temporary[MAX_PATH],temp2[MAX_PATH];
1225
1226 //既にプロジェクトが開かれている場合は閉じる
1227 if(ProjectInfo.name[0]){
1228 if(!CloseProject()) return;
1229 }
1230 memset(&ProjectInfo,0,sizeof(PROJECTINFO));
1231
1232 //プロジェクトの作業ディレクトリを取得
1233 _splitpath(path,ProjectInfo.dir,temporary,0,0);
1234 lstrcat(ProjectInfo.dir,temporary);
1235
1236 //ファイルを開く、保存の初期ディレクトリをセット
1237 lstrcpy(pobj_nv->DefSaveDir,ProjectInfo.dir);
1238
1239
1240 //////////////////////////////////////////
1241 // リソースデータ用領域を確保
1242 ProjectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1243 ProjectInfo.res.NumberOfCursorRes=0;
1244 ProjectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1245 ProjectInfo.res.NumberOfBitmapRes=0;
1246 ProjectInfo.res.pIconResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1247 ProjectInfo.res.NumberOfIconRes=0;
1248
1249
1250 //////////////////////////////////////////
1251 //プロジェクトファイル(*.pj)をオープン
1252 buffer=ReadBuffer(path);
1253 if(!buffer) return;
1254
1255 //解析
1256 ProjectInfo.pobj_DBFileInfo=new CDBFileInfo();
[609]1257 bool isUseWindow = false;
[3]1258 for(i=0;;i++){
1259 if(buffer[i]=='\0') break;
1260 if(buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]=='#'){
1261 for(i+=3,i2=0;;i++,i2++){
1262 if(!IsVariableChar(buffer[i])){
1263 temporary[i2]=0;
1264 break;
1265 }
1266 temporary[i2]=buffer[i];
1267 }
1268 if(lstrcmpi(temporary,"VERSION")==0&&buffer[i]=='='){
1269 for(i++,i2=0;;i++,i2++){
1270 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1271 temporary[i2]=0;
1272 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1273 break;
1274 }
1275 temporary[i2]=buffer[i];
1276 }
1277 ProjectInfo.dwVersion=GetValue(temporary);
1278 }
1279 else if(lstrcmpi(temporary,"MODULETYPE")==0&&buffer[i]=='='){
1280 for(i++,i2=0;;i++,i2++){
1281 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1282 temporary[i2]=0;
1283 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1284 break;
1285 }
1286 temporary[i2]=buffer[i];
1287 }
1288 ProjectInfo.dwModuleType=atoi(temporary);
1289 }
1290 else if(lstrcmpi(temporary,"NAME")==0&&buffer[i]=='='){
1291 for(i++,i2=0;;i++,i2++){
1292 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1293 ProjectInfo.name[i2]=0;
1294 break;
1295 }
1296 ProjectInfo.name[i2]=buffer[i];
1297 }
1298 }
1299 else if(lstrcmpi(temporary,"PLATFORM")==0&&buffer[i]=='='){
1300 for(i++,i2=0;;i++,i2++){
1301 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1302 temporary[i2]=0;
1303 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1304 break;
1305 }
1306 temporary[i2]=buffer[i];
1307 }
1308 i2=atoi(temporary);
1309 extern HWND hSelectCompilerCombo;
1310 if(i2==32){
1311 //プラットフォームにWin32を選択
1312 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0);
1313 }
1314 else if(i2==64){
1315 //プラットフォームにWin64を選択
1316 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,1,0);
1317 }
1318 SendMessage(hSelectCompilerCombo,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
1319 }
1320 else if(lstrcmpi(temporary,"USEWINDOW")==0&&buffer[i]=='='){
1321 for(i++,i2=0;;i++,i2++){
1322 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1323 temporary[i2]=0;
1324 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1325 break;
1326 }
1327 temporary[i2]=buffer[i];
1328 }
[609]1329 if( atoi(temporary) > 0 )
1330 {
1331 isUseWindow = true;
1332 }
[3]1333 }
1334 else if(lstrcmpi(temporary,"OPTION")==0&&buffer[i]=='='){
1335 for(i++,i2=0;;i++,i2++){
1336 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1337 temporary[i2]=0;
1338 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1339 break;
1340 }
1341 temporary[i2]=buffer[i];
1342 }
1343 ProjectInfo.dwOption=GetValue(temporary);
1344 }
1345 else if(lstrcmpi(temporary,"OUTPUT_RELEASE")==0&&buffer[i]=='='){
1346 for(i++,i2=0;;i++,i2++){
1347 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1348 temporary[i2]=0;
1349 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1350 break;
1351 }
1352 temporary[i2]=buffer[i];
1353 }
1354 lstrcpy(ProjectInfo.lpszOutput_Release,temporary);
1355 }
1356 else if(lstrcmpi(temporary,"OUTPUT_DEBUG")==0&&buffer[i]=='='){
1357 for(i++,i2=0;;i++,i2++){
1358 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1359 temporary[i2]=0;
1360 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1361 break;
1362 }
1363 temporary[i2]=buffer[i];
1364 }
1365 lstrcpy(ProjectInfo.lpszOutput_Debug,temporary);
1366 }
1367 else if(lstrcmpi(temporary,"MANIFEST")==0&&buffer[i]=='='){
1368 for(i++,i2=0;;i++,i2++){
1369 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1370 temporary[i2]=0;
1371 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1372 break;
1373 }
1374 temporary[i2]=buffer[i];
1375 }
1376 lstrcpy(ProjectInfo.szManifestPath,temporary);
1377 }
1378 else if(lstrcmpi(temporary,"DEBUG_CMD_LINE")==0&&buffer[i]=='='){
1379 for(i++,i2=0;;i++,i2++){
1380 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1381 temporary[i2]=0;
1382 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1383 break;
1384 }
1385 temporary[i2]=buffer[i];
1386 }
1387 lstrcpy(ProjectInfo.szCmdLine,temporary);
1388 }
1389 else if(lstrcmpi(temporary,"DEBUG_EXE_PATH")==0&&buffer[i]=='='){
1390 for(i++,i2=0;;i++,i2++){
1391 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1392 temporary[i2]=0;
1393 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1394 break;
1395 }
1396 temporary[i2]=buffer[i];
1397 }
1398 lstrcpy(ProjectInfo.szExePath,temporary);
1399 }
1400 else if(lstrcmpi(temporary,"RESOURCE")==0&&buffer[i]=='='){
1401 for(i++,i2=0;;i++,i2++){
1402 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1403 temporary[i2]=0;
1404 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1405 break;
1406 }
1407 temporary[i2]=buffer[i];
1408 }
1409 if(temporary[0]!='\0'&&(!(temporary[0]=='0'&&temporary[1]=='\0'))){
1410 lstrcpy(ProjectInfo.ResourceFileName,temporary);
1411 GetResourceData();
1412 }
1413 else{
1414 sprintf(ProjectInfo.ResourceFileName,"%s.rc",ProjectInfo.name);
1415 }
1416 }
1417 else if(lstrcmpi(temporary,"SOURCE")==0&&buffer[i]=='\r'&&buffer[i+1]=='\n'){
1418 while(1){
1419 for(i+=2,i2=0;;i++,i2++){
1420 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1421 temporary[i2]=0;
1422 break;
1423 }
1424 temporary[i2]=buffer[i];
1425 }
1426 if(temporary[0]=='\0') break;
1427 ProjectInfo.pobj_DBFileInfo->add(temporary,0);
1428
1429 if(buffer[i]=='\0') break;
1430 }
1431 }
1432 else{
1433 //不明なパラメータは無視
1434 for(i++;;i++){
1435 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1436 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1437 break;
1438 }
1439 }
1440 }
1441 if(buffer[i]=='\0') break;
1442 }
1443 }
1444 HeapDefaultFree(buffer);
1445
1446 //古いバージョンファイルを考慮
1447 if(ProjectInfo.dwVersion<=4){
1448 if(ProjectInfo.dwModuleType==MT_DLL)
1449 sprintf(ProjectInfo.lpszOutput_Release,".\\%s.dll",ProjectInfo.name);
1450 else sprintf(ProjectInfo.lpszOutput_Release,".\\%s.exe",ProjectInfo.name);
1451 sprintf(ProjectInfo.lpszOutput_Debug,".\\%s_debug.exe",ProjectInfo.name);
1452 }
1453
1454 //ブレークポイントを初期化
1455 ProjectInfo.pobj_DBBreakPoint=new CDBBreakPoint();
1456
1457
[609]1458 if( isUseWindow )
1459 {
[3]1460 /////////////////////////////////////////////
1461 //ウィンドウ定義ファイル(*.wnd)をオープン
1462 sprintf(temp2,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
1463 if(!OpenWindowFile(temp2)) return;
1464 }
1465 else{
[609]1466 ProjectInfo.windowInfos.clear();
[3]1467
1468 ProjectInfo.NumberOfMenu=0;
1469 ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1470 }
1471
1472
1473 //プロジェクト ビューを設定、表示
1474 extern HWND hProjectView;
1475 SetTreeViewForProjectInfo();
1476 if(!IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1477
1478
1479 //メニュー状態を設定
1480 ResetState_DocMenu();
1481
1482
1483 //////////////////////////////////////////
1484 //ワークファイル(*.wrk)をオープン
1485 extern MDIINFO MdiInfo[MAX_WNDNUM];
1486 HTREEITEM hTreeItem;
1487 HANDLE hFind;
1488 WIN32_FIND_DATA wfd;
1489 HWND hChild;
1490 int WndNum;
1491 sprintf(temp2,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
1492 hFind=FindFirstFile(temp2,&wfd);
1493 if(hFind!=INVALID_HANDLE_VALUE){
1494 FindClose(hFind);
1495 buffer=ReadBuffer(temp2);
1496 if(!buffer) return;
1497
1498 //解析、反映
1499 memcpy(temporary,buffer,5);
1500 temporary[5]=0;
1501 if(lstrcmp(temporary,"case4")==0){
1502
1503 LockWindowUpdate(hOwner);
1504 for(i=9,i2=0;;i++,i2++){
1505 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1506 if(i2!=0){
1507 temporary[i2]=0;
1508 for(i3=0;;i3++){
1509 if(temporary[i3]==','||temporary[i3]=='\0') break;
1510 }
1511 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1512 lstrcpy(temp2,temporary+i3+1);
1513 temporary[i3]=0;
1514 if(lstrcmpi(temporary,"text")==0){
1515 if(temp2[0]!='\"') goto EndToSetWorkFile;
1516
1517 //ファイルを開く
1518 i2=1;
1519 for(i3=0;;i2++,i3++){
1520 if(temp2[i2]=='\"'||temp2[i2]=='\0'){
1521 temporary[i3]=0;
1522 break;
1523 }
1524 temporary[i3]=temp2[i2];
1525 }
1526 GetFullPath(temporary,ProjectInfo.dir);
1527 hChild=OpenFileWithExtension(temporary);
1528 WndNum=GetWndNum(hChild);
1529 if(WndNum==-1){
1530 goto EndToSetWorkFile;
1531 }
1532
1533 //ResetScrollbarが再描画時に呼び出されるので、再描画する
[24]1534 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
1535 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
[3]1536
1537 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1538 if(temp2[i2+1]!=',') goto EndToSetWorkFile;
1539
1540 //以前のスクロール位置を復元
1541 SCROLLINFO si;
1542 POINT pos;
1543 for(i2+=2,i3=0;;i2++,i3++){
1544 if(temp2[i2]==','||temp2[i2]=='\0'){
1545 temporary[i3]=0;
1546 break;
1547 }
1548 temporary[i3]=temp2[i2];
1549 }
1550 sscanf(temporary,"%d",&pos.x);
1551 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1552 for(i2++,i3=0;;i2++,i3++){
1553 if(temp2[i2]==','||temp2[i2]=='\0'){
1554 temporary[i3]=0;
1555 break;
1556 }
1557 temporary[i3]=temp2[i2];
1558 }
1559 sscanf(temporary,"%d",&pos.y);
1560 si.cbSize=sizeof(SCROLLINFO);
1561 si.fMask=SIF_POS;
1562 si.nPos=pos.x;
[24]1563 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si,1);
[3]1564 si.nPos=pos.y;
[24]1565 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si,1);
[3]1566
1567 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1568
1569 //キャレット位置をセット
1570 for(i2++,i3=0;;i2++,i3++){
1571 if(temp2[i2]==','||temp2[i2]=='\0'){
1572 temporary[i3]=0;
1573 break;
1574 }
1575 temporary[i3]=temp2[i2];
1576 }
1577 sscanf(temporary,"%d",&pos.x);
1578 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1579 for(i2++,i3=0;;i2++,i3++){
1580 if(temp2[i2]==','||temp2[i2]=='\0'){
1581 temporary[i3]=0;
1582 break;
1583 }
1584 temporary[i3]=temp2[i2];
1585 }
1586 sscanf(temporary,"%d",&pos.y);
1587 TextEdit_SetSel(WndNum,pos.x,pos.y);
1588 }
1589 else if(lstrcmpi(temporary,"rad")==0){
[609]1590 for(i3=0;i3<static_cast<int>(ProjectInfo.windowInfos.size());i3++){
1591 if(lstrcmpi(ProjectInfo.windowInfos[i3].name,temp2)==0){
[3]1592 NewRadWindow(i3);
1593 break;
1594 }
1595 }
1596 }
1597 else if(lstrcmpi(temporary,"menu")==0){
1598 for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
1599 if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
1600 NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
1601 break;
1602 }
1603 }
1604 }
1605 else if(lstrcmpi(temporary,"icon")==0){
1606 for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
1607 if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
1608 GetFullPath(temp2,ProjectInfo.dir);
1609 NewIconEditWindow(temp2);
1610 break;
1611 }
1612 }
1613 }
1614 i++;
1615 i2=-1;
1616 continue;
1617 }
1618 else break;
1619 }
1620 temporary[i2]=buffer[i];
1621 }
1622
1623 for(i+=2,i2=0;;i++,i2++){
1624 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1625 temporary[i2]=0;
1626 break;
1627 }
1628 temporary[i2]=buffer[i];
1629 }
1630 sscanf(temporary,"%d",&i2);
[84]1631
1632 switch( i2 ){
1633 case 0:
1634 ShowFileView();
1635 break;
1636 case 1:
1637 ShowClassView();
1638 break;
1639 case 2:
1640 ShowMaterialView();
1641 break;
[3]1642 }
[84]1643
[3]1644 if(buffer[i]=='\0') goto EndToSetWorkFile;
1645
1646 for(i+=2,i2=0;;i++,i2++){
1647 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1648 temporary[i2]=0;
1649 break;
1650 }
1651 temporary[i2]=buffer[i];
1652 }
1653 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
1654
1655 for(i+=2,i2=0;;i++,i2++){
1656 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1657 temporary[i2]=0;
1658 break;
1659 }
1660 temporary[i2]=buffer[i];
1661 }
1662 if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
1663
1664 for(i+=2,i2=0;;i++,i2++){
1665 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1666 temporary[i2]=0;
1667 break;
1668 }
1669 temporary[i2]=buffer[i];
1670 }
1671 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1672 i2=0;
1673 while(hTreeItem){
1674 i2=GetOneParameter(temporary,i2,temp2);
1675 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1676 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1677 }
1678 }
1679 else if(lstrcmp(temporary,"case3")==0){
1680 ////////////////////////////////////////
1681 // 古いフォーマットのワークファイル
1682
1683 LockWindowUpdate(hOwner);
1684 for(i=9,i2=0;;i++,i2++){
1685 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1686 if(i2!=0){
1687 temporary[i2]=0;
1688 for(i3=0;;i3++){
1689 if(temporary[i3]==','||temporary[i3]=='\0') break;
1690 }
1691 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1692 lstrcpy(temp2,temporary+i3+1);
1693 temporary[i3]=0;
1694 if(lstrcmpi(temporary,"text")==0){
1695 for(i3=0;;i3++){
1696 if(temp2[i3]==','||temp2[i3]=='\0') break;
1697 }
1698 if(temp2[i3]=='\0') goto EndToSetWorkFile;
1699 lstrcpy(temporary,temp2+i3+1);
1700 temp2[i3]=0;
1701 GetFullPath(temporary,ProjectInfo.dir);
1702 sscanf(temp2,"%d",&i3);
1703
1704 //ファイルを開く
1705 hChild=OpenFileWithExtension(temporary);
1706 WndNum=GetWndNum(hChild);
1707
1708 //キャレット位置をセット
1709 TextEdit_SetSel(WndNum,i3,i3);
1710 }
1711 else if(lstrcmpi(temporary,"rad")==0){
[609]1712 for(i3=0;i3<static_cast<int>(ProjectInfo.windowInfos.size());i3++){
1713 if(lstrcmpi(ProjectInfo.windowInfos[i3].name,temp2)==0){
[3]1714 NewRadWindow(i3);
1715 break;
1716 }
1717 }
1718 }
1719 else if(lstrcmpi(temporary,"menu")==0){
1720 for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
1721 if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
1722 NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
1723 break;
1724 }
1725 }
1726 }
1727 else if(lstrcmpi(temporary,"icon")==0){
1728 for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
1729 if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
1730 GetFullPath(temp2,ProjectInfo.dir);
1731 NewIconEditWindow(temp2);
1732 break;
1733 }
1734 }
1735 }
1736 i++;
1737 i2=-1;
1738 continue;
1739 }
1740 else break;
1741 }
1742 temporary[i2]=buffer[i];
1743 }
1744
1745 for(i+=2,i2=0;;i++,i2++){
1746 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1747 temporary[i2]=0;
1748 break;
1749 }
1750 temporary[i2]=buffer[i];
1751 }
1752 sscanf(temporary,"%d",&i2);
[84]1753
1754 switch( i2 ){
1755 case 0:
1756 ShowFileView();
1757 break;
1758 case 1:
1759 ShowClassView();
1760 break;
1761 case 2:
1762 ShowMaterialView();
1763 break;
[3]1764 }
[84]1765
[3]1766 if(buffer[i]=='\0') goto EndToSetWorkFile;
1767
1768 for(i+=2,i2=0;;i++,i2++){
1769 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1770 temporary[i2]=0;
1771 break;
1772 }
1773 temporary[i2]=buffer[i];
1774 }
1775 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
1776
1777 for(i+=2,i2=0;;i++,i2++){
1778 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1779 temporary[i2]=0;
1780 break;
1781 }
1782 temporary[i2]=buffer[i];
1783 }
1784 if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
1785
1786 for(i+=2,i2=0;;i++,i2++){
1787 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1788 temporary[i2]=0;
1789 break;
1790 }
1791 temporary[i2]=buffer[i];
1792 }
1793 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1794 i2=0;
1795 while(hTreeItem){
1796 i2=GetOneParameter(temporary,i2,temp2);
1797 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1798 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1799 }
1800 }
1801EndToSetWorkFile:
1802 LockWindowUpdate(NULL);
1803 HeapDefaultFree(buffer);
1804 }
1805
1806
1807 //ウィンドウ タイトルを変更
1808 sprintf(temporary,"%s - %s",ProjectInfo.name,APPLICATION_NAME);
1809 SetWindowText(hOwner,temporary);
1810
1811
1812 ProjectInfo.modify=0;
1813 ProjectInfo.ModifyOfMaterial=0;
1814 ProjectInfo.ModifuOfResource=0;
1815}
1816BOOL ProjectModifyCheck(BOOL bRun){
1817 extern MDIINFO MdiInfo[MAX_WNDNUM];
1818 extern PROJECTINFO ProjectInfo;
1819 int i,WndNum,sw;
1820 HWND hChild;
1821 char temporary[MAX_PATH];
1822 if(ProjectInfo.modify||ProjectInfo.ModifyOfMaterial||ProjectInfo.ModifuOfResource){
1823 if(bRun==0||pobj_nv->bSaveCheckProject){
1824 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1825 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
1826 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1827
1828 if(i==IDCANCEL) return 0;
1829 if(i==IDYES) SaveProject();
1830 }
1831 else SaveProject();
1832 return 1;
1833 }
1834 hChild=GetWindow(hClient,GW_CHILD);
1835 while(hChild){
1836 WndNum=GetWndNum(hChild);
1837 sw=0;
1838 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
[24]1839 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
[3]1840 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
1841 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1842 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1843 }
1844 }
1845 }
1846 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1847 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
1848 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1849 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
1850 GetFullPath(temporary,ProjectInfo.dir);
1851 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1852 }
1853 }
1854 }
1855
1856 if(sw){
1857 if(bRun==0||pobj_nv->bSaveCheckProject){
1858 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1859 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
1860 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1861
1862 if(i==IDCANCEL) return 0;
1863 if(i==IDYES) SaveProject();
1864 }
1865 else SaveProject();
1866 return 1;
1867 }
1868 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1869 }
1870 return 2;
1871}
1872_int8 CloseProject(void){
1873 extern HANDLE hHeap;
1874 extern MDIINFO MdiInfo[MAX_WNDNUM];
1875 extern PROJECTINFO ProjectInfo;
1876 int i,i2,WndNum;
1877 HWND hChild,hCloseChild;
1878 char temporary[MAX_PATH];
1879
1880
1881 //保存確認
1882 i=ProjectModifyCheck(0);
1883 if(i==0) return 0;
1884 else if(i==2) MakeWorkFile();
1885
1886 //プロジェクトに関するMDIウィンドウをすべて閉じる
1887 hChild=GetWindow(hClient,GW_CHILD);
1888 while(hChild){
1889 hCloseChild=hChild;
1890 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1891 WndNum=GetWndNum(hCloseChild);
1892 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1893 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
1894 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1895 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
[24]1896
1897 //変更フラグをオフにする
1898 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1899
[3]1900 SendMessage(hCloseChild,WM_CLOSE,0,0);
1901 break;
1902 }
1903 }
1904 }
1905 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
[609]1906 BOOST_FOREACH( const WINDOW_INFO &windowInfo, ProjectInfo.windowInfos )
1907 {
1908 if(lstrcmp(MdiInfo[WndNum].path, windowInfo.name)==0){
[3]1909 SendMessage(hCloseChild,WM_CLOSE,0,0);
1910 break;
1911 }
1912 }
1913 }
1914 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1915 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1916 if(lstrcmp(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
1917 SendMessage(hCloseChild,WM_CLOSE,0,0);
1918 break;
1919 }
1920 }
1921 }
1922 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1923 for(i=0;ProjectInfo.res.NumberOfIconRes;i++){
1924 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
1925 GetFullPath(temporary,ProjectInfo.dir);
1926 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
1927 SendMessage(hCloseChild,WM_CLOSE,0,0);
1928 break;
1929 }
1930 }
1931 }
1932 }
1933
1934 //ファイル情報のメモリを解放
1935 delete ProjectInfo.pobj_DBFileInfo;
1936
1937 //ブレークポイントのオブジェクトを解放
1938 delete ProjectInfo.pobj_DBBreakPoint;
1939
1940 //ウィンドウ情報のメモリを解放
[609]1941 BOOST_FOREACH( WINDOW_INFO &windowInfo, ProjectInfo.windowInfos )
1942 {
1943 HeapDefaultFree(windowInfo.name);
1944 HeapDefaultFree(windowInfo.HandleName);
1945 HeapDefaultFree(windowInfo.caption);
1946 HeapDefaultFree(windowInfo.ClassName);
1947 HeapDefaultFree(windowInfo.CallBackName);
1948 HeapDefaultFree(windowInfo.filepath);
1949 if(windowInfo.MenuID)
1950 HeapDefaultFree(windowInfo.MenuID);
1951 if(windowInfo.IconResName)
1952 HeapDefaultFree(windowInfo.IconResName);
[3]1953
1954 //子ウィンドウのメモリを解放
[609]1955 for(i2=0;i2<windowInfo.NumberOfChildWindows;i2++){
1956 HeapDefaultFree(windowInfo.pChildInfo[i2].IdName);
1957 HeapDefaultFree(windowInfo.pChildInfo[i2].caption);
1958 if(windowInfo.pChildInfo[i2].Control==CT_IMAGEBOX){
[3]1959 //イメージ ボックスの場合
[609]1960 HeapDefaultFree(windowInfo.pChildInfo[i2].ImageCtrlInfo.path);
[3]1961 }
1962 }
[609]1963 HeapDefaultFree(windowInfo.pChildInfo);
[3]1964 }
[609]1965 ProjectInfo.windowInfos.clear();
[3]1966
1967 //メニュー情報のメモリを解放
1968 HeapMenuDataFree(ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu,0);
1969 HeapDefaultFree(ProjectInfo.pMenuInfo);
1970
1971 //リソースのメモリを解放
1972 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
1973 HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].IdName);
1974 HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].path);
1975 }
1976 HeapDefaultFree(ProjectInfo.res.pCursorResInfo);
1977 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
1978 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].IdName);
1979 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].path);
1980 }
1981 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo);
1982 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1983 HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].IdName);
1984 HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].path);
1985 }
1986 HeapDefaultFree(ProjectInfo.res.pIconResInfo);
1987
1988 //プロジェクト ビューを非表示にする
1989 extern HWND hProjectView;
1990 if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1991 SetWindowText(hProjectView,"Project View");
1992
1993 TreeView_DeleteAllItems(pobj_FileTree->hTree);
1994 TreeView_DeleteAllItems(hProcedureTreeView);
1995 TreeView_DeleteAllItems(hMaterialTreeView);
1996
1997 //ウィンドウ タイトルを変更
1998 SetWindowText(hOwner,APPLICATION_NAME);
1999
2000 ProjectInfo.name[0]=0;
2001
2002 //メニュー状態を設定
2003 ResetState_DocMenu();
2004
2005 return 1;
2006}
2007void MakeWorkFile(void){
2008 extern MDIINFO MdiInfo[MAX_WNDNUM];
2009 extern PROJECTINFO ProjectInfo;
2010 int i,i2,WndNum;
2011 char temporary[MAX_PATH],buffer[32767];
2012 HWND hChild;
2013 CHARRANGE CharRange;
2014
2015 //ワークファイル(*.wrk)を作成
2016 lstrcpy(buffer,"case4\r\n\r\n");
2017 i2=lstrlen(buffer);
2018
2019
2020 ///////////////////////
2021 //MDIウィンドウの並び
2022 hChild=GetWindow(GetWindow(hClient,GW_CHILD),GW_HWNDLAST);
2023 while(hChild){
2024 WndNum=GetWndNum(hChild);
2025 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2026 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2027 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
2028 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2029 TextEdit_GetSel(WndNum,&CharRange);
2030
2031 SCROLLINFO si;
2032 POINT pos;
2033 si.cbSize=sizeof(SCROLLINFO);
2034 si.fMask=SIF_POS;
[24]2035 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si);
[3]2036 pos.x=si.nPos;
[24]2037 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si);
[3]2038 pos.y=si.nPos;
2039
2040 sprintf(buffer+i2,"text,\"%s\",%d,%d,%d,%d\r\n",
2041 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path,
2042 pos.x,
2043 pos.y,
2044 CharRange.cpMin,
2045 CharRange.cpMax);
2046 i2+=lstrlen(buffer+i2);
2047 break;
2048 }
2049 }
2050 }
2051 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
[609]2052 BOOST_FOREACH( WINDOW_INFO &windowInfo, ProjectInfo.windowInfos )
2053 {
2054 if(lstrcmpi(MdiInfo[WndNum].path,windowInfo.name)==0){
[3]2055 sprintf(buffer+i2,"rad,%s\r\n",MdiInfo[WndNum].path);
2056 i2+=lstrlen(buffer+i2);
2057 break;
2058 }
2059 }
2060 }
2061 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
2062 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
2063 if(lstrcmpi(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
2064 sprintf(buffer+i2,"menu,%s\r\n",MdiInfo[WndNum].path);
2065 i2+=lstrlen(buffer+i2);
2066 break;
2067 }
2068 }
2069 }
2070 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
2071 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2072 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
2073 GetFullPath(temporary,ProjectInfo.dir);
2074 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2075 sprintf(buffer+i2,"icon,%s\r\n",ProjectInfo.res.pIconResInfo[i].path);
2076 i2+=lstrlen(buffer+i2);
2077 break;
2078 }
2079 }
2080 }
2081 hChild=GetNextWindow(hChild,GW_HWNDPREV);
2082 }
2083 lstrcpy(buffer+i2,"\r\n");
2084 i2+=2;
2085
2086
2087 //////////////////////////
2088 //ツリービューの展開状況
2089 sprintf(buffer+i2,"%d\r\n",TabCtrl_GetCurSel(hProjectViewTab));
2090 i2+=lstrlen(buffer+i2);
2091 TVITEM tvItem;
2092 memset(&tvItem,0,sizeof(TVITEM));
2093 tvItem.mask=TVIF_HANDLE|TVIF_STATE;
2094 tvItem.hItem=TreeView_GetRoot(pobj_FileTree->hTree);
2095 TreeView_GetItem(pobj_FileTree->hTree,&tvItem);
2096 if(tvItem.state&TVIS_EXPANDED) i=1;
2097 else i=0;
2098 sprintf(buffer+i2,"%d\r\n",i);
2099 i2+=lstrlen(buffer+i2);
2100
2101 tvItem.hItem=TreeView_GetRoot(hProcedureTreeView);
2102 TreeView_GetItem(hProcedureTreeView,&tvItem);
2103 if(tvItem.state&TVIS_EXPANDED) i=1;
2104 else i=0;
2105 sprintf(buffer+i2,"%d\r\n",i);
2106 i2+=lstrlen(buffer+i2);
2107
2108 tvItem.hItem=TreeView_GetRoot(hMaterialTreeView);
2109 while(tvItem.hItem){
2110 TreeView_GetItem(hMaterialTreeView,&tvItem);
2111 if(tvItem.state&TVIS_EXPANDED) i=1;
2112 else i=0;
2113 sprintf(buffer+i2,"%d",i);
2114 i2+=lstrlen(buffer+i2);
2115
2116 tvItem.hItem=TreeView_GetNextSibling(hMaterialTreeView,tvItem.hItem);
2117 if(tvItem.hItem){
2118 lstrcpy(buffer+i2,",");
2119 i2+=lstrlen(buffer+i2);
2120 }
2121 }
2122
2123
2124 //保存
2125 sprintf(temporary,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
2126 WriteBuffer(temporary,buffer,i2);
2127}
2128void SaveProject(void){
2129 extern MDIINFO MdiInfo[MAX_WNDNUM];
2130 extern PROJECTINFO ProjectInfo;
2131 int i,i2,i3,WndNum;
2132 char temporary[MAX_PATH],buffer[32767];
2133 HWND hChild;
2134
2135 //"プロジェクトを保存中..."
2136 SetStatusText(STRING_PROJECT_SAVING);
2137
2138 //プロジェクトファイルのバージョンを設定
2139 ProjectInfo.dwVersion=PROJECT_VERSION;
2140
2141 hChild=GetWindow(hClient,GW_CHILD);
2142 while(hChild){
2143 WndNum=GetWndNum(hChild);
2144 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
[24]2145 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
[3]2146 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2147 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
2148 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2149 SaveDocument(hChild,NULL);
2150 break;
2151 }
2152 }
2153 }
2154 }
2155 if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
2156 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
2157 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2158 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
2159 GetFullPath(temporary,ProjectInfo.dir);
2160 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2161 SaveDocument(hChild,NULL);
2162 break;
2163 }
2164 }
2165 }
2166 }
2167 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2168 }
2169
2170
2171 //////////////////////////////////////
2172 //プロジェクトファイル(*.pj)を作成
2173 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
2174 i2=lstrlen(buffer);
2175 sprintf(buffer+i2,"#VERSION=%d\r\n\r\n",ProjectInfo.dwVersion);
2176 i2+=lstrlen(buffer+i2);
2177 sprintf(buffer+i2,"#MODULETYPE=%d\r\n\r\n",ProjectInfo.dwModuleType);
2178 i2+=lstrlen(buffer+i2);
2179 sprintf(buffer+i2,"#NAME=%s\r\n\r\n",ProjectInfo.name);
2180 i2+=lstrlen(buffer+i2);
2181 extern HWND hSelectCompilerCombo;
2182 if(SendMessage(hSelectCompilerCombo,CB_GETCURSEL,0,0)==0){
2183 sprintf(buffer+i2,"#PLATFORM=32\r\n\r\n",ProjectInfo.name);
2184 i2+=lstrlen(buffer+i2);
2185 }
2186 else{
2187 sprintf(buffer+i2,"#PLATFORM=64\r\n\r\n",ProjectInfo.name);
2188 i2+=lstrlen(buffer+i2);
2189 }
[609]2190 sprintf(buffer+i2,"#USEWINDOW=%d\r\n\r\n",ProjectInfo.windowInfos.size());
[3]2191 i2+=lstrlen(buffer+i2);
2192 sprintf(buffer+i2,"#OPTION=&H%08x\r\n\r\n",ProjectInfo.dwOption);
2193 i2+=lstrlen(buffer+i2);
2194 sprintf(buffer+i2,"#OUTPUT_RELEASE=%s\r\n\r\n",ProjectInfo.lpszOutput_Release);
2195 i2+=lstrlen(buffer+i2);
2196 sprintf(buffer+i2,"#OUTPUT_DEBUG=%s\r\n\r\n",ProjectInfo.lpszOutput_Debug);
2197 i2+=lstrlen(buffer+i2);
2198 sprintf(buffer+i2,"#MANIFEST=%s\r\n\r\n",ProjectInfo.szManifestPath);
2199 i2+=lstrlen(buffer+i2);
2200 sprintf(buffer+i2,"#DEBUG_CMD_LINE=%s\r\n\r\n",ProjectInfo.szCmdLine);
2201 i2+=lstrlen(buffer+i2);
2202 sprintf(buffer+i2,"#DEBUG_EXE_PATH=%s\r\n\r\n",ProjectInfo.szExePath);
2203 i2+=lstrlen(buffer+i2);
2204 if(ProjectInfo.ResourceFileName[0]){
2205 sprintf(buffer+i2,"#RESOURCE=%s\r\n\r\n",ProjectInfo.ResourceFileName);
2206 i2+=lstrlen(buffer+i2);
2207 }
2208 else{
2209 lstrcpy(buffer+i2,"#RESOURCE=0\r\n\r\n");
2210 i2+=lstrlen(buffer+i2);
2211 }
2212 sprintf(buffer+i2,"#SOURCE\r\n");
2213 i2+=lstrlen(buffer+i2);
2214 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2215 sprintf(buffer+i2,"%s\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
2216 i2+=lstrlen(buffer+i2);
2217 }
2218
2219 //保存
2220 sprintf(temporary,"%s%s.pj",ProjectInfo.dir,ProjectInfo.name);
2221 WriteBuffer(temporary,buffer,i2);
2222
2223
2224 //////////////////////////////////
2225 // リソースファイル(*.rc、resource.ab)を作成
2226 if(ProjectInfo.ResourceFileName[0]){
2227 i2=0;
2228 i3=101;
2229 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++,i3++){
2230 sprintf(buffer+i2,"Const %s=%d\r\n",
2231 ProjectInfo.res.pCursorResInfo[i].IdName,
2232 i3);
2233 i2+=lstrlen(buffer+i2);
2234 }
2235 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++,i3++){
2236 sprintf(buffer+i2,"Const %s=%d\r\n",
2237 ProjectInfo.res.pBitmapResInfo[i].IdName,
2238 i3);
2239 i2+=lstrlen(buffer+i2);
2240 }
2241 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++,i3++){
2242 sprintf(buffer+i2,"Const %s=%d\r\n",
2243 ProjectInfo.res.pIconResInfo[i].IdName,
2244 i3);
2245 i2+=lstrlen(buffer+i2);
2246 }
2247
2248 //保存(resource.ab)
2249 lstrcpy(temporary,"resource.ab");
2250 GetFullPath(temporary,ProjectInfo.dir);
2251 WriteBuffer(temporary,buffer,i2);
2252
2253 i2=0;
2254 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
2255 sprintf(buffer+i2,"%s CURSOR \"%s\"\r\n",
2256 ProjectInfo.res.pCursorResInfo[i].IdName,
2257 ProjectInfo.res.pCursorResInfo[i].path);
2258 i2+=lstrlen(buffer+i2);
2259 }
2260 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
2261 sprintf(buffer+i2,"%s BITMAP \"%s\"\r\n",
2262 ProjectInfo.res.pBitmapResInfo[i].IdName,
2263 ProjectInfo.res.pBitmapResInfo[i].path);
2264 i2+=lstrlen(buffer+i2);
2265 }
2266 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2267 sprintf(buffer+i2,"%s ICON \"%s\"\r\n",
2268 ProjectInfo.res.pIconResInfo[i].IdName,
2269 ProjectInfo.res.pIconResInfo[i].path);
2270 i2+=lstrlen(buffer+i2);
2271 }
2272
2273 //マニフェスト
2274 if(ProjectInfo.dwOption&PJ_OP_RC_MANIFEST){
2275 sprintf(buffer+i2,"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST \"%s\"\r\n",
2276 ProjectInfo.szManifestPath);
2277 i2+=lstrlen(buffer+i2);
2278 }
2279
2280 //保存
2281 lstrcpy(temporary,ProjectInfo.ResourceFileName);
2282 GetFullPath(temporary,ProjectInfo.dir);
2283 WriteBuffer(temporary,buffer,i2);
2284 }
2285
2286
2287 ///////////////////////////////////////
2288 //インデックスファイル(*.idx)を作成
2289 buffer[0]=0;
2290 lstrcpy(buffer,"' インデックス プログラム\r\n");
2291 i2=lstrlen(buffer);
2292 if(ProjectInfo.dwOption&PJ_OP_SOURCE_MASK){
2293 if(ProjectInfo.dwOption&PJ_OP_STRICT){
[119]2294 /* #strictディレクティブは今は使われていない
2295 lstrcpy(buffer+i2,"\r\n");
2296 i2+=lstrlen(buffer+i2);
2297 lstrcpy(buffer+i2,"#strict");
2298 i2+=lstrlen(buffer+i2);
2299 lstrcpy(buffer+i2,"\r\n");
2300 i2+=lstrlen(buffer+i2);
2301 */
[3]2302 }
2303 lstrcpy(buffer+i2,"\r\n");
2304 i2+=lstrlen(buffer+i2);
2305 lstrcpy(buffer+i2,"'Win32APIの定義ファイル\r\n");
2306 i2+=lstrlen(buffer+i2);
2307 if(ProjectInfo.dwOption&PJ_OP_MMSYSTEM){
2308 lstrcpy(buffer+i2,"#include <api_mmsys.sbp>\r\n");
2309 i2+=lstrlen(buffer+i2);
2310 }
2311 if(ProjectInfo.dwOption&PJ_OP_COMMCTRL){
2312 lstrcpy(buffer+i2,"#include <api_commctrl.sbp>\r\n");
2313 i2+=lstrlen(buffer+i2);
2314 }
2315 if(ProjectInfo.dwOption&PJ_OP_RICHEDIT){
2316 lstrcpy(buffer+i2,"#include <api_richedit.sbp>\r\n");
2317 i2+=lstrlen(buffer+i2);
2318 }
2319 if(ProjectInfo.dwOption&PJ_OP_WINSOCK){
2320 lstrcpy(buffer+i2,"#include <api_winsock2.sbp>\r\n");
2321 i2+=lstrlen(buffer+i2);
2322 }
2323 }
[609]2324 if( !ProjectInfo.windowInfos.empty() )
2325 {
[3]2326 lstrcpy(buffer+i2,"\r\n");
2327 i2+=lstrlen(buffer+i2);
2328 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ制御プログラム\r\n");
2329 i2+=lstrlen(buffer+i2);
2330 sprintf(buffer+i2,"#include \"Callback.wbp\"\r\n");
2331 i2+=lstrlen(buffer+i2);
2332 }
2333 if(ProjectInfo.pobj_DBFileInfo->iNum>1){
2334 lstrcpy(buffer+i2,"\r\n");
2335 i2+=lstrlen(buffer+i2);
2336 lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
2337 i2+=lstrlen(buffer+i2);
2338 for(i=1;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2339 //メインファイルは含まない
2340 sprintf(buffer+i2,"#include \"%s\"\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
2341 i2+=lstrlen(buffer+i2);
[107]2342 lstrcpy(buffer+i2,"_ClearNamespaceImported\r\n");
2343 i2+=lstrlen(buffer+i2);
[3]2344 }
2345 }
[609]2346 if( !ProjectInfo.windowInfos.empty() )
2347 {
[3]2348 lstrcpy(buffer+i2,"\r\n");
2349 i2+=lstrlen(buffer+i2);
2350 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ生成プログラム\r\n");
2351 i2+=lstrlen(buffer+i2);
2352 sprintf(buffer+i2,"#include \"MakeWindow.wbp\"\r\n");
2353 i2+=lstrlen(buffer+i2);
2354 }
2355 if(ProjectInfo.ResourceFileName[0]){
2356 //リソースファイルが含まれる場合
2357 lstrcpy(buffer+i2,"\r\n");
2358 i2+=lstrlen(buffer+i2);
2359 lstrcpy(buffer+i2,"'リソースファイル\r\n");
2360 i2+=lstrlen(buffer+i2);
2361 lstrcpy(buffer+i2,"#include \"resource.ab\"\r\n");
2362 i2+=lstrlen(buffer+i2);
2363 sprintf(buffer+i2,"#resource \"%s.rc\"\r\n",ProjectInfo.name);
2364 i2+=lstrlen(buffer+i2);
2365 }
2366
2367 //保存
2368 sprintf(temporary,"%s%s.idx",ProjectInfo.dir,ProjectInfo.name);
2369 WriteBuffer(temporary,buffer,i2);
2370
2371
[609]2372 if( !ProjectInfo.windowInfos.empty() )
2373 {
[3]2374 /////////////////////////////////////////////////////
2375 //ウィンドウ関連ファイル(*.wnd)を作成、保存
2376 if(ProjectInfo.ModifyOfMaterial){
2377 sprintf(temporary,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
[609]2378 SaveWindowFile( temporary, ProjectInfo.windowInfos );
[3]2379 }
2380
2381 //.wbpファイルを生成
2382 SaveWindowProgram();
2383 }
2384
2385
2386 MakeWorkFile();
2387
2388 SetStatusText("");
2389
2390 ProjectInfo.modify=0;
2391 ProjectInfo.ModifuOfResource=0;
2392}
2393
2394BOOL SetProjectToRun(void){
2395 extern PROJECTINFO ProjectInfo;
2396 HANDLE hFind;
2397 WIN32_FIND_DATA wfd;
2398
2399 if(ProjectInfo.pobj_DBFileInfo->iNum==0){
2400 //"プログラム ファイルがプロジェクトに存在しません。"
2401 MessageBox(hOwner,STRING_ERROR_NOFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2402 return 0;
2403 }
2404
[477]2405 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
2406 hFind=FindFirstFile( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ).c_str(), &wfd );
[3]2407 if(hFind==INVALID_HANDLE_VALUE){
2408 //"BasicCompiler.exe が見つかりません"
2409 MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2410 return 0;
2411 }
2412 FindClose(hFind);
2413
2414 //プロジェクト構造のバージョンが違う時は、再保存する
2415 if(ProjectInfo.dwVersion<PROJECT_VERSION)
2416 ProjectInfo.ModifyOfMaterial=1;
2417
2418 //保存確認
2419 if(!ProjectModifyCheck(1)) return 0;
2420
2421 return 1;
2422}
2423BOOL IsNeedCompileForProject(BOOL bDebug){
2424 extern PROJECTINFO ProjectInfo;
2425 int i2;
2426 char temporary[MAX_PATH];
2427 HANDLE hFind,hFile;
2428 WIN32_FIND_DATA wfd;
2429 FILETIME SourceTime,ExeTime;
2430
2431 if(bDebug) lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
2432 else lstrcpy(temporary,ProjectInfo.lpszOutput_Release);
2433 GetFullPath(temporary,ProjectInfo.dir);
2434
2435 hFind=FindFirstFile(temporary,&wfd);
2436 if(hFind==INVALID_HANDLE_VALUE) return 1;
2437 FindClose(hFind);
2438
2439 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2440 GetFileTime(hFile,NULL,NULL,&ExeTime);
2441 CloseHandle(hFile);
2442
2443 for(i2=0;i2<ProjectInfo.pobj_DBFileInfo->iNum;i2++){
2444 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i2]->GetFullPath(temporary);
2445 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2446 GetFileTime(hFile,NULL,NULL,&SourceTime);
2447 CloseHandle(hFile);
2448
2449 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2450 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2451 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2452 }
[609]2453 if( !ProjectInfo.windowInfos.empty() )
2454 {
[3]2455 //CallBack.wbp
2456 lstrcpy(temporary,"CallBack.wbp");
2457 GetFullPath(temporary,ProjectInfo.dir);
2458 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2459 GetFileTime(hFile,NULL,NULL,&SourceTime);
2460 CloseHandle(hFile);
2461 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2462 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2463 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2464
2465 //MakeWindow.wbp
2466 lstrcpy(temporary,"MakeWindow.wbp");
2467 GetFullPath(temporary,ProjectInfo.dir);
2468 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2469 GetFileTime(hFile,NULL,NULL,&SourceTime);
2470 CloseHandle(hFile);
2471 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2472 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2473 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2474 }
2475 return 0;
2476}
Note: See TracBrowser for help on using the repository browser.