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

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

静的リンクライブラリプロジェクトの作成(IDE側)に対応。

File size: 79.1 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5using namespace ActiveBasic::IDE;
6
7#if defined(JPN)
8//日本語
9#include "pj_msg_jpn.h"
10#else
11//英語
12#include "pj_msg_eng.h"
13#endif
14
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
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
147 //プロシージャの行を選択する
148 //ResetScrollbarが再描画時に呼び出されるので、再描画する
149 WndNum=GetWndNum(hChild);
150 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
151 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
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 }
162
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);
182 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
183 if(ProjectInfo.pWindowInfo[i].hTreeItem==hTreeItem){
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 }
249 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
250 if(ProjectInfo.pWindowInfo[i].hTreeItem==hTreeItem){
251
252 //"%s ウィンドウをプロジェクトから削除します。よろしいですか?"
253 sprintf(str,STRING_PJ_CHECK_DELETEWINDOW,ProjectInfo.pWindowInfo[i].name);
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){
283 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_MenuID_Input,(long)ProjectInfo.pMenuInfo[i].IdName)) break;
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}
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}
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
443 OldTabProc=(WNDPROC)GetWindowLongPtr(hProjectViewTab,GWLP_WNDPROC);
444 SetWindowLongPtr(hProjectViewTab,GWLP_WNDPROC,(long)TabProc);
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);
466 OldProcedureTreeViewProc=(WNDPROC)GetWindowLongPtr(hProcedureTreeView,GWLP_WNDPROC);
467 SetWindowLongPtr(hProcedureTreeView,GWLP_WNDPROC,(long)ProcedureTreeViewProc);
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);
485 OldMaterialTreeViewProc=(WNDPROC)GetWindowLongPtr(hMaterialTreeView,GWLP_WNDPROC);
486 SetWindowLongPtr(hMaterialTreeView,GWLP_WNDPROC,(long)MaterialTreeViewProc);
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
508 SetWindowLongPtr(hwnd,GWL_EXSTYLE,WS_EX_STATICEDGE);
509 SetParent(hwnd,hOwner);
510 ResizeOwnerWnd();
511
512 ShowWindow(hProjectView_ToolWindow,SW_HIDE);
513 }
514 else{
515 pobj_nv->bClipProjectView=0;
516
517 SetWindowLongPtr(hwnd,GWL_EXSTYLE,0);
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){
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;
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);
563 if( ProjectInfo.name[0] ){
564 sprintf(temporary,"%s \'%s\'",STRING_PROJECT,ProjectInfo.name);
565 }
566 else{
567 lstrcpy( temporary, "現在のドキュメント" );
568 }
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
750 // 出力先拡張子
751 const std::string outputFileExt
752 = ( NewProjectInfo.dwTypeID == IDC_DLL ) ? ".dll"
753 : ( NewProjectInfo.dwTypeID == IDC_SLL ) ? ".lib"
754 : ".exe";
755
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)
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());
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)
791 sprintf(buffer+i,"#OUTPUT_RELEASE=.\\%s%s\r\n\r\n",NewProjectInfo.name, outputFileExt.c_str());
792 i+=lstrlen(buffer+i);
793
794 //出力先(Debug)
795 sprintf(buffer+i,"#OUTPUT_DEBUG=.\\%s_debug%s\r\n\r\n",NewProjectInfo.name, outputFileExt.c_str());
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){
905 const std::string mainExeDirectXAbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\main_exe_directx.abp";
906 pTemp = ReadBuffer( mainExeDirectXAbpPath );
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 }
955 else if( NewProjectInfo.dwTypeID == IDC_SLL )
956 {
957 buffer[0] = 0;
958 }
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);
969 if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
970 }
971
972
973 /////////////////////
974 // MainWnd.abを作成
975 /////////////////////
976
977 std::string mainWndSbpPath = "";
978 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
979 {
980 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_windowbase.sbp";
981 }
982 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
983 {
984 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_directx.sbp";
985 }
986
987 if( !mainWndSbpPath.empty() ){
988 pTemp = ReadBuffer( mainWndSbpPath );
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をコピー
1028 const std::string dxGraphicsSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_graphics.sbp";
1029 pTemp = ReadBuffer( dxGraphicsSbpPath );
1030 sprintf(temporary,"%sdx_graphics.sbp",dir,NewProjectInfo.name);
1031 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1032 HeapDefaultFree(pTemp);
1033
1034 //dx_input.sbpをコピー
1035 const std::string dxInputSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_input.sbp";
1036 pTemp = ReadBuffer( dxInputSbpPath );
1037 sprintf(temporary,"%sdx_input.sbp",dir,NewProjectInfo.name);
1038 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1039 HeapDefaultFree(pTemp);
1040
1041 //dx_music.sbpをコピー
1042 const std::string dxMusicSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_music.sbp";
1043 pTemp = ReadBuffer( dxMusicSbpPath );
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 /////////////////////////////////////////
1060 WINDOW_INFO WindowInfo[1];
1061 WindowInfo[0].name="MainWnd";
1062 WindowInfo[0].HandleName="hMainWnd";
1063 WindowInfo[0].pos.x=CW_USEDEFAULT;
1064 WindowInfo[0].pos.y=CW_USEDEFAULT;
1065 WindowInfo[0].size.cx=480;
1066 WindowInfo[0].size.cy=360;
1067 WindowInfo[0].caption=NewProjectInfo.name;
1068 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
1069 WindowInfo[0].style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE;
1070 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
1071 WindowInfo[0].style=WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU;
1072 WindowInfo[0].ExStyle=0;
1073 WindowInfo[0].MenuID=0;
1074 WindowInfo[0].id=0;
1075 WindowInfo[0].bgColor=COLOR_3DFACE;
1076 GetDefaultWindowFont(&WindowInfo[0].LogFont);
1077 WindowInfo[0].IconResName=0;
1078 WindowInfo[0].ClassName="NORMAL";
1079 WindowInfo[0].CallBackName="MainWndProc";
1080 WindowInfo[0].type=WNDTYPE_DEFAULT;
1081 WindowInfo[0].filepath="MainWnd.ab";
1082 WindowInfo[0].NumberOfChildWindows=0;
1083 sprintf(temporary,"%s%s.wnd",dir,NewProjectInfo.name);
1084
1085 ProjectInfo.NumberOfMenu=0;
1086 SaveWindowFile(temporary,WindowInfo,1);
1087 }
1088
1089
1090 ////////////////////////
1091 // ワークファイルを作成
1092 ////////////////////////
1093 lstrcpy(buffer,"case4\r\n\r\n");
1094 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
1095 lstrcat(buffer,"rad,MainWnd\r\n\r\n");
1096 }
1097 else{
1098 sprintf(buffer+lstrlen(buffer),"text,\"%s.ab\",0,0,0,0\r\n\r\n",NewProjectInfo.name);
1099 }
1100 lstrcat(buffer,"0\r\n0\r\n0\r\n0,0");
1101 //保存
1102 sprintf(temporary,"%s%s.wrk",dir,NewProjectInfo.name);
1103 if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
1104
1105
1106 //マニフェストを作成
1107 char temp2[MAX_PATH];
1108 const std::string manifestTempXmlPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\manifest_temp.xml";
1109 sprintf(temp2,"%s%s.manifest.xml",dir,NewProjectInfo.name);
1110 CopyFile( manifestTempXmlPath.c_str(), temp2, 0 );
1111
1112
1113 sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
1114 OpenProject(temporary);
1115 SaveProject();
1116}
1117void SetTreeViewForProjectInfo(){
1118 extern HANDLE hHeap;
1119 extern HWND hProjectView;
1120 extern PROJECTINFO ProjectInfo;
1121 int i;
1122 char temporary[MAX_PATH];
1123 TV_INSERTSTRUCT tv;
1124
1125 sprintf(temporary,"%s ",ProjectInfo.name);
1126 lstrcat(temporary,STRING_PROJECT);
1127 SetWindowText(hProjectView,temporary);
1128
1129 tv.hInsertAfter=TVI_SORT;
1130 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
1131
1132 //ファイル ツリー
1133 ProjectInfo.pobj_DBFileInfo->ResetTree();
1134
1135 //関数ツリー
1136 ResetClassTree(-1);
1137
1138 /////////////////////
1139 // マテリアル ツリー
1140
1141 //Cursorリソース フォルダ
1142 sprintf(temporary,"Cursor %s",STRING_RESOURCE);
1143 tv.hParent=TVI_ROOT;
1144 tv.item.iImage=0;
1145 tv.item.iSelectedImage=0;
1146 tv.item.pszText=temporary;
1147 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1148 ProjectInfo.res.hCursorTreeItem=tv.hParent;
1149 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
1150 tv.item.iImage=6;
1151 tv.item.iSelectedImage=6;
1152 tv.item.pszText=ProjectInfo.res.pCursorResInfo[i].IdName;
1153 ProjectInfo.res.pCursorResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1154 }
1155
1156 //Bitmapリソース フォルダ
1157 sprintf(temporary,"Bitmap %s",STRING_RESOURCE);
1158 tv.hParent=TVI_ROOT;
1159 tv.item.iImage=0;
1160 tv.item.iSelectedImage=0;
1161 tv.item.pszText=temporary;
1162 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1163 ProjectInfo.res.hBitmapTreeItem=tv.hParent;
1164 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
1165 tv.item.iImage=5;
1166 tv.item.iSelectedImage=5;
1167 tv.item.pszText=ProjectInfo.res.pBitmapResInfo[i].IdName;
1168 ProjectInfo.res.pBitmapResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1169 }
1170
1171 //Iconリソース フォルダ
1172 sprintf(temporary,"Icon %s",STRING_RESOURCE);
1173 tv.hParent=TVI_ROOT;
1174 tv.item.iImage=0;
1175 tv.item.iSelectedImage=0;
1176 tv.item.pszText=temporary;
1177 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1178 ProjectInfo.res.hIconTreeItem=tv.hParent;
1179 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1180 tv.item.iImage=4;
1181 tv.item.iSelectedImage=4;
1182 if(i==0){
1183 sprintf(temporary,"%s (Main)",ProjectInfo.res.pIconResInfo[i].IdName);
1184 tv.item.pszText=temporary;
1185 }
1186 else tv.item.pszText=ProjectInfo.res.pIconResInfo[i].IdName;
1187 ProjectInfo.res.pIconResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1188 }
1189
1190 //Menuフォルダ
1191 tv.hParent=TVI_ROOT;
1192 tv.item.iImage=0;
1193 tv.item.iSelectedImage=0;
1194 tv.item.pszText="Menu";
1195 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1196 ProjectInfo.hMenuTreeItem=tv.hParent;
1197 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1198 tv.item.iImage=3;
1199 tv.item.iSelectedImage=3;
1200 tv.item.pszText=ProjectInfo.pMenuInfo[i].IdName;
1201 ProjectInfo.pMenuInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1202 }
1203
1204 //Windowフォルダ
1205 tv.hParent=TVI_ROOT;
1206 tv.item.iImage=0;
1207 tv.item.iSelectedImage=0;
1208 tv.item.pszText="Window";
1209 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1210 ProjectInfo.hWindowTreeItem=tv.hParent;
1211 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1212 tv.item.iImage=2;
1213 tv.item.iSelectedImage=2;
1214 tv.item.pszText=ProjectInfo.pWindowInfo[i].name;
1215 ProjectInfo.pWindowInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1216 }
1217}
1218void OpenProject(char *path){
1219 extern HANDLE hHeap;
1220 extern PROJECTINFO ProjectInfo;
1221 int i,i2,i3;
1222 char *buffer,temporary[MAX_PATH],temp2[MAX_PATH];
1223
1224 //既にプロジェクトが開かれている場合は閉じる
1225 if(ProjectInfo.name[0]){
1226 if(!CloseProject()) return;
1227 }
1228 memset(&ProjectInfo,0,sizeof(PROJECTINFO));
1229
1230 //プロジェクトの作業ディレクトリを取得
1231 _splitpath(path,ProjectInfo.dir,temporary,0,0);
1232 lstrcat(ProjectInfo.dir,temporary);
1233
1234 //ファイルを開く、保存の初期ディレクトリをセット
1235 lstrcpy(pobj_nv->DefSaveDir,ProjectInfo.dir);
1236
1237
1238 //////////////////////////////////////////
1239 // リソースデータ用領域を確保
1240 ProjectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1241 ProjectInfo.res.NumberOfCursorRes=0;
1242 ProjectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1243 ProjectInfo.res.NumberOfBitmapRes=0;
1244 ProjectInfo.res.pIconResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1245 ProjectInfo.res.NumberOfIconRes=0;
1246
1247
1248 //////////////////////////////////////////
1249 //プロジェクトファイル(*.pj)をオープン
1250 buffer=ReadBuffer(path);
1251 if(!buffer) return;
1252
1253 //解析
1254 ProjectInfo.pobj_DBFileInfo=new CDBFileInfo();
1255 for(i=0;;i++){
1256 if(buffer[i]=='\0') break;
1257 if(buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]=='#'){
1258 for(i+=3,i2=0;;i++,i2++){
1259 if(!IsVariableChar(buffer[i])){
1260 temporary[i2]=0;
1261 break;
1262 }
1263 temporary[i2]=buffer[i];
1264 }
1265 if(lstrcmpi(temporary,"VERSION")==0&&buffer[i]=='='){
1266 for(i++,i2=0;;i++,i2++){
1267 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1268 temporary[i2]=0;
1269 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1270 break;
1271 }
1272 temporary[i2]=buffer[i];
1273 }
1274 ProjectInfo.dwVersion=GetValue(temporary);
1275 }
1276 else if(lstrcmpi(temporary,"MODULETYPE")==0&&buffer[i]=='='){
1277 for(i++,i2=0;;i++,i2++){
1278 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1279 temporary[i2]=0;
1280 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1281 break;
1282 }
1283 temporary[i2]=buffer[i];
1284 }
1285 ProjectInfo.dwModuleType=atoi(temporary);
1286 }
1287 else if(lstrcmpi(temporary,"NAME")==0&&buffer[i]=='='){
1288 for(i++,i2=0;;i++,i2++){
1289 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1290 ProjectInfo.name[i2]=0;
1291 break;
1292 }
1293 ProjectInfo.name[i2]=buffer[i];
1294 }
1295 }
1296 else if(lstrcmpi(temporary,"PLATFORM")==0&&buffer[i]=='='){
1297 for(i++,i2=0;;i++,i2++){
1298 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1299 temporary[i2]=0;
1300 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1301 break;
1302 }
1303 temporary[i2]=buffer[i];
1304 }
1305 i2=atoi(temporary);
1306 extern HWND hSelectCompilerCombo;
1307 if(i2==32){
1308 //プラットフォームにWin32を選択
1309 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0);
1310 }
1311 else if(i2==64){
1312 //プラットフォームにWin64を選択
1313 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,1,0);
1314 }
1315 SendMessage(hSelectCompilerCombo,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
1316 }
1317 else if(lstrcmpi(temporary,"USEWINDOW")==0&&buffer[i]=='='){
1318 for(i++,i2=0;;i++,i2++){
1319 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1320 temporary[i2]=0;
1321 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1322 break;
1323 }
1324 temporary[i2]=buffer[i];
1325 }
1326 ProjectInfo.NumberOfWindows=atoi(temporary);
1327 }
1328 else if(lstrcmpi(temporary,"OPTION")==0&&buffer[i]=='='){
1329 for(i++,i2=0;;i++,i2++){
1330 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1331 temporary[i2]=0;
1332 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1333 break;
1334 }
1335 temporary[i2]=buffer[i];
1336 }
1337 ProjectInfo.dwOption=GetValue(temporary);
1338 }
1339 else if(lstrcmpi(temporary,"OUTPUT_RELEASE")==0&&buffer[i]=='='){
1340 for(i++,i2=0;;i++,i2++){
1341 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1342 temporary[i2]=0;
1343 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1344 break;
1345 }
1346 temporary[i2]=buffer[i];
1347 }
1348 lstrcpy(ProjectInfo.lpszOutput_Release,temporary);
1349 }
1350 else if(lstrcmpi(temporary,"OUTPUT_DEBUG")==0&&buffer[i]=='='){
1351 for(i++,i2=0;;i++,i2++){
1352 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1353 temporary[i2]=0;
1354 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1355 break;
1356 }
1357 temporary[i2]=buffer[i];
1358 }
1359 lstrcpy(ProjectInfo.lpszOutput_Debug,temporary);
1360 }
1361 else if(lstrcmpi(temporary,"MANIFEST")==0&&buffer[i]=='='){
1362 for(i++,i2=0;;i++,i2++){
1363 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1364 temporary[i2]=0;
1365 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1366 break;
1367 }
1368 temporary[i2]=buffer[i];
1369 }
1370 lstrcpy(ProjectInfo.szManifestPath,temporary);
1371 }
1372 else if(lstrcmpi(temporary,"DEBUG_CMD_LINE")==0&&buffer[i]=='='){
1373 for(i++,i2=0;;i++,i2++){
1374 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1375 temporary[i2]=0;
1376 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1377 break;
1378 }
1379 temporary[i2]=buffer[i];
1380 }
1381 lstrcpy(ProjectInfo.szCmdLine,temporary);
1382 }
1383 else if(lstrcmpi(temporary,"DEBUG_EXE_PATH")==0&&buffer[i]=='='){
1384 for(i++,i2=0;;i++,i2++){
1385 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1386 temporary[i2]=0;
1387 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1388 break;
1389 }
1390 temporary[i2]=buffer[i];
1391 }
1392 lstrcpy(ProjectInfo.szExePath,temporary);
1393 }
1394 else if(lstrcmpi(temporary,"RESOURCE")==0&&buffer[i]=='='){
1395 for(i++,i2=0;;i++,i2++){
1396 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1397 temporary[i2]=0;
1398 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1399 break;
1400 }
1401 temporary[i2]=buffer[i];
1402 }
1403 if(temporary[0]!='\0'&&(!(temporary[0]=='0'&&temporary[1]=='\0'))){
1404 lstrcpy(ProjectInfo.ResourceFileName,temporary);
1405 GetResourceData();
1406 }
1407 else{
1408 sprintf(ProjectInfo.ResourceFileName,"%s.rc",ProjectInfo.name);
1409 }
1410 }
1411 else if(lstrcmpi(temporary,"SOURCE")==0&&buffer[i]=='\r'&&buffer[i+1]=='\n'){
1412 while(1){
1413 for(i+=2,i2=0;;i++,i2++){
1414 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1415 temporary[i2]=0;
1416 break;
1417 }
1418 temporary[i2]=buffer[i];
1419 }
1420 if(temporary[0]=='\0') break;
1421 ProjectInfo.pobj_DBFileInfo->add(temporary,0);
1422
1423 if(buffer[i]=='\0') break;
1424 }
1425 }
1426 else{
1427 //不明なパラメータは無視
1428 for(i++;;i++){
1429 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1430 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1431 break;
1432 }
1433 }
1434 }
1435 if(buffer[i]=='\0') break;
1436 }
1437 }
1438 HeapDefaultFree(buffer);
1439
1440 //古いバージョンファイルを考慮
1441 if(ProjectInfo.dwVersion<=4){
1442 if(ProjectInfo.dwModuleType==MT_DLL)
1443 sprintf(ProjectInfo.lpszOutput_Release,".\\%s.dll",ProjectInfo.name);
1444 else sprintf(ProjectInfo.lpszOutput_Release,".\\%s.exe",ProjectInfo.name);
1445 sprintf(ProjectInfo.lpszOutput_Debug,".\\%s_debug.exe",ProjectInfo.name);
1446 }
1447
1448 //ブレークポイントを初期化
1449 ProjectInfo.pobj_DBBreakPoint=new CDBBreakPoint();
1450
1451
1452 if(ProjectInfo.NumberOfWindows){
1453 /////////////////////////////////////////////
1454 //ウィンドウ定義ファイル(*.wnd)をオープン
1455 sprintf(temp2,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
1456 if(!OpenWindowFile(temp2)) return;
1457 }
1458 else{
1459 ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1460
1461 ProjectInfo.NumberOfMenu=0;
1462 ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1463 }
1464
1465
1466 //プロジェクト ビューを設定、表示
1467 extern HWND hProjectView;
1468 SetTreeViewForProjectInfo();
1469 if(!IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1470
1471
1472 //メニュー状態を設定
1473 ResetState_DocMenu();
1474
1475
1476 //////////////////////////////////////////
1477 //ワークファイル(*.wrk)をオープン
1478 extern MDIINFO MdiInfo[MAX_WNDNUM];
1479 HTREEITEM hTreeItem;
1480 HANDLE hFind;
1481 WIN32_FIND_DATA wfd;
1482 HWND hChild;
1483 int WndNum;
1484 sprintf(temp2,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
1485 hFind=FindFirstFile(temp2,&wfd);
1486 if(hFind!=INVALID_HANDLE_VALUE){
1487 FindClose(hFind);
1488 buffer=ReadBuffer(temp2);
1489 if(!buffer) return;
1490
1491 //解析、反映
1492 memcpy(temporary,buffer,5);
1493 temporary[5]=0;
1494 if(lstrcmp(temporary,"case4")==0){
1495
1496 LockWindowUpdate(hOwner);
1497 for(i=9,i2=0;;i++,i2++){
1498 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1499 if(i2!=0){
1500 temporary[i2]=0;
1501 for(i3=0;;i3++){
1502 if(temporary[i3]==','||temporary[i3]=='\0') break;
1503 }
1504 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1505 lstrcpy(temp2,temporary+i3+1);
1506 temporary[i3]=0;
1507 if(lstrcmpi(temporary,"text")==0){
1508 if(temp2[0]!='\"') goto EndToSetWorkFile;
1509
1510 //ファイルを開く
1511 i2=1;
1512 for(i3=0;;i2++,i3++){
1513 if(temp2[i2]=='\"'||temp2[i2]=='\0'){
1514 temporary[i3]=0;
1515 break;
1516 }
1517 temporary[i3]=temp2[i2];
1518 }
1519 GetFullPath(temporary,ProjectInfo.dir);
1520 hChild=OpenFileWithExtension(temporary);
1521 WndNum=GetWndNum(hChild);
1522 if(WndNum==-1){
1523 goto EndToSetWorkFile;
1524 }
1525
1526 //ResetScrollbarが再描画時に呼び出されるので、再描画する
1527 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
1528 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1529
1530 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1531 if(temp2[i2+1]!=',') goto EndToSetWorkFile;
1532
1533 //以前のスクロール位置を復元
1534 SCROLLINFO si;
1535 POINT pos;
1536 for(i2+=2,i3=0;;i2++,i3++){
1537 if(temp2[i2]==','||temp2[i2]=='\0'){
1538 temporary[i3]=0;
1539 break;
1540 }
1541 temporary[i3]=temp2[i2];
1542 }
1543 sscanf(temporary,"%d",&pos.x);
1544 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1545 for(i2++,i3=0;;i2++,i3++){
1546 if(temp2[i2]==','||temp2[i2]=='\0'){
1547 temporary[i3]=0;
1548 break;
1549 }
1550 temporary[i3]=temp2[i2];
1551 }
1552 sscanf(temporary,"%d",&pos.y);
1553 si.cbSize=sizeof(SCROLLINFO);
1554 si.fMask=SIF_POS;
1555 si.nPos=pos.x;
1556 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si,1);
1557 si.nPos=pos.y;
1558 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si,1);
1559
1560 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1561
1562 //キャレット位置をセット
1563 for(i2++,i3=0;;i2++,i3++){
1564 if(temp2[i2]==','||temp2[i2]=='\0'){
1565 temporary[i3]=0;
1566 break;
1567 }
1568 temporary[i3]=temp2[i2];
1569 }
1570 sscanf(temporary,"%d",&pos.x);
1571 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1572 for(i2++,i3=0;;i2++,i3++){
1573 if(temp2[i2]==','||temp2[i2]=='\0'){
1574 temporary[i3]=0;
1575 break;
1576 }
1577 temporary[i3]=temp2[i2];
1578 }
1579 sscanf(temporary,"%d",&pos.y);
1580 TextEdit_SetSel(WndNum,pos.x,pos.y);
1581 }
1582 else if(lstrcmpi(temporary,"rad")==0){
1583 for(i3=0;i3<ProjectInfo.NumberOfWindows;i3++){
1584 if(lstrcmpi(ProjectInfo.pWindowInfo[i3].name,temp2)==0){
1585 NewRadWindow(i3);
1586 break;
1587 }
1588 }
1589 }
1590 else if(lstrcmpi(temporary,"menu")==0){
1591 for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
1592 if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
1593 NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
1594 break;
1595 }
1596 }
1597 }
1598 else if(lstrcmpi(temporary,"icon")==0){
1599 for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
1600 if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
1601 GetFullPath(temp2,ProjectInfo.dir);
1602 NewIconEditWindow(temp2);
1603 break;
1604 }
1605 }
1606 }
1607 i++;
1608 i2=-1;
1609 continue;
1610 }
1611 else break;
1612 }
1613 temporary[i2]=buffer[i];
1614 }
1615
1616 for(i+=2,i2=0;;i++,i2++){
1617 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1618 temporary[i2]=0;
1619 break;
1620 }
1621 temporary[i2]=buffer[i];
1622 }
1623 sscanf(temporary,"%d",&i2);
1624
1625 switch( i2 ){
1626 case 0:
1627 ShowFileView();
1628 break;
1629 case 1:
1630 ShowClassView();
1631 break;
1632 case 2:
1633 ShowMaterialView();
1634 break;
1635 }
1636
1637 if(buffer[i]=='\0') goto EndToSetWorkFile;
1638
1639 for(i+=2,i2=0;;i++,i2++){
1640 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1641 temporary[i2]=0;
1642 break;
1643 }
1644 temporary[i2]=buffer[i];
1645 }
1646 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
1647
1648 for(i+=2,i2=0;;i++,i2++){
1649 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1650 temporary[i2]=0;
1651 break;
1652 }
1653 temporary[i2]=buffer[i];
1654 }
1655 if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
1656
1657 for(i+=2,i2=0;;i++,i2++){
1658 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1659 temporary[i2]=0;
1660 break;
1661 }
1662 temporary[i2]=buffer[i];
1663 }
1664 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1665 i2=0;
1666 while(hTreeItem){
1667 i2=GetOneParameter(temporary,i2,temp2);
1668 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1669 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1670 }
1671 }
1672 else if(lstrcmp(temporary,"case3")==0){
1673 ////////////////////////////////////////
1674 // 古いフォーマットのワークファイル
1675
1676 LockWindowUpdate(hOwner);
1677 for(i=9,i2=0;;i++,i2++){
1678 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1679 if(i2!=0){
1680 temporary[i2]=0;
1681 for(i3=0;;i3++){
1682 if(temporary[i3]==','||temporary[i3]=='\0') break;
1683 }
1684 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1685 lstrcpy(temp2,temporary+i3+1);
1686 temporary[i3]=0;
1687 if(lstrcmpi(temporary,"text")==0){
1688 for(i3=0;;i3++){
1689 if(temp2[i3]==','||temp2[i3]=='\0') break;
1690 }
1691 if(temp2[i3]=='\0') goto EndToSetWorkFile;
1692 lstrcpy(temporary,temp2+i3+1);
1693 temp2[i3]=0;
1694 GetFullPath(temporary,ProjectInfo.dir);
1695 sscanf(temp2,"%d",&i3);
1696
1697 //ファイルを開く
1698 hChild=OpenFileWithExtension(temporary);
1699 WndNum=GetWndNum(hChild);
1700
1701 //キャレット位置をセット
1702 TextEdit_SetSel(WndNum,i3,i3);
1703 }
1704 else if(lstrcmpi(temporary,"rad")==0){
1705 for(i3=0;i3<ProjectInfo.NumberOfWindows;i3++){
1706 if(lstrcmpi(ProjectInfo.pWindowInfo[i3].name,temp2)==0){
1707 NewRadWindow(i3);
1708 break;
1709 }
1710 }
1711 }
1712 else if(lstrcmpi(temporary,"menu")==0){
1713 for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
1714 if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
1715 NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
1716 break;
1717 }
1718 }
1719 }
1720 else if(lstrcmpi(temporary,"icon")==0){
1721 for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
1722 if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
1723 GetFullPath(temp2,ProjectInfo.dir);
1724 NewIconEditWindow(temp2);
1725 break;
1726 }
1727 }
1728 }
1729 i++;
1730 i2=-1;
1731 continue;
1732 }
1733 else break;
1734 }
1735 temporary[i2]=buffer[i];
1736 }
1737
1738 for(i+=2,i2=0;;i++,i2++){
1739 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1740 temporary[i2]=0;
1741 break;
1742 }
1743 temporary[i2]=buffer[i];
1744 }
1745 sscanf(temporary,"%d",&i2);
1746
1747 switch( i2 ){
1748 case 0:
1749 ShowFileView();
1750 break;
1751 case 1:
1752 ShowClassView();
1753 break;
1754 case 2:
1755 ShowMaterialView();
1756 break;
1757 }
1758
1759 if(buffer[i]=='\0') goto EndToSetWorkFile;
1760
1761 for(i+=2,i2=0;;i++,i2++){
1762 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1763 temporary[i2]=0;
1764 break;
1765 }
1766 temporary[i2]=buffer[i];
1767 }
1768 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
1769
1770 for(i+=2,i2=0;;i++,i2++){
1771 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1772 temporary[i2]=0;
1773 break;
1774 }
1775 temporary[i2]=buffer[i];
1776 }
1777 if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
1778
1779 for(i+=2,i2=0;;i++,i2++){
1780 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1781 temporary[i2]=0;
1782 break;
1783 }
1784 temporary[i2]=buffer[i];
1785 }
1786 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1787 i2=0;
1788 while(hTreeItem){
1789 i2=GetOneParameter(temporary,i2,temp2);
1790 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1791 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1792 }
1793 }
1794EndToSetWorkFile:
1795 LockWindowUpdate(NULL);
1796 HeapDefaultFree(buffer);
1797 }
1798
1799
1800 //ウィンドウ タイトルを変更
1801 sprintf(temporary,"%s - %s",ProjectInfo.name,APPLICATION_NAME);
1802 SetWindowText(hOwner,temporary);
1803
1804
1805 ProjectInfo.modify=0;
1806 ProjectInfo.ModifyOfMaterial=0;
1807 ProjectInfo.ModifuOfResource=0;
1808}
1809BOOL ProjectModifyCheck(BOOL bRun){
1810 extern MDIINFO MdiInfo[MAX_WNDNUM];
1811 extern PROJECTINFO ProjectInfo;
1812 int i,WndNum,sw;
1813 HWND hChild;
1814 char temporary[MAX_PATH];
1815 if(ProjectInfo.modify||ProjectInfo.ModifyOfMaterial||ProjectInfo.ModifuOfResource){
1816 if(bRun==0||pobj_nv->bSaveCheckProject){
1817 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1818 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
1819 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1820
1821 if(i==IDCANCEL) return 0;
1822 if(i==IDYES) SaveProject();
1823 }
1824 else SaveProject();
1825 return 1;
1826 }
1827 hChild=GetWindow(hClient,GW_CHILD);
1828 while(hChild){
1829 WndNum=GetWndNum(hChild);
1830 sw=0;
1831 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1832 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
1833 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
1834 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1835 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1836 }
1837 }
1838 }
1839 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1840 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
1841 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1842 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
1843 GetFullPath(temporary,ProjectInfo.dir);
1844 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1845 }
1846 }
1847 }
1848
1849 if(sw){
1850 if(bRun==0||pobj_nv->bSaveCheckProject){
1851 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1852 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
1853 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1854
1855 if(i==IDCANCEL) return 0;
1856 if(i==IDYES) SaveProject();
1857 }
1858 else SaveProject();
1859 return 1;
1860 }
1861 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1862 }
1863 return 2;
1864}
1865_int8 CloseProject(void){
1866 extern HANDLE hHeap;
1867 extern MDIINFO MdiInfo[MAX_WNDNUM];
1868 extern PROJECTINFO ProjectInfo;
1869 int i,i2,WndNum;
1870 HWND hChild,hCloseChild;
1871 char temporary[MAX_PATH];
1872
1873
1874 //保存確認
1875 i=ProjectModifyCheck(0);
1876 if(i==0) return 0;
1877 else if(i==2) MakeWorkFile();
1878
1879 //プロジェクトに関するMDIウィンドウをすべて閉じる
1880 hChild=GetWindow(hClient,GW_CHILD);
1881 while(hChild){
1882 hCloseChild=hChild;
1883 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1884 WndNum=GetWndNum(hCloseChild);
1885 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1886 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
1887 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1888 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
1889
1890 //変更フラグをオフにする
1891 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1892
1893 SendMessage(hCloseChild,WM_CLOSE,0,0);
1894 break;
1895 }
1896 }
1897 }
1898 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1899 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1900 if(lstrcmp(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[i].name)==0){
1901 SendMessage(hCloseChild,WM_CLOSE,0,0);
1902 break;
1903 }
1904 }
1905 }
1906 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1907 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1908 if(lstrcmp(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
1909 SendMessage(hCloseChild,WM_CLOSE,0,0);
1910 break;
1911 }
1912 }
1913 }
1914 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1915 for(i=0;ProjectInfo.res.NumberOfIconRes;i++){
1916 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
1917 GetFullPath(temporary,ProjectInfo.dir);
1918 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
1919 SendMessage(hCloseChild,WM_CLOSE,0,0);
1920 break;
1921 }
1922 }
1923 }
1924 }
1925
1926 //ファイル情報のメモリを解放
1927 delete ProjectInfo.pobj_DBFileInfo;
1928
1929 //ブレークポイントのオブジェクトを解放
1930 delete ProjectInfo.pobj_DBBreakPoint;
1931
1932 //ウィンドウ情報のメモリを解放
1933 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1934 HeapDefaultFree(ProjectInfo.pWindowInfo[i].name);
1935 HeapDefaultFree(ProjectInfo.pWindowInfo[i].HandleName);
1936 HeapDefaultFree(ProjectInfo.pWindowInfo[i].caption);
1937 HeapDefaultFree(ProjectInfo.pWindowInfo[i].ClassName);
1938 HeapDefaultFree(ProjectInfo.pWindowInfo[i].CallBackName);
1939 HeapDefaultFree(ProjectInfo.pWindowInfo[i].filepath);
1940 if(ProjectInfo.pWindowInfo[i].MenuID)
1941 HeapDefaultFree(ProjectInfo.pWindowInfo[i].MenuID);
1942 if(ProjectInfo.pWindowInfo[i].IconResName)
1943 HeapDefaultFree(ProjectInfo.pWindowInfo[i].IconResName);
1944
1945 //子ウィンドウのメモリを解放
1946 for(i2=0;i2<ProjectInfo.pWindowInfo[i].NumberOfChildWindows;i2++){
1947 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].IdName);
1948 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].caption);
1949 if(ProjectInfo.pWindowInfo[i].pChildInfo[i2].Control==CT_IMAGEBOX){
1950 //イメージ ボックスの場合
1951 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].ImageCtrlInfo.path);
1952 }
1953 }
1954 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo);
1955 }
1956 HeapDefaultFree(ProjectInfo.pWindowInfo);
1957
1958 //メニュー情報のメモリを解放
1959 HeapMenuDataFree(ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu,0);
1960 HeapDefaultFree(ProjectInfo.pMenuInfo);
1961
1962 //リソースのメモリを解放
1963 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
1964 HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].IdName);
1965 HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].path);
1966 }
1967 HeapDefaultFree(ProjectInfo.res.pCursorResInfo);
1968 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
1969 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].IdName);
1970 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].path);
1971 }
1972 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo);
1973 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1974 HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].IdName);
1975 HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].path);
1976 }
1977 HeapDefaultFree(ProjectInfo.res.pIconResInfo);
1978
1979 //プロジェクト ビューを非表示にする
1980 extern HWND hProjectView;
1981 if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1982 SetWindowText(hProjectView,"Project View");
1983
1984 TreeView_DeleteAllItems(pobj_FileTree->hTree);
1985 TreeView_DeleteAllItems(hProcedureTreeView);
1986 TreeView_DeleteAllItems(hMaterialTreeView);
1987
1988 //ウィンドウ タイトルを変更
1989 SetWindowText(hOwner,APPLICATION_NAME);
1990
1991 ProjectInfo.name[0]=0;
1992
1993 //メニュー状態を設定
1994 ResetState_DocMenu();
1995
1996 return 1;
1997}
1998void MakeWorkFile(void){
1999 extern MDIINFO MdiInfo[MAX_WNDNUM];
2000 extern PROJECTINFO ProjectInfo;
2001 int i,i2,WndNum;
2002 char temporary[MAX_PATH],buffer[32767];
2003 HWND hChild;
2004 CHARRANGE CharRange;
2005
2006 //ワークファイル(*.wrk)を作成
2007 lstrcpy(buffer,"case4\r\n\r\n");
2008 i2=lstrlen(buffer);
2009
2010
2011 ///////////////////////
2012 //MDIウィンドウの並び
2013 hChild=GetWindow(GetWindow(hClient,GW_CHILD),GW_HWNDLAST);
2014 while(hChild){
2015 WndNum=GetWndNum(hChild);
2016 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2017 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2018 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
2019 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2020 TextEdit_GetSel(WndNum,&CharRange);
2021
2022 SCROLLINFO si;
2023 POINT pos;
2024 si.cbSize=sizeof(SCROLLINFO);
2025 si.fMask=SIF_POS;
2026 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si);
2027 pos.x=si.nPos;
2028 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si);
2029 pos.y=si.nPos;
2030
2031 sprintf(buffer+i2,"text,\"%s\",%d,%d,%d,%d\r\n",
2032 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path,
2033 pos.x,
2034 pos.y,
2035 CharRange.cpMin,
2036 CharRange.cpMax);
2037 i2+=lstrlen(buffer+i2);
2038 break;
2039 }
2040 }
2041 }
2042 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
2043 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
2044 if(lstrcmpi(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[i].name)==0){
2045 sprintf(buffer+i2,"rad,%s\r\n",MdiInfo[WndNum].path);
2046 i2+=lstrlen(buffer+i2);
2047 break;
2048 }
2049 }
2050 }
2051 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
2052 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
2053 if(lstrcmpi(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
2054 sprintf(buffer+i2,"menu,%s\r\n",MdiInfo[WndNum].path);
2055 i2+=lstrlen(buffer+i2);
2056 break;
2057 }
2058 }
2059 }
2060 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
2061 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2062 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
2063 GetFullPath(temporary,ProjectInfo.dir);
2064 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2065 sprintf(buffer+i2,"icon,%s\r\n",ProjectInfo.res.pIconResInfo[i].path);
2066 i2+=lstrlen(buffer+i2);
2067 break;
2068 }
2069 }
2070 }
2071 hChild=GetNextWindow(hChild,GW_HWNDPREV);
2072 }
2073 lstrcpy(buffer+i2,"\r\n");
2074 i2+=2;
2075
2076
2077 //////////////////////////
2078 //ツリービューの展開状況
2079 sprintf(buffer+i2,"%d\r\n",TabCtrl_GetCurSel(hProjectViewTab));
2080 i2+=lstrlen(buffer+i2);
2081 TVITEM tvItem;
2082 memset(&tvItem,0,sizeof(TVITEM));
2083 tvItem.mask=TVIF_HANDLE|TVIF_STATE;
2084 tvItem.hItem=TreeView_GetRoot(pobj_FileTree->hTree);
2085 TreeView_GetItem(pobj_FileTree->hTree,&tvItem);
2086 if(tvItem.state&TVIS_EXPANDED) i=1;
2087 else i=0;
2088 sprintf(buffer+i2,"%d\r\n",i);
2089 i2+=lstrlen(buffer+i2);
2090
2091 tvItem.hItem=TreeView_GetRoot(hProcedureTreeView);
2092 TreeView_GetItem(hProcedureTreeView,&tvItem);
2093 if(tvItem.state&TVIS_EXPANDED) i=1;
2094 else i=0;
2095 sprintf(buffer+i2,"%d\r\n",i);
2096 i2+=lstrlen(buffer+i2);
2097
2098 tvItem.hItem=TreeView_GetRoot(hMaterialTreeView);
2099 while(tvItem.hItem){
2100 TreeView_GetItem(hMaterialTreeView,&tvItem);
2101 if(tvItem.state&TVIS_EXPANDED) i=1;
2102 else i=0;
2103 sprintf(buffer+i2,"%d",i);
2104 i2+=lstrlen(buffer+i2);
2105
2106 tvItem.hItem=TreeView_GetNextSibling(hMaterialTreeView,tvItem.hItem);
2107 if(tvItem.hItem){
2108 lstrcpy(buffer+i2,",");
2109 i2+=lstrlen(buffer+i2);
2110 }
2111 }
2112
2113
2114 //保存
2115 sprintf(temporary,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
2116 WriteBuffer(temporary,buffer,i2);
2117}
2118void SaveProject(void){
2119 extern MDIINFO MdiInfo[MAX_WNDNUM];
2120 extern PROJECTINFO ProjectInfo;
2121 int i,i2,i3,WndNum;
2122 char temporary[MAX_PATH],buffer[32767];
2123 HWND hChild;
2124
2125 //"プロジェクトを保存中..."
2126 SetStatusText(STRING_PROJECT_SAVING);
2127
2128 //プロジェクトファイルのバージョンを設定
2129 ProjectInfo.dwVersion=PROJECT_VERSION;
2130
2131 hChild=GetWindow(hClient,GW_CHILD);
2132 while(hChild){
2133 WndNum=GetWndNum(hChild);
2134 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2135 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
2136 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2137 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
2138 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2139 SaveDocument(hChild,NULL);
2140 break;
2141 }
2142 }
2143 }
2144 }
2145 if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
2146 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
2147 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2148 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
2149 GetFullPath(temporary,ProjectInfo.dir);
2150 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2151 SaveDocument(hChild,NULL);
2152 break;
2153 }
2154 }
2155 }
2156 }
2157 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2158 }
2159
2160
2161 //////////////////////////////////////
2162 //プロジェクトファイル(*.pj)を作成
2163 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
2164 i2=lstrlen(buffer);
2165 sprintf(buffer+i2,"#VERSION=%d\r\n\r\n",ProjectInfo.dwVersion);
2166 i2+=lstrlen(buffer+i2);
2167 sprintf(buffer+i2,"#MODULETYPE=%d\r\n\r\n",ProjectInfo.dwModuleType);
2168 i2+=lstrlen(buffer+i2);
2169 sprintf(buffer+i2,"#NAME=%s\r\n\r\n",ProjectInfo.name);
2170 i2+=lstrlen(buffer+i2);
2171 extern HWND hSelectCompilerCombo;
2172 if(SendMessage(hSelectCompilerCombo,CB_GETCURSEL,0,0)==0){
2173 sprintf(buffer+i2,"#PLATFORM=32\r\n\r\n",ProjectInfo.name);
2174 i2+=lstrlen(buffer+i2);
2175 }
2176 else{
2177 sprintf(buffer+i2,"#PLATFORM=64\r\n\r\n",ProjectInfo.name);
2178 i2+=lstrlen(buffer+i2);
2179 }
2180 sprintf(buffer+i2,"#USEWINDOW=%d\r\n\r\n",ProjectInfo.NumberOfWindows);
2181 i2+=lstrlen(buffer+i2);
2182 sprintf(buffer+i2,"#OPTION=&H%08x\r\n\r\n",ProjectInfo.dwOption);
2183 i2+=lstrlen(buffer+i2);
2184 sprintf(buffer+i2,"#OUTPUT_RELEASE=%s\r\n\r\n",ProjectInfo.lpszOutput_Release);
2185 i2+=lstrlen(buffer+i2);
2186 sprintf(buffer+i2,"#OUTPUT_DEBUG=%s\r\n\r\n",ProjectInfo.lpszOutput_Debug);
2187 i2+=lstrlen(buffer+i2);
2188 sprintf(buffer+i2,"#MANIFEST=%s\r\n\r\n",ProjectInfo.szManifestPath);
2189 i2+=lstrlen(buffer+i2);
2190 sprintf(buffer+i2,"#DEBUG_CMD_LINE=%s\r\n\r\n",ProjectInfo.szCmdLine);
2191 i2+=lstrlen(buffer+i2);
2192 sprintf(buffer+i2,"#DEBUG_EXE_PATH=%s\r\n\r\n",ProjectInfo.szExePath);
2193 i2+=lstrlen(buffer+i2);
2194 if(ProjectInfo.ResourceFileName[0]){
2195 sprintf(buffer+i2,"#RESOURCE=%s\r\n\r\n",ProjectInfo.ResourceFileName);
2196 i2+=lstrlen(buffer+i2);
2197 }
2198 else{
2199 lstrcpy(buffer+i2,"#RESOURCE=0\r\n\r\n");
2200 i2+=lstrlen(buffer+i2);
2201 }
2202 sprintf(buffer+i2,"#SOURCE\r\n");
2203 i2+=lstrlen(buffer+i2);
2204 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2205 sprintf(buffer+i2,"%s\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
2206 i2+=lstrlen(buffer+i2);
2207 }
2208
2209 //保存
2210 sprintf(temporary,"%s%s.pj",ProjectInfo.dir,ProjectInfo.name);
2211 WriteBuffer(temporary,buffer,i2);
2212
2213
2214 //////////////////////////////////
2215 // リソースファイル(*.rc、resource.ab)を作成
2216 if(ProjectInfo.ResourceFileName[0]){
2217 i2=0;
2218 i3=101;
2219 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++,i3++){
2220 sprintf(buffer+i2,"Const %s=%d\r\n",
2221 ProjectInfo.res.pCursorResInfo[i].IdName,
2222 i3);
2223 i2+=lstrlen(buffer+i2);
2224 }
2225 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++,i3++){
2226 sprintf(buffer+i2,"Const %s=%d\r\n",
2227 ProjectInfo.res.pBitmapResInfo[i].IdName,
2228 i3);
2229 i2+=lstrlen(buffer+i2);
2230 }
2231 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++,i3++){
2232 sprintf(buffer+i2,"Const %s=%d\r\n",
2233 ProjectInfo.res.pIconResInfo[i].IdName,
2234 i3);
2235 i2+=lstrlen(buffer+i2);
2236 }
2237
2238 //保存(resource.ab)
2239 lstrcpy(temporary,"resource.ab");
2240 GetFullPath(temporary,ProjectInfo.dir);
2241 WriteBuffer(temporary,buffer,i2);
2242
2243 i2=0;
2244 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
2245 sprintf(buffer+i2,"%s CURSOR \"%s\"\r\n",
2246 ProjectInfo.res.pCursorResInfo[i].IdName,
2247 ProjectInfo.res.pCursorResInfo[i].path);
2248 i2+=lstrlen(buffer+i2);
2249 }
2250 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
2251 sprintf(buffer+i2,"%s BITMAP \"%s\"\r\n",
2252 ProjectInfo.res.pBitmapResInfo[i].IdName,
2253 ProjectInfo.res.pBitmapResInfo[i].path);
2254 i2+=lstrlen(buffer+i2);
2255 }
2256 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2257 sprintf(buffer+i2,"%s ICON \"%s\"\r\n",
2258 ProjectInfo.res.pIconResInfo[i].IdName,
2259 ProjectInfo.res.pIconResInfo[i].path);
2260 i2+=lstrlen(buffer+i2);
2261 }
2262
2263 //マニフェスト
2264 if(ProjectInfo.dwOption&PJ_OP_RC_MANIFEST){
2265 sprintf(buffer+i2,"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST \"%s\"\r\n",
2266 ProjectInfo.szManifestPath);
2267 i2+=lstrlen(buffer+i2);
2268 }
2269
2270 //保存
2271 lstrcpy(temporary,ProjectInfo.ResourceFileName);
2272 GetFullPath(temporary,ProjectInfo.dir);
2273 WriteBuffer(temporary,buffer,i2);
2274 }
2275
2276
2277 ///////////////////////////////////////
2278 //インデックスファイル(*.idx)を作成
2279 buffer[0]=0;
2280 lstrcpy(buffer,"' インデックス プログラム\r\n");
2281 i2=lstrlen(buffer);
2282 if(ProjectInfo.dwOption&PJ_OP_SOURCE_MASK){
2283 if(ProjectInfo.dwOption&PJ_OP_STRICT){
2284 /* #strictディレクティブは今は使われていない
2285 lstrcpy(buffer+i2,"\r\n");
2286 i2+=lstrlen(buffer+i2);
2287 lstrcpy(buffer+i2,"#strict");
2288 i2+=lstrlen(buffer+i2);
2289 lstrcpy(buffer+i2,"\r\n");
2290 i2+=lstrlen(buffer+i2);
2291 */
2292 }
2293 lstrcpy(buffer+i2,"\r\n");
2294 i2+=lstrlen(buffer+i2);
2295 lstrcpy(buffer+i2,"'Win32APIの定義ファイル\r\n");
2296 i2+=lstrlen(buffer+i2);
2297 if(ProjectInfo.dwOption&PJ_OP_MMSYSTEM){
2298 lstrcpy(buffer+i2,"#include <api_mmsys.sbp>\r\n");
2299 i2+=lstrlen(buffer+i2);
2300 }
2301 if(ProjectInfo.dwOption&PJ_OP_COMMCTRL){
2302 lstrcpy(buffer+i2,"#include <api_commctrl.sbp>\r\n");
2303 i2+=lstrlen(buffer+i2);
2304 }
2305 if(ProjectInfo.dwOption&PJ_OP_RICHEDIT){
2306 lstrcpy(buffer+i2,"#include <api_richedit.sbp>\r\n");
2307 i2+=lstrlen(buffer+i2);
2308 }
2309 if(ProjectInfo.dwOption&PJ_OP_WINSOCK){
2310 lstrcpy(buffer+i2,"#include <api_winsock2.sbp>\r\n");
2311 i2+=lstrlen(buffer+i2);
2312 }
2313 }
2314 if(ProjectInfo.NumberOfWindows){
2315 lstrcpy(buffer+i2,"\r\n");
2316 i2+=lstrlen(buffer+i2);
2317 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ制御プログラム\r\n");
2318 i2+=lstrlen(buffer+i2);
2319 sprintf(buffer+i2,"#include \"Callback.wbp\"\r\n");
2320 i2+=lstrlen(buffer+i2);
2321 }
2322 if(ProjectInfo.pobj_DBFileInfo->iNum>1){
2323 lstrcpy(buffer+i2,"\r\n");
2324 i2+=lstrlen(buffer+i2);
2325 lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
2326 i2+=lstrlen(buffer+i2);
2327 for(i=1;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2328 //メインファイルは含まない
2329 sprintf(buffer+i2,"#include \"%s\"\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
2330 i2+=lstrlen(buffer+i2);
2331 lstrcpy(buffer+i2,"_ClearNamespaceImported\r\n");
2332 i2+=lstrlen(buffer+i2);
2333 }
2334 }
2335 if(ProjectInfo.NumberOfWindows){
2336 lstrcpy(buffer+i2,"\r\n");
2337 i2+=lstrlen(buffer+i2);
2338 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ生成プログラム\r\n");
2339 i2+=lstrlen(buffer+i2);
2340 sprintf(buffer+i2,"#include \"MakeWindow.wbp\"\r\n");
2341 i2+=lstrlen(buffer+i2);
2342 }
2343 if(ProjectInfo.ResourceFileName[0]){
2344 //リソースファイルが含まれる場合
2345 lstrcpy(buffer+i2,"\r\n");
2346 i2+=lstrlen(buffer+i2);
2347 lstrcpy(buffer+i2,"'リソースファイル\r\n");
2348 i2+=lstrlen(buffer+i2);
2349 lstrcpy(buffer+i2,"#include \"resource.ab\"\r\n");
2350 i2+=lstrlen(buffer+i2);
2351 sprintf(buffer+i2,"#resource \"%s.rc\"\r\n",ProjectInfo.name);
2352 i2+=lstrlen(buffer+i2);
2353 }
2354
2355 //保存
2356 sprintf(temporary,"%s%s.idx",ProjectInfo.dir,ProjectInfo.name);
2357 WriteBuffer(temporary,buffer,i2);
2358
2359
2360 if(ProjectInfo.NumberOfWindows){
2361 /////////////////////////////////////////////////////
2362 //ウィンドウ関連ファイル(*.wnd)を作成、保存
2363 if(ProjectInfo.ModifyOfMaterial){
2364 sprintf(temporary,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
2365 SaveWindowFile(temporary,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows);
2366 }
2367
2368 //.wbpファイルを生成
2369 SaveWindowProgram();
2370 }
2371
2372
2373 MakeWorkFile();
2374
2375 SetStatusText("");
2376
2377 ProjectInfo.modify=0;
2378 ProjectInfo.ModifuOfResource=0;
2379}
2380
2381BOOL SetProjectToRun(void){
2382 extern PROJECTINFO ProjectInfo;
2383 HANDLE hFind;
2384 WIN32_FIND_DATA wfd;
2385
2386 if(ProjectInfo.pobj_DBFileInfo->iNum==0){
2387 //"プログラム ファイルがプロジェクトに存在しません。"
2388 MessageBox(hOwner,STRING_ERROR_NOFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2389 return 0;
2390 }
2391
2392 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
2393 hFind=FindFirstFile( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ).c_str(), &wfd );
2394 if(hFind==INVALID_HANDLE_VALUE){
2395 //"BasicCompiler.exe が見つかりません"
2396 MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2397 return 0;
2398 }
2399 FindClose(hFind);
2400
2401 //プロジェクト構造のバージョンが違う時は、再保存する
2402 if(ProjectInfo.dwVersion<PROJECT_VERSION)
2403 ProjectInfo.ModifyOfMaterial=1;
2404
2405 //保存確認
2406 if(!ProjectModifyCheck(1)) return 0;
2407
2408 return 1;
2409}
2410BOOL IsNeedCompileForProject(BOOL bDebug){
2411 extern PROJECTINFO ProjectInfo;
2412 int i2;
2413 char temporary[MAX_PATH];
2414 HANDLE hFind,hFile;
2415 WIN32_FIND_DATA wfd;
2416 FILETIME SourceTime,ExeTime;
2417
2418 if(bDebug) lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
2419 else lstrcpy(temporary,ProjectInfo.lpszOutput_Release);
2420 GetFullPath(temporary,ProjectInfo.dir);
2421
2422 hFind=FindFirstFile(temporary,&wfd);
2423 if(hFind==INVALID_HANDLE_VALUE) return 1;
2424 FindClose(hFind);
2425
2426 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2427 GetFileTime(hFile,NULL,NULL,&ExeTime);
2428 CloseHandle(hFile);
2429
2430 for(i2=0;i2<ProjectInfo.pobj_DBFileInfo->iNum;i2++){
2431 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i2]->GetFullPath(temporary);
2432 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2433 GetFileTime(hFile,NULL,NULL,&SourceTime);
2434 CloseHandle(hFile);
2435
2436 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2437 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2438 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2439 }
2440 if(ProjectInfo.NumberOfWindows){
2441 //CallBack.wbp
2442 lstrcpy(temporary,"CallBack.wbp");
2443 GetFullPath(temporary,ProjectInfo.dir);
2444 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2445 GetFileTime(hFile,NULL,NULL,&SourceTime);
2446 CloseHandle(hFile);
2447 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2448 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2449 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2450
2451 //MakeWindow.wbp
2452 lstrcpy(temporary,"MakeWindow.wbp");
2453 GetFullPath(temporary,ProjectInfo.dir);
2454 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2455 GetFileTime(hFile,NULL,NULL,&SourceTime);
2456 CloseHandle(hFile);
2457 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2458 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2459 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2460 }
2461 return 0;
2462}
Note: See TracBrowser for help on using the repository browser.