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

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

構成管理を大幅に改良。

File size: 78.8 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 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
752 i=lstrlen(buffer);
753
754 //プロジェクトのフォーマットバージョン
755 sprintf(buffer+i,"#VERSION=%d\r\n\r\n",PROJECT_VERSION);
756 i+=lstrlen(buffer+i);
757
758 //モジュールタイプ(EXEならば0、DLLならば1)
759 if(NewProjectInfo.dwTypeID==IDC_DLL) lstrcpy(buffer+i,"#MODULETYPE=1\r\n\r\n");
760 else lstrcpy(buffer+i,"#MODULETYPE=0\r\n\r\n");
761 i+=lstrlen(buffer+i);
762
763 //プロジェクト名
764 sprintf(buffer+i,"#NAME=%s\r\n\r\n",NewProjectInfo.name);
765 i+=lstrlen(buffer+i);
766
767 lstrcpy(buffer+i,"#PLATFORM=32\r\n\r\n");
768 i+=lstrlen(buffer+i);
769
770 //RADウィンドウの数
771 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
772 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
773 lstrcpy(buffer+i,"#USEWINDOW=1\r\n\r\n");
774 else lstrcpy(buffer+i,"#USEWINDOW=0\r\n\r\n");
775 i+=lstrlen(buffer+i);
776
777 //プロジェクトオプション
778 sprintf(buffer+i,"#OPTION=&H%08x\r\n\r\n",NewProjectInfo.dwOption);
779 i+=lstrlen(buffer+i);
780
781 //出力先(Release)
782 if(NewProjectInfo.dwTypeID==IDC_DLL)
783 sprintf(buffer+i,"#OUTPUT_RELEASE=.\\%s.dll\r\n\r\n",NewProjectInfo.name);
784 else sprintf(buffer+i,"#OUTPUT_RELEASE=.\\%s.exe\r\n\r\n",NewProjectInfo.name);
785 i+=lstrlen(buffer+i);
786
787 //出力先(Debug)
788 if(NewProjectInfo.dwTypeID==IDC_DLL)
789 sprintf(buffer+i,"#OUTPUT_DEBUG=.\\%s.dll\r\n\r\n",NewProjectInfo.name);
790 else sprintf(buffer+i,"#OUTPUT_DEBUG=.\\%s_debug.exe\r\n\r\n",NewProjectInfo.name);
791 i+=lstrlen(buffer+i);
792
793 //マニフェスト
794 sprintf(buffer+i,"#MANIFEST=%s.manifest.xml\r\n\r\n",NewProjectInfo.name);
795 i+=lstrlen(buffer+i);
796
797 //デバッグ用(コマンドライン)
798 lstrcpy(buffer+i,"#DEBUG_CMD_LINE=\r\n\r\n");
799 i+=lstrlen(buffer+i);
800
801 //デバッグ用(DLL用の実行ファイル)
802 lstrcpy(buffer+i,"#DEBUG_EXE_PATH=\r\n\r\n");
803 i+=lstrlen(buffer+i);
804
805 //リソースファイル
806 lstrcpy(buffer+i,"#RESOURCE=0\r\n\r\n");
807 i+=lstrlen(buffer+i);
808
809 //ソースファイル
810 sprintf(buffer+i,"#SOURCE\r\n%s.ab\r\n",NewProjectInfo.name);
811 i+=lstrlen(buffer+i);
812 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
813 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
814 lstrcpy(buffer+i,"MainWnd.ab\r\n");
815 i+=lstrlen(buffer+i);
816 }
817 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
818 lstrcpy(buffer+i,"dx_graphics.sbp\r\n");
819 i+=lstrlen(buffer+i);
820 lstrcpy(buffer+i,"dx_input.sbp\r\n");
821 i+=lstrlen(buffer+i);
822 lstrcpy(buffer+i,"dx_music.sbp\r\n");
823 i+=lstrlen(buffer+i);
824 }
825
826 //保存
827 sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
828 if(hFind=FindFirstFile(temporary,&wfd)){
829 if(hFind!=INVALID_HANDLE_VALUE){
830 FindClose(hFind);
831
832 //"指定したディレクトリにはすでにプロジェクトが存在します。上書きしますか?"
833 if(MessageBox(hOwner,STRING_ERROR_PROJECT_OVERWRITE,APPLICATION_NAME,MB_YESNO|MB_ICONEXCLAMATION)==IDNO) return;
834 }
835 }
836 if(!WriteBuffer(temporary,buffer,i)) return;
837
838
839 ///////////////////////////////////////////
840 //メインプログラムファイル(*.ab)を作成
841 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
842 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
843 i=lstrlen(buffer);
844 lstrcpy(buffer+i,"'---------------------------\r\n");
845 i+=lstrlen(buffer+i);
846 lstrcpy(buffer+i,"' Window Message Loop\r\n");
847 i+=lstrlen(buffer+i);
848 lstrcpy(buffer+i,"'---------------------------\r\n");
849 i+=lstrlen(buffer+i);
850 lstrcpy(buffer+i,"Dim msgMain As MSG, iResult As Long\r\n");
851 i+=lstrlen(buffer+i);
852 lstrcpy(buffer+i,"Do\r\n");
853 i+=lstrlen(buffer+i);
854 lstrcpy(buffer+i,"\tiResult=GetMessage(msgMain,0,0,0)\r\n");
855 i+=lstrlen(buffer+i);
856 lstrcpy(buffer+i,"\tIf iResult=0 or iResult=-1 Then Exit Do\r\n");
857 i+=lstrlen(buffer+i);
858 lstrcpy(buffer+i,"\tTranslateMessage(msgMain)\r\n");
859 i+=lstrlen(buffer+i);
860 lstrcpy(buffer+i,"\tDispatchMessage(msgMain)\r\n");
861 i+=lstrlen(buffer+i);
862 lstrcpy(buffer+i,"Loop\r\n\r\n");
863 i+=lstrlen(buffer+i);
864 lstrcpy(buffer+i,"' Call destructores and exit process\r\n");
865 i+=lstrlen(buffer+i);
866 lstrcpy(buffer+i,"End\r\n");
867 i+=lstrlen(buffer+i);
868 }
869 else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
870 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
871 i=lstrlen(buffer);
872 lstrcpy(buffer+i,"#N88BASIC\r\n\r\n");
873 i+=lstrlen(buffer+i);
874 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
875 i+=lstrlen(buffer+i);
876 if(NewProjectInfo.ShowHelloWorld){
877 lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
878 i+=lstrlen(buffer+i);
879 }
880 }
881 else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
882 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
883 i=lstrlen(buffer);
884 lstrcpy(buffer+i,"#console\r\n\r\n");
885 i+=lstrlen(buffer+i);
886 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
887 i+=lstrlen(buffer+i);
888 if(NewProjectInfo.ShowHelloWorld){
889 lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
890 i+=lstrlen(buffer+i);
891 }
892 }
893 else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
894 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
895 i=lstrlen(buffer);
896 lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
897 i+=lstrlen(buffer+i);
898 }
899 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
900 const std::string mainExeDirectXAbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\main_exe_directx.abp";
901 pTemp = ReadBuffer( mainExeDirectXAbpPath );
902
903 //#name#をプロジェクト名に置換
904 pTemp=PermutationWndPgmTemplate(pTemp,NewProjectInfo.name,0,0,0);
905 }
906 else if(NewProjectInfo.dwTypeID==IDC_DLL){
907 sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
908 i=lstrlen(buffer);
909 lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
910 i+=lstrlen(buffer+i);
911 lstrcpy(buffer+i,"' メモ - このファイルには、DLLの構成要素を記述します。\r\n");
912 i+=lstrlen(buffer+i);
913 lstrcpy(buffer+i,"' (例:関数定義、グローバル変数、定数定義など)\r\n");
914 i+=lstrlen(buffer+i);
915 lstrcpy(buffer+i,"'\r\n");
916 i+=lstrlen(buffer+i);
917 lstrcpy(buffer+i,"' エクスポートが必要な関数には、\"Export\" 修飾子を指定します。\r\n");
918 i+=lstrlen(buffer+i);
919 lstrcpy(buffer+i,"' (例:Function Export FuncName() As Long)\r\n");
920 i+=lstrlen(buffer+i);
921 lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
922 i+=lstrlen(buffer+i);
923 lstrcpy(buffer+i,"\r\n");
924 i+=lstrlen(buffer+i);
925 lstrcpy(buffer+i,"Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long\r\n");
926 i+=lstrlen(buffer+i);
927 lstrcpy(buffer+i,"\t'DLLエントリポイント\r\n");
928 i+=lstrlen(buffer+i);
929 lstrcpy(buffer+i,"\tSelect Case fdwReason\r\n");
930 i+=lstrlen(buffer+i);
931 lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_ATTACH\r\n");
932 i+=lstrlen(buffer+i);
933 lstrcpy(buffer+i,"\t\t\t'DLLがプロセス空間にロードされた時に実行されます。\r\n");
934 i+=lstrlen(buffer+i);
935 lstrcpy(buffer+i,"\t\t\t_System_StartupProgram()\r\n");
936 i+=lstrlen(buffer+i);
937 lstrcpy(buffer+i,"\t\t\tDllMain=1\r\n");
938 i+=lstrlen(buffer+i);
939 lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_DETACH\r\n");
940 i+=lstrlen(buffer+i);
941 lstrcpy(buffer+i,"\t\t\t_System_Call_Destructor_of_GlobalObject()\r\n");
942 i+=lstrlen(buffer+i);
943 lstrcpy(buffer+i,"\tEnd Select\r\n");
944 i+=lstrlen(buffer+i);
945 lstrcpy(buffer+i,"End Function\r\n");
946 i+=lstrlen(buffer+i);
947 lstrcpy(buffer+i,"\r\n");
948 i+=lstrlen(buffer+i);
949 }
950
951 //保存
952 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
953 sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
954 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
955
956 HeapDefaultFree(pTemp);
957 }
958 else{
959 sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
960 if(!WriteBuffer(temporary,buffer,i)) return;
961 }
962
963
964 /////////////////////
965 // MainWnd.abを作成
966 /////////////////////
967
968 std::string mainWndSbpPath = "";
969 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
970 {
971 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_windowbase.sbp";
972 }
973 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
974 {
975 mainWndSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\MainWnd_exe_directx.sbp";
976 }
977
978 if( !mainWndSbpPath.empty() ){
979 pTemp = ReadBuffer( mainWndSbpPath );
980
981 //#name#をプロジェクト名に置換
982 pTemp=PermutationWndPgmTemplate(pTemp,
983 NewProjectInfo.name,
984 "MainWnd",
985 "hMainWnd",
986 "MainWndProc");
987
988 if(NewProjectInfo.ShowHelloWorld){
989 //Hello World!表示
990 i=0;
991 lstrcpy(buffer+i,"\r\nSub MainWnd_Paint(hDC As HDC)\r\n");
992 i+=lstrlen(buffer+i);
993 lstrcpy(buffer+i,"\tDim rect As RECT\r\n");
994 i+=lstrlen(buffer+i);
995 lstrcpy(buffer+i,"\tGetClientRect(hMainWnd,rect)\r\n");
996 i+=lstrlen(buffer+i);
997 lstrcpy(buffer+i,"\tDrawText(hDC,\"Hello World!\",-1,rect,DT_CENTER or DT_VCENTER or DT_SINGLELINE)\r\n");
998 i+=lstrlen(buffer+i);
999 lstrcpy(buffer+i,"End Sub\r\n");
1000 i+=lstrlen(buffer+i);
1001
1002 pTemp=(char *)HeapReAlloc(hHeap,0,pTemp,lstrlen(pTemp)+lstrlen(buffer)+1);
1003 lstrcat(pTemp,buffer);
1004 }
1005
1006 sprintf(temporary,"%sMainWnd.ab",dir,NewProjectInfo.name);
1007 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1008
1009 HeapDefaultFree(pTemp);
1010 }
1011
1012
1013 if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
1014 ///////////////////////////
1015 // DirextX対応アプリのとき
1016 ///////////////////////////
1017
1018 //dx_graphics.sbpをコピー
1019 const std::string dxGraphicsSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_graphics.sbp";
1020 pTemp = ReadBuffer( dxGraphicsSbpPath );
1021 sprintf(temporary,"%sdx_graphics.sbp",dir,NewProjectInfo.name);
1022 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1023 HeapDefaultFree(pTemp);
1024
1025 //dx_input.sbpをコピー
1026 const std::string dxInputSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_input.sbp";
1027 pTemp = ReadBuffer( dxInputSbpPath );
1028 sprintf(temporary,"%sdx_input.sbp",dir,NewProjectInfo.name);
1029 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1030 HeapDefaultFree(pTemp);
1031
1032 //dx_music.sbpをコピー
1033 const std::string dxMusicSbpPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\dx\\dx_music.sbp";
1034 pTemp = ReadBuffer( dxMusicSbpPath );
1035 sprintf(temporary,"%sdx_music.sbp",dir,NewProjectInfo.name);
1036 WriteBuffer(temporary,pTemp,lstrlen(pTemp));
1037 HeapDefaultFree(pTemp);
1038
1039 //dx9abm.dllをコピー
1040 sprintf(temporary,"%sRuntime\\dx9abm.dll",pj_editor_Dir);
1041 sprintf(buffer,"%sdx9abm.dll",dir,NewProjectInfo.name);
1042 CopyFile(temporary,buffer,0);
1043 }
1044
1045
1046 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
1047 NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
1048 /////////////////////////////////////////
1049 // ウィンドウ定義ファイル(*.wnd)を作成
1050 /////////////////////////////////////////
1051 WINDOW_INFO WindowInfo[1];
1052 WindowInfo[0].name="MainWnd";
1053 WindowInfo[0].HandleName="hMainWnd";
1054 WindowInfo[0].pos.x=CW_USEDEFAULT;
1055 WindowInfo[0].pos.y=CW_USEDEFAULT;
1056 WindowInfo[0].size.cx=480;
1057 WindowInfo[0].size.cy=360;
1058 WindowInfo[0].caption=NewProjectInfo.name;
1059 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
1060 WindowInfo[0].style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE;
1061 else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
1062 WindowInfo[0].style=WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU;
1063 WindowInfo[0].ExStyle=0;
1064 WindowInfo[0].MenuID=0;
1065 WindowInfo[0].id=0;
1066 WindowInfo[0].bgColor=COLOR_3DFACE;
1067 GetDefaultWindowFont(&WindowInfo[0].LogFont);
1068 WindowInfo[0].IconResName=0;
1069 WindowInfo[0].ClassName="NORMAL";
1070 WindowInfo[0].CallBackName="MainWndProc";
1071 WindowInfo[0].type=WNDTYPE_DEFAULT;
1072 WindowInfo[0].filepath="MainWnd.ab";
1073 WindowInfo[0].NumberOfChildWindows=0;
1074 sprintf(temporary,"%s%s.wnd",dir,NewProjectInfo.name);
1075
1076 ProjectInfo.NumberOfMenu=0;
1077 SaveWindowFile(temporary,WindowInfo,1);
1078 }
1079
1080
1081 ////////////////////////
1082 // ワークファイルを作成
1083 ////////////////////////
1084 lstrcpy(buffer,"case4\r\n\r\n");
1085 if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
1086 lstrcat(buffer,"rad,MainWnd\r\n\r\n");
1087 }
1088 else{
1089 sprintf(buffer+lstrlen(buffer),"text,\"%s.ab\",0,0,0,0\r\n\r\n",NewProjectInfo.name);
1090 }
1091 lstrcat(buffer,"0\r\n0\r\n0\r\n0,0");
1092 //保存
1093 sprintf(temporary,"%s%s.wrk",dir,NewProjectInfo.name);
1094 if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
1095
1096
1097 //マニフェストを作成
1098 char temp2[MAX_PATH];
1099 const std::string manifestTempXmlPath = ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\manifest_temp.xml";
1100 sprintf(temp2,"%s%s.manifest.xml",dir,NewProjectInfo.name);
1101 CopyFile( manifestTempXmlPath.c_str(), temp2, 0 );
1102
1103
1104 sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
1105 OpenProject(temporary);
1106 SaveProject();
1107}
1108void SetTreeViewForProjectInfo(){
1109 extern HANDLE hHeap;
1110 extern HWND hProjectView;
1111 extern PROJECTINFO ProjectInfo;
1112 int i;
1113 char temporary[MAX_PATH];
1114 TV_INSERTSTRUCT tv;
1115
1116 sprintf(temporary,"%s ",ProjectInfo.name);
1117 lstrcat(temporary,STRING_PROJECT);
1118 SetWindowText(hProjectView,temporary);
1119
1120 tv.hInsertAfter=TVI_SORT;
1121 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
1122
1123 //ファイル ツリー
1124 ProjectInfo.pobj_DBFileInfo->ResetTree();
1125
1126 //関数ツリー
1127 ResetClassTree(-1);
1128
1129 /////////////////////
1130 // マテリアル ツリー
1131
1132 //Cursorリソース フォルダ
1133 sprintf(temporary,"Cursor %s",STRING_RESOURCE);
1134 tv.hParent=TVI_ROOT;
1135 tv.item.iImage=0;
1136 tv.item.iSelectedImage=0;
1137 tv.item.pszText=temporary;
1138 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1139 ProjectInfo.res.hCursorTreeItem=tv.hParent;
1140 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
1141 tv.item.iImage=6;
1142 tv.item.iSelectedImage=6;
1143 tv.item.pszText=ProjectInfo.res.pCursorResInfo[i].IdName;
1144 ProjectInfo.res.pCursorResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1145 }
1146
1147 //Bitmapリソース フォルダ
1148 sprintf(temporary,"Bitmap %s",STRING_RESOURCE);
1149 tv.hParent=TVI_ROOT;
1150 tv.item.iImage=0;
1151 tv.item.iSelectedImage=0;
1152 tv.item.pszText=temporary;
1153 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1154 ProjectInfo.res.hBitmapTreeItem=tv.hParent;
1155 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
1156 tv.item.iImage=5;
1157 tv.item.iSelectedImage=5;
1158 tv.item.pszText=ProjectInfo.res.pBitmapResInfo[i].IdName;
1159 ProjectInfo.res.pBitmapResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1160 }
1161
1162 //Iconリソース フォルダ
1163 sprintf(temporary,"Icon %s",STRING_RESOURCE);
1164 tv.hParent=TVI_ROOT;
1165 tv.item.iImage=0;
1166 tv.item.iSelectedImage=0;
1167 tv.item.pszText=temporary;
1168 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1169 ProjectInfo.res.hIconTreeItem=tv.hParent;
1170 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1171 tv.item.iImage=4;
1172 tv.item.iSelectedImage=4;
1173 if(i==0){
1174 sprintf(temporary,"%s (Main)",ProjectInfo.res.pIconResInfo[i].IdName);
1175 tv.item.pszText=temporary;
1176 }
1177 else tv.item.pszText=ProjectInfo.res.pIconResInfo[i].IdName;
1178 ProjectInfo.res.pIconResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1179 }
1180
1181 //Menuフォルダ
1182 tv.hParent=TVI_ROOT;
1183 tv.item.iImage=0;
1184 tv.item.iSelectedImage=0;
1185 tv.item.pszText="Menu";
1186 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1187 ProjectInfo.hMenuTreeItem=tv.hParent;
1188 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1189 tv.item.iImage=3;
1190 tv.item.iSelectedImage=3;
1191 tv.item.pszText=ProjectInfo.pMenuInfo[i].IdName;
1192 ProjectInfo.pMenuInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1193 }
1194
1195 //Windowフォルダ
1196 tv.hParent=TVI_ROOT;
1197 tv.item.iImage=0;
1198 tv.item.iSelectedImage=0;
1199 tv.item.pszText="Window";
1200 tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
1201 ProjectInfo.hWindowTreeItem=tv.hParent;
1202 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1203 tv.item.iImage=2;
1204 tv.item.iSelectedImage=2;
1205 tv.item.pszText=ProjectInfo.pWindowInfo[i].name;
1206 ProjectInfo.pWindowInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
1207 }
1208}
1209void OpenProject(char *path){
1210 extern HANDLE hHeap;
1211 extern PROJECTINFO ProjectInfo;
1212 int i,i2,i3;
1213 char *buffer,temporary[MAX_PATH],temp2[MAX_PATH];
1214
1215 //既にプロジェクトが開かれている場合は閉じる
1216 if(ProjectInfo.name[0]){
1217 if(!CloseProject()) return;
1218 }
1219 memset(&ProjectInfo,0,sizeof(PROJECTINFO));
1220
1221 //プロジェクトの作業ディレクトリを取得
1222 _splitpath(path,ProjectInfo.dir,temporary,0,0);
1223 lstrcat(ProjectInfo.dir,temporary);
1224
1225 //ファイルを開く、保存の初期ディレクトリをセット
1226 lstrcpy(pobj_nv->DefSaveDir,ProjectInfo.dir);
1227
1228
1229 //////////////////////////////////////////
1230 // リソースデータ用領域を確保
1231 ProjectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1232 ProjectInfo.res.NumberOfCursorRes=0;
1233 ProjectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1234 ProjectInfo.res.NumberOfBitmapRes=0;
1235 ProjectInfo.res.pIconResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
1236 ProjectInfo.res.NumberOfIconRes=0;
1237
1238
1239 //////////////////////////////////////////
1240 //プロジェクトファイル(*.pj)をオープン
1241 buffer=ReadBuffer(path);
1242 if(!buffer) return;
1243
1244 //解析
1245 ProjectInfo.pobj_DBFileInfo=new CDBFileInfo();
1246 for(i=0;;i++){
1247 if(buffer[i]=='\0') break;
1248 if(buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]=='#'){
1249 for(i+=3,i2=0;;i++,i2++){
1250 if(!IsVariableChar(buffer[i])){
1251 temporary[i2]=0;
1252 break;
1253 }
1254 temporary[i2]=buffer[i];
1255 }
1256 if(lstrcmpi(temporary,"VERSION")==0&&buffer[i]=='='){
1257 for(i++,i2=0;;i++,i2++){
1258 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1259 temporary[i2]=0;
1260 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1261 break;
1262 }
1263 temporary[i2]=buffer[i];
1264 }
1265 ProjectInfo.dwVersion=GetValue(temporary);
1266 }
1267 else if(lstrcmpi(temporary,"MODULETYPE")==0&&buffer[i]=='='){
1268 for(i++,i2=0;;i++,i2++){
1269 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1270 temporary[i2]=0;
1271 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1272 break;
1273 }
1274 temporary[i2]=buffer[i];
1275 }
1276 ProjectInfo.dwModuleType=atoi(temporary);
1277 }
1278 else if(lstrcmpi(temporary,"NAME")==0&&buffer[i]=='='){
1279 for(i++,i2=0;;i++,i2++){
1280 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1281 ProjectInfo.name[i2]=0;
1282 break;
1283 }
1284 ProjectInfo.name[i2]=buffer[i];
1285 }
1286 }
1287 else if(lstrcmpi(temporary,"PLATFORM")==0&&buffer[i]=='='){
1288 for(i++,i2=0;;i++,i2++){
1289 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1290 temporary[i2]=0;
1291 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1292 break;
1293 }
1294 temporary[i2]=buffer[i];
1295 }
1296 i2=atoi(temporary);
1297 extern HWND hSelectCompilerCombo;
1298 if(i2==32){
1299 //プラットフォームにWin32を選択
1300 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0);
1301 }
1302 else if(i2==64){
1303 //プラットフォームにWin64を選択
1304 SendMessage(hSelectCompilerCombo,CB_SETCURSEL,1,0);
1305 }
1306 SendMessage(hSelectCompilerCombo,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
1307 }
1308 else if(lstrcmpi(temporary,"USEWINDOW")==0&&buffer[i]=='='){
1309 for(i++,i2=0;;i++,i2++){
1310 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1311 temporary[i2]=0;
1312 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1313 break;
1314 }
1315 temporary[i2]=buffer[i];
1316 }
1317 ProjectInfo.NumberOfWindows=atoi(temporary);
1318 }
1319 else if(lstrcmpi(temporary,"OPTION")==0&&buffer[i]=='='){
1320 for(i++,i2=0;;i++,i2++){
1321 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1322 temporary[i2]=0;
1323 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1324 break;
1325 }
1326 temporary[i2]=buffer[i];
1327 }
1328 ProjectInfo.dwOption=GetValue(temporary);
1329 }
1330 else if(lstrcmpi(temporary,"OUTPUT_RELEASE")==0&&buffer[i]=='='){
1331 for(i++,i2=0;;i++,i2++){
1332 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1333 temporary[i2]=0;
1334 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1335 break;
1336 }
1337 temporary[i2]=buffer[i];
1338 }
1339 lstrcpy(ProjectInfo.lpszOutput_Release,temporary);
1340 }
1341 else if(lstrcmpi(temporary,"OUTPUT_DEBUG")==0&&buffer[i]=='='){
1342 for(i++,i2=0;;i++,i2++){
1343 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1344 temporary[i2]=0;
1345 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1346 break;
1347 }
1348 temporary[i2]=buffer[i];
1349 }
1350 lstrcpy(ProjectInfo.lpszOutput_Debug,temporary);
1351 }
1352 else if(lstrcmpi(temporary,"MANIFEST")==0&&buffer[i]=='='){
1353 for(i++,i2=0;;i++,i2++){
1354 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1355 temporary[i2]=0;
1356 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1357 break;
1358 }
1359 temporary[i2]=buffer[i];
1360 }
1361 lstrcpy(ProjectInfo.szManifestPath,temporary);
1362 }
1363 else if(lstrcmpi(temporary,"DEBUG_CMD_LINE")==0&&buffer[i]=='='){
1364 for(i++,i2=0;;i++,i2++){
1365 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1366 temporary[i2]=0;
1367 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1368 break;
1369 }
1370 temporary[i2]=buffer[i];
1371 }
1372 lstrcpy(ProjectInfo.szCmdLine,temporary);
1373 }
1374 else if(lstrcmpi(temporary,"DEBUG_EXE_PATH")==0&&buffer[i]=='='){
1375 for(i++,i2=0;;i++,i2++){
1376 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1377 temporary[i2]=0;
1378 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1379 break;
1380 }
1381 temporary[i2]=buffer[i];
1382 }
1383 lstrcpy(ProjectInfo.szExePath,temporary);
1384 }
1385 else if(lstrcmpi(temporary,"RESOURCE")==0&&buffer[i]=='='){
1386 for(i++,i2=0;;i++,i2++){
1387 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1388 temporary[i2]=0;
1389 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1390 break;
1391 }
1392 temporary[i2]=buffer[i];
1393 }
1394 if(temporary[0]!='\0'&&(!(temporary[0]=='0'&&temporary[1]=='\0'))){
1395 lstrcpy(ProjectInfo.ResourceFileName,temporary);
1396 GetResourceData();
1397 }
1398 else{
1399 sprintf(ProjectInfo.ResourceFileName,"%s.rc",ProjectInfo.name);
1400 }
1401 }
1402 else if(lstrcmpi(temporary,"SOURCE")==0&&buffer[i]=='\r'&&buffer[i+1]=='\n'){
1403 while(1){
1404 for(i+=2,i2=0;;i++,i2++){
1405 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1406 temporary[i2]=0;
1407 break;
1408 }
1409 temporary[i2]=buffer[i];
1410 }
1411 if(temporary[0]=='\0') break;
1412 ProjectInfo.pobj_DBFileInfo->add(temporary,0);
1413
1414 if(buffer[i]=='\0') break;
1415 }
1416 }
1417 else{
1418 //不明なパラメータは無視
1419 for(i++;;i++){
1420 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1421 if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
1422 break;
1423 }
1424 }
1425 }
1426 if(buffer[i]=='\0') break;
1427 }
1428 }
1429 HeapDefaultFree(buffer);
1430
1431 //古いバージョンファイルを考慮
1432 if(ProjectInfo.dwVersion<=4){
1433 if(ProjectInfo.dwModuleType==MT_DLL)
1434 sprintf(ProjectInfo.lpszOutput_Release,".\\%s.dll",ProjectInfo.name);
1435 else sprintf(ProjectInfo.lpszOutput_Release,".\\%s.exe",ProjectInfo.name);
1436 sprintf(ProjectInfo.lpszOutput_Debug,".\\%s_debug.exe",ProjectInfo.name);
1437 }
1438
1439 //ブレークポイントを初期化
1440 ProjectInfo.pobj_DBBreakPoint=new CDBBreakPoint();
1441
1442
1443 if(ProjectInfo.NumberOfWindows){
1444 /////////////////////////////////////////////
1445 //ウィンドウ定義ファイル(*.wnd)をオープン
1446 sprintf(temp2,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
1447 if(!OpenWindowFile(temp2)) return;
1448 }
1449 else{
1450 ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1451
1452 ProjectInfo.NumberOfMenu=0;
1453 ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
1454 }
1455
1456
1457 //プロジェクト ビューを設定、表示
1458 extern HWND hProjectView;
1459 SetTreeViewForProjectInfo();
1460 if(!IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1461
1462
1463 //メニュー状態を設定
1464 ResetState_DocMenu();
1465
1466
1467 //////////////////////////////////////////
1468 //ワークファイル(*.wrk)をオープン
1469 extern MDIINFO MdiInfo[MAX_WNDNUM];
1470 HTREEITEM hTreeItem;
1471 HANDLE hFind;
1472 WIN32_FIND_DATA wfd;
1473 HWND hChild;
1474 int WndNum;
1475 sprintf(temp2,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
1476 hFind=FindFirstFile(temp2,&wfd);
1477 if(hFind!=INVALID_HANDLE_VALUE){
1478 FindClose(hFind);
1479 buffer=ReadBuffer(temp2);
1480 if(!buffer) return;
1481
1482 //解析、反映
1483 memcpy(temporary,buffer,5);
1484 temporary[5]=0;
1485 if(lstrcmp(temporary,"case4")==0){
1486
1487 LockWindowUpdate(hOwner);
1488 for(i=9,i2=0;;i++,i2++){
1489 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1490 if(i2!=0){
1491 temporary[i2]=0;
1492 for(i3=0;;i3++){
1493 if(temporary[i3]==','||temporary[i3]=='\0') break;
1494 }
1495 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1496 lstrcpy(temp2,temporary+i3+1);
1497 temporary[i3]=0;
1498 if(lstrcmpi(temporary,"text")==0){
1499 if(temp2[0]!='\"') goto EndToSetWorkFile;
1500
1501 //ファイルを開く
1502 i2=1;
1503 for(i3=0;;i2++,i3++){
1504 if(temp2[i2]=='\"'||temp2[i2]=='\0'){
1505 temporary[i3]=0;
1506 break;
1507 }
1508 temporary[i3]=temp2[i2];
1509 }
1510 GetFullPath(temporary,ProjectInfo.dir);
1511 hChild=OpenFileWithExtension(temporary);
1512 WndNum=GetWndNum(hChild);
1513 if(WndNum==-1){
1514 goto EndToSetWorkFile;
1515 }
1516
1517 //ResetScrollbarが再描画時に呼び出されるので、再描画する
1518 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
1519 UpdateWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1520
1521 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1522 if(temp2[i2+1]!=',') goto EndToSetWorkFile;
1523
1524 //以前のスクロール位置を復元
1525 SCROLLINFO si;
1526 POINT pos;
1527 for(i2+=2,i3=0;;i2++,i3++){
1528 if(temp2[i2]==','||temp2[i2]=='\0'){
1529 temporary[i3]=0;
1530 break;
1531 }
1532 temporary[i3]=temp2[i2];
1533 }
1534 sscanf(temporary,"%d",&pos.x);
1535 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1536 for(i2++,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.y);
1544 si.cbSize=sizeof(SCROLLINFO);
1545 si.fMask=SIF_POS;
1546 si.nPos=pos.x;
1547 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si,1);
1548 si.nPos=pos.y;
1549 SetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si,1);
1550
1551 if(temp2[i2]=='\0') goto EndToSetWorkFile;
1552
1553 //キャレット位置をセット
1554 for(i2++,i3=0;;i2++,i3++){
1555 if(temp2[i2]==','||temp2[i2]=='\0'){
1556 temporary[i3]=0;
1557 break;
1558 }
1559 temporary[i3]=temp2[i2];
1560 }
1561 sscanf(temporary,"%d",&pos.x);
1562 if(temp2[i2]=='\0') goto EndToSetWorkFile;
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.y);
1571 TextEdit_SetSel(WndNum,pos.x,pos.y);
1572 }
1573 else if(lstrcmpi(temporary,"rad")==0){
1574 for(i3=0;i3<ProjectInfo.NumberOfWindows;i3++){
1575 if(lstrcmpi(ProjectInfo.pWindowInfo[i3].name,temp2)==0){
1576 NewRadWindow(i3);
1577 break;
1578 }
1579 }
1580 }
1581 else if(lstrcmpi(temporary,"menu")==0){
1582 for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
1583 if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
1584 NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
1585 break;
1586 }
1587 }
1588 }
1589 else if(lstrcmpi(temporary,"icon")==0){
1590 for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
1591 if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
1592 GetFullPath(temp2,ProjectInfo.dir);
1593 NewIconEditWindow(temp2);
1594 break;
1595 }
1596 }
1597 }
1598 i++;
1599 i2=-1;
1600 continue;
1601 }
1602 else break;
1603 }
1604 temporary[i2]=buffer[i];
1605 }
1606
1607 for(i+=2,i2=0;;i++,i2++){
1608 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1609 temporary[i2]=0;
1610 break;
1611 }
1612 temporary[i2]=buffer[i];
1613 }
1614 sscanf(temporary,"%d",&i2);
1615
1616 switch( i2 ){
1617 case 0:
1618 ShowFileView();
1619 break;
1620 case 1:
1621 ShowClassView();
1622 break;
1623 case 2:
1624 ShowMaterialView();
1625 break;
1626 }
1627
1628 if(buffer[i]=='\0') goto EndToSetWorkFile;
1629
1630 for(i+=2,i2=0;;i++,i2++){
1631 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1632 temporary[i2]=0;
1633 break;
1634 }
1635 temporary[i2]=buffer[i];
1636 }
1637 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
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(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),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 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1656 i2=0;
1657 while(hTreeItem){
1658 i2=GetOneParameter(temporary,i2,temp2);
1659 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1660 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1661 }
1662 }
1663 else if(lstrcmp(temporary,"case3")==0){
1664 ////////////////////////////////////////
1665 // 古いフォーマットのワークファイル
1666
1667 LockWindowUpdate(hOwner);
1668 for(i=9,i2=0;;i++,i2++){
1669 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1670 if(i2!=0){
1671 temporary[i2]=0;
1672 for(i3=0;;i3++){
1673 if(temporary[i3]==','||temporary[i3]=='\0') break;
1674 }
1675 if(temporary[i3]=='\0') goto EndToSetWorkFile;
1676 lstrcpy(temp2,temporary+i3+1);
1677 temporary[i3]=0;
1678 if(lstrcmpi(temporary,"text")==0){
1679 for(i3=0;;i3++){
1680 if(temp2[i3]==','||temp2[i3]=='\0') break;
1681 }
1682 if(temp2[i3]=='\0') goto EndToSetWorkFile;
1683 lstrcpy(temporary,temp2+i3+1);
1684 temp2[i3]=0;
1685 GetFullPath(temporary,ProjectInfo.dir);
1686 sscanf(temp2,"%d",&i3);
1687
1688 //ファイルを開く
1689 hChild=OpenFileWithExtension(temporary);
1690 WndNum=GetWndNum(hChild);
1691
1692 //キャレット位置をセット
1693 TextEdit_SetSel(WndNum,i3,i3);
1694 }
1695 else if(lstrcmpi(temporary,"rad")==0){
1696 for(i3=0;i3<ProjectInfo.NumberOfWindows;i3++){
1697 if(lstrcmpi(ProjectInfo.pWindowInfo[i3].name,temp2)==0){
1698 NewRadWindow(i3);
1699 break;
1700 }
1701 }
1702 }
1703 else if(lstrcmpi(temporary,"menu")==0){
1704 for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
1705 if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
1706 NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
1707 break;
1708 }
1709 }
1710 }
1711 else if(lstrcmpi(temporary,"icon")==0){
1712 for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
1713 if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
1714 GetFullPath(temp2,ProjectInfo.dir);
1715 NewIconEditWindow(temp2);
1716 break;
1717 }
1718 }
1719 }
1720 i++;
1721 i2=-1;
1722 continue;
1723 }
1724 else break;
1725 }
1726 temporary[i2]=buffer[i];
1727 }
1728
1729 for(i+=2,i2=0;;i++,i2++){
1730 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1731 temporary[i2]=0;
1732 break;
1733 }
1734 temporary[i2]=buffer[i];
1735 }
1736 sscanf(temporary,"%d",&i2);
1737
1738 switch( i2 ){
1739 case 0:
1740 ShowFileView();
1741 break;
1742 case 1:
1743 ShowClassView();
1744 break;
1745 case 2:
1746 ShowMaterialView();
1747 break;
1748 }
1749
1750 if(buffer[i]=='\0') goto EndToSetWorkFile;
1751
1752 for(i+=2,i2=0;;i++,i2++){
1753 if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
1754 temporary[i2]=0;
1755 break;
1756 }
1757 temporary[i2]=buffer[i];
1758 }
1759 if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
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(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),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 hTreeItem=TreeView_GetRoot(hMaterialTreeView);
1778 i2=0;
1779 while(hTreeItem){
1780 i2=GetOneParameter(temporary,i2,temp2);
1781 if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
1782 hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
1783 }
1784 }
1785EndToSetWorkFile:
1786 LockWindowUpdate(NULL);
1787 HeapDefaultFree(buffer);
1788 }
1789
1790
1791 //ウィンドウ タイトルを変更
1792 sprintf(temporary,"%s - %s",ProjectInfo.name,APPLICATION_NAME);
1793 SetWindowText(hOwner,temporary);
1794
1795
1796 ProjectInfo.modify=0;
1797 ProjectInfo.ModifyOfMaterial=0;
1798 ProjectInfo.ModifuOfResource=0;
1799}
1800BOOL ProjectModifyCheck(BOOL bRun){
1801 extern MDIINFO MdiInfo[MAX_WNDNUM];
1802 extern PROJECTINFO ProjectInfo;
1803 int i,WndNum,sw;
1804 HWND hChild;
1805 char temporary[MAX_PATH];
1806 if(ProjectInfo.modify||ProjectInfo.ModifyOfMaterial||ProjectInfo.ModifuOfResource){
1807 if(bRun==0||pobj_nv->bSaveCheckProject){
1808 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1809 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
1810 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1811
1812 if(i==IDCANCEL) return 0;
1813 if(i==IDYES) SaveProject();
1814 }
1815 else SaveProject();
1816 return 1;
1817 }
1818 hChild=GetWindow(hClient,GW_CHILD);
1819 while(hChild){
1820 WndNum=GetWndNum(hChild);
1821 sw=0;
1822 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1823 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
1824 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
1825 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1826 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1827 }
1828 }
1829 }
1830 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1831 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
1832 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1833 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
1834 GetFullPath(temporary,ProjectInfo.dir);
1835 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
1836 }
1837 }
1838 }
1839
1840 if(sw){
1841 if(bRun==0||pobj_nv->bSaveCheckProject){
1842 //"\"%s\" プロジェクトは変更されています。保存しますか?"
1843 sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
1844 i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
1845
1846 if(i==IDCANCEL) return 0;
1847 if(i==IDYES) SaveProject();
1848 }
1849 else SaveProject();
1850 return 1;
1851 }
1852 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1853 }
1854 return 2;
1855}
1856_int8 CloseProject(void){
1857 extern HANDLE hHeap;
1858 extern MDIINFO MdiInfo[MAX_WNDNUM];
1859 extern PROJECTINFO ProjectInfo;
1860 int i,i2,WndNum;
1861 HWND hChild,hCloseChild;
1862 char temporary[MAX_PATH];
1863
1864
1865 //保存確認
1866 i=ProjectModifyCheck(0);
1867 if(i==0) return 0;
1868 else if(i==2) MakeWorkFile();
1869
1870 //プロジェクトに関するMDIウィンドウをすべて閉じる
1871 hChild=GetWindow(hClient,GW_CHILD);
1872 while(hChild){
1873 hCloseChild=hChild;
1874 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1875 WndNum=GetWndNum(hCloseChild);
1876 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1877 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
1878 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
1879 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
1880
1881 //変更フラグをオフにする
1882 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1883
1884 SendMessage(hCloseChild,WM_CLOSE,0,0);
1885 break;
1886 }
1887 }
1888 }
1889 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1890 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1891 if(lstrcmp(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[i].name)==0){
1892 SendMessage(hCloseChild,WM_CLOSE,0,0);
1893 break;
1894 }
1895 }
1896 }
1897 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1898 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
1899 if(lstrcmp(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
1900 SendMessage(hCloseChild,WM_CLOSE,0,0);
1901 break;
1902 }
1903 }
1904 }
1905 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1906 for(i=0;ProjectInfo.res.NumberOfIconRes;i++){
1907 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
1908 GetFullPath(temporary,ProjectInfo.dir);
1909 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
1910 SendMessage(hCloseChild,WM_CLOSE,0,0);
1911 break;
1912 }
1913 }
1914 }
1915 }
1916
1917 //ファイル情報のメモリを解放
1918 delete ProjectInfo.pobj_DBFileInfo;
1919
1920 //ブレークポイントのオブジェクトを解放
1921 delete ProjectInfo.pobj_DBBreakPoint;
1922
1923 //ウィンドウ情報のメモリを解放
1924 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
1925 HeapDefaultFree(ProjectInfo.pWindowInfo[i].name);
1926 HeapDefaultFree(ProjectInfo.pWindowInfo[i].HandleName);
1927 HeapDefaultFree(ProjectInfo.pWindowInfo[i].caption);
1928 HeapDefaultFree(ProjectInfo.pWindowInfo[i].ClassName);
1929 HeapDefaultFree(ProjectInfo.pWindowInfo[i].CallBackName);
1930 HeapDefaultFree(ProjectInfo.pWindowInfo[i].filepath);
1931 if(ProjectInfo.pWindowInfo[i].MenuID)
1932 HeapDefaultFree(ProjectInfo.pWindowInfo[i].MenuID);
1933 if(ProjectInfo.pWindowInfo[i].IconResName)
1934 HeapDefaultFree(ProjectInfo.pWindowInfo[i].IconResName);
1935
1936 //子ウィンドウのメモリを解放
1937 for(i2=0;i2<ProjectInfo.pWindowInfo[i].NumberOfChildWindows;i2++){
1938 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].IdName);
1939 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].caption);
1940 if(ProjectInfo.pWindowInfo[i].pChildInfo[i2].Control==CT_IMAGEBOX){
1941 //イメージ ボックスの場合
1942 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].ImageCtrlInfo.path);
1943 }
1944 }
1945 HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo);
1946 }
1947 HeapDefaultFree(ProjectInfo.pWindowInfo);
1948
1949 //メニュー情報のメモリを解放
1950 HeapMenuDataFree(ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu,0);
1951 HeapDefaultFree(ProjectInfo.pMenuInfo);
1952
1953 //リソースのメモリを解放
1954 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
1955 HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].IdName);
1956 HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].path);
1957 }
1958 HeapDefaultFree(ProjectInfo.res.pCursorResInfo);
1959 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
1960 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].IdName);
1961 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].path);
1962 }
1963 HeapDefaultFree(ProjectInfo.res.pBitmapResInfo);
1964 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
1965 HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].IdName);
1966 HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].path);
1967 }
1968 HeapDefaultFree(ProjectInfo.res.pIconResInfo);
1969
1970 //プロジェクト ビューを非表示にする
1971 extern HWND hProjectView;
1972 if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1973 SetWindowText(hProjectView,"Project View");
1974
1975 TreeView_DeleteAllItems(pobj_FileTree->hTree);
1976 TreeView_DeleteAllItems(hProcedureTreeView);
1977 TreeView_DeleteAllItems(hMaterialTreeView);
1978
1979 //ウィンドウ タイトルを変更
1980 SetWindowText(hOwner,APPLICATION_NAME);
1981
1982 ProjectInfo.name[0]=0;
1983
1984 //メニュー状態を設定
1985 ResetState_DocMenu();
1986
1987 return 1;
1988}
1989void MakeWorkFile(void){
1990 extern MDIINFO MdiInfo[MAX_WNDNUM];
1991 extern PROJECTINFO ProjectInfo;
1992 int i,i2,WndNum;
1993 char temporary[MAX_PATH],buffer[32767];
1994 HWND hChild;
1995 CHARRANGE CharRange;
1996
1997 //ワークファイル(*.wrk)を作成
1998 lstrcpy(buffer,"case4\r\n\r\n");
1999 i2=lstrlen(buffer);
2000
2001
2002 ///////////////////////
2003 //MDIウィンドウの並び
2004 hChild=GetWindow(GetWindow(hClient,GW_CHILD),GW_HWNDLAST);
2005 while(hChild){
2006 WndNum=GetWndNum(hChild);
2007 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2008 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2009 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
2010 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2011 TextEdit_GetSel(WndNum,&CharRange);
2012
2013 SCROLLINFO si;
2014 POINT pos;
2015 si.cbSize=sizeof(SCROLLINFO);
2016 si.fMask=SIF_POS;
2017 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_HORZ,&si);
2018 pos.x=si.nPos;
2019 GetScrollInfo(MdiInfo[WndNum].pMdiTextEdit->hEdit,SB_VERT,&si);
2020 pos.y=si.nPos;
2021
2022 sprintf(buffer+i2,"text,\"%s\",%d,%d,%d,%d\r\n",
2023 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path,
2024 pos.x,
2025 pos.y,
2026 CharRange.cpMin,
2027 CharRange.cpMax);
2028 i2+=lstrlen(buffer+i2);
2029 break;
2030 }
2031 }
2032 }
2033 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
2034 for(i=0;i<ProjectInfo.NumberOfWindows;i++){
2035 if(lstrcmpi(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[i].name)==0){
2036 sprintf(buffer+i2,"rad,%s\r\n",MdiInfo[WndNum].path);
2037 i2+=lstrlen(buffer+i2);
2038 break;
2039 }
2040 }
2041 }
2042 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
2043 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
2044 if(lstrcmpi(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
2045 sprintf(buffer+i2,"menu,%s\r\n",MdiInfo[WndNum].path);
2046 i2+=lstrlen(buffer+i2);
2047 break;
2048 }
2049 }
2050 }
2051 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
2052 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2053 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
2054 GetFullPath(temporary,ProjectInfo.dir);
2055 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2056 sprintf(buffer+i2,"icon,%s\r\n",ProjectInfo.res.pIconResInfo[i].path);
2057 i2+=lstrlen(buffer+i2);
2058 break;
2059 }
2060 }
2061 }
2062 hChild=GetNextWindow(hChild,GW_HWNDPREV);
2063 }
2064 lstrcpy(buffer+i2,"\r\n");
2065 i2+=2;
2066
2067
2068 //////////////////////////
2069 //ツリービューの展開状況
2070 sprintf(buffer+i2,"%d\r\n",TabCtrl_GetCurSel(hProjectViewTab));
2071 i2+=lstrlen(buffer+i2);
2072 TVITEM tvItem;
2073 memset(&tvItem,0,sizeof(TVITEM));
2074 tvItem.mask=TVIF_HANDLE|TVIF_STATE;
2075 tvItem.hItem=TreeView_GetRoot(pobj_FileTree->hTree);
2076 TreeView_GetItem(pobj_FileTree->hTree,&tvItem);
2077 if(tvItem.state&TVIS_EXPANDED) i=1;
2078 else i=0;
2079 sprintf(buffer+i2,"%d\r\n",i);
2080 i2+=lstrlen(buffer+i2);
2081
2082 tvItem.hItem=TreeView_GetRoot(hProcedureTreeView);
2083 TreeView_GetItem(hProcedureTreeView,&tvItem);
2084 if(tvItem.state&TVIS_EXPANDED) i=1;
2085 else i=0;
2086 sprintf(buffer+i2,"%d\r\n",i);
2087 i2+=lstrlen(buffer+i2);
2088
2089 tvItem.hItem=TreeView_GetRoot(hMaterialTreeView);
2090 while(tvItem.hItem){
2091 TreeView_GetItem(hMaterialTreeView,&tvItem);
2092 if(tvItem.state&TVIS_EXPANDED) i=1;
2093 else i=0;
2094 sprintf(buffer+i2,"%d",i);
2095 i2+=lstrlen(buffer+i2);
2096
2097 tvItem.hItem=TreeView_GetNextSibling(hMaterialTreeView,tvItem.hItem);
2098 if(tvItem.hItem){
2099 lstrcpy(buffer+i2,",");
2100 i2+=lstrlen(buffer+i2);
2101 }
2102 }
2103
2104
2105 //保存
2106 sprintf(temporary,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
2107 WriteBuffer(temporary,buffer,i2);
2108}
2109void SaveProject(void){
2110 extern MDIINFO MdiInfo[MAX_WNDNUM];
2111 extern PROJECTINFO ProjectInfo;
2112 int i,i2,i3,WndNum;
2113 char temporary[MAX_PATH],buffer[32767];
2114 HWND hChild;
2115
2116 //"プロジェクトを保存中..."
2117 SetStatusText(STRING_PROJECT_SAVING);
2118
2119 //プロジェクトファイルのバージョンを設定
2120 ProjectInfo.dwVersion=PROJECT_VERSION;
2121
2122 hChild=GetWindow(hClient,GW_CHILD);
2123 while(hChild){
2124 WndNum=GetWndNum(hChild);
2125 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2126 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
2127 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2128 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
2129 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2130 SaveDocument(hChild,NULL);
2131 break;
2132 }
2133 }
2134 }
2135 }
2136 if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
2137 if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
2138 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2139 lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
2140 GetFullPath(temporary,ProjectInfo.dir);
2141 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
2142 SaveDocument(hChild,NULL);
2143 break;
2144 }
2145 }
2146 }
2147 }
2148 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2149 }
2150
2151
2152 //////////////////////////////////////
2153 //プロジェクトファイル(*.pj)を作成
2154 lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
2155 i2=lstrlen(buffer);
2156 sprintf(buffer+i2,"#VERSION=%d\r\n\r\n",ProjectInfo.dwVersion);
2157 i2+=lstrlen(buffer+i2);
2158 sprintf(buffer+i2,"#MODULETYPE=%d\r\n\r\n",ProjectInfo.dwModuleType);
2159 i2+=lstrlen(buffer+i2);
2160 sprintf(buffer+i2,"#NAME=%s\r\n\r\n",ProjectInfo.name);
2161 i2+=lstrlen(buffer+i2);
2162 extern HWND hSelectCompilerCombo;
2163 if(SendMessage(hSelectCompilerCombo,CB_GETCURSEL,0,0)==0){
2164 sprintf(buffer+i2,"#PLATFORM=32\r\n\r\n",ProjectInfo.name);
2165 i2+=lstrlen(buffer+i2);
2166 }
2167 else{
2168 sprintf(buffer+i2,"#PLATFORM=64\r\n\r\n",ProjectInfo.name);
2169 i2+=lstrlen(buffer+i2);
2170 }
2171 sprintf(buffer+i2,"#USEWINDOW=%d\r\n\r\n",ProjectInfo.NumberOfWindows);
2172 i2+=lstrlen(buffer+i2);
2173 sprintf(buffer+i2,"#OPTION=&H%08x\r\n\r\n",ProjectInfo.dwOption);
2174 i2+=lstrlen(buffer+i2);
2175 sprintf(buffer+i2,"#OUTPUT_RELEASE=%s\r\n\r\n",ProjectInfo.lpszOutput_Release);
2176 i2+=lstrlen(buffer+i2);
2177 sprintf(buffer+i2,"#OUTPUT_DEBUG=%s\r\n\r\n",ProjectInfo.lpszOutput_Debug);
2178 i2+=lstrlen(buffer+i2);
2179 sprintf(buffer+i2,"#MANIFEST=%s\r\n\r\n",ProjectInfo.szManifestPath);
2180 i2+=lstrlen(buffer+i2);
2181 sprintf(buffer+i2,"#DEBUG_CMD_LINE=%s\r\n\r\n",ProjectInfo.szCmdLine);
2182 i2+=lstrlen(buffer+i2);
2183 sprintf(buffer+i2,"#DEBUG_EXE_PATH=%s\r\n\r\n",ProjectInfo.szExePath);
2184 i2+=lstrlen(buffer+i2);
2185 if(ProjectInfo.ResourceFileName[0]){
2186 sprintf(buffer+i2,"#RESOURCE=%s\r\n\r\n",ProjectInfo.ResourceFileName);
2187 i2+=lstrlen(buffer+i2);
2188 }
2189 else{
2190 lstrcpy(buffer+i2,"#RESOURCE=0\r\n\r\n");
2191 i2+=lstrlen(buffer+i2);
2192 }
2193 sprintf(buffer+i2,"#SOURCE\r\n");
2194 i2+=lstrlen(buffer+i2);
2195 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2196 sprintf(buffer+i2,"%s\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
2197 i2+=lstrlen(buffer+i2);
2198 }
2199
2200 //保存
2201 sprintf(temporary,"%s%s.pj",ProjectInfo.dir,ProjectInfo.name);
2202 WriteBuffer(temporary,buffer,i2);
2203
2204
2205 //////////////////////////////////
2206 // リソースファイル(*.rc、resource.ab)を作成
2207 if(ProjectInfo.ResourceFileName[0]){
2208 i2=0;
2209 i3=101;
2210 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++,i3++){
2211 sprintf(buffer+i2,"Const %s=%d\r\n",
2212 ProjectInfo.res.pCursorResInfo[i].IdName,
2213 i3);
2214 i2+=lstrlen(buffer+i2);
2215 }
2216 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++,i3++){
2217 sprintf(buffer+i2,"Const %s=%d\r\n",
2218 ProjectInfo.res.pBitmapResInfo[i].IdName,
2219 i3);
2220 i2+=lstrlen(buffer+i2);
2221 }
2222 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++,i3++){
2223 sprintf(buffer+i2,"Const %s=%d\r\n",
2224 ProjectInfo.res.pIconResInfo[i].IdName,
2225 i3);
2226 i2+=lstrlen(buffer+i2);
2227 }
2228
2229 //保存(resource.ab)
2230 lstrcpy(temporary,"resource.ab");
2231 GetFullPath(temporary,ProjectInfo.dir);
2232 WriteBuffer(temporary,buffer,i2);
2233
2234 i2=0;
2235 for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
2236 sprintf(buffer+i2,"%s CURSOR \"%s\"\r\n",
2237 ProjectInfo.res.pCursorResInfo[i].IdName,
2238 ProjectInfo.res.pCursorResInfo[i].path);
2239 i2+=lstrlen(buffer+i2);
2240 }
2241 for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
2242 sprintf(buffer+i2,"%s BITMAP \"%s\"\r\n",
2243 ProjectInfo.res.pBitmapResInfo[i].IdName,
2244 ProjectInfo.res.pBitmapResInfo[i].path);
2245 i2+=lstrlen(buffer+i2);
2246 }
2247 for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
2248 sprintf(buffer+i2,"%s ICON \"%s\"\r\n",
2249 ProjectInfo.res.pIconResInfo[i].IdName,
2250 ProjectInfo.res.pIconResInfo[i].path);
2251 i2+=lstrlen(buffer+i2);
2252 }
2253
2254 //マニフェスト
2255 if(ProjectInfo.dwOption&PJ_OP_RC_MANIFEST){
2256 sprintf(buffer+i2,"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST \"%s\"\r\n",
2257 ProjectInfo.szManifestPath);
2258 i2+=lstrlen(buffer+i2);
2259 }
2260
2261 //保存
2262 lstrcpy(temporary,ProjectInfo.ResourceFileName);
2263 GetFullPath(temporary,ProjectInfo.dir);
2264 WriteBuffer(temporary,buffer,i2);
2265 }
2266
2267
2268 ///////////////////////////////////////
2269 //インデックスファイル(*.idx)を作成
2270 buffer[0]=0;
2271 lstrcpy(buffer,"' インデックス プログラム\r\n");
2272 i2=lstrlen(buffer);
2273 if(ProjectInfo.dwOption&PJ_OP_SOURCE_MASK){
2274 if(ProjectInfo.dwOption&PJ_OP_STRICT){
2275 /* #strictディレクティブは今は使われていない
2276 lstrcpy(buffer+i2,"\r\n");
2277 i2+=lstrlen(buffer+i2);
2278 lstrcpy(buffer+i2,"#strict");
2279 i2+=lstrlen(buffer+i2);
2280 lstrcpy(buffer+i2,"\r\n");
2281 i2+=lstrlen(buffer+i2);
2282 */
2283 }
2284 lstrcpy(buffer+i2,"\r\n");
2285 i2+=lstrlen(buffer+i2);
2286 lstrcpy(buffer+i2,"'Win32APIの定義ファイル\r\n");
2287 i2+=lstrlen(buffer+i2);
2288 if(ProjectInfo.dwOption&PJ_OP_MMSYSTEM){
2289 lstrcpy(buffer+i2,"#include <api_mmsys.sbp>\r\n");
2290 i2+=lstrlen(buffer+i2);
2291 }
2292 if(ProjectInfo.dwOption&PJ_OP_COMMCTRL){
2293 lstrcpy(buffer+i2,"#include <api_commctrl.sbp>\r\n");
2294 i2+=lstrlen(buffer+i2);
2295 }
2296 if(ProjectInfo.dwOption&PJ_OP_RICHEDIT){
2297 lstrcpy(buffer+i2,"#include <api_richedit.sbp>\r\n");
2298 i2+=lstrlen(buffer+i2);
2299 }
2300 if(ProjectInfo.dwOption&PJ_OP_WINSOCK){
2301 lstrcpy(buffer+i2,"#include <api_winsock2.sbp>\r\n");
2302 i2+=lstrlen(buffer+i2);
2303 }
2304 }
2305 if(ProjectInfo.NumberOfWindows){
2306 lstrcpy(buffer+i2,"\r\n");
2307 i2+=lstrlen(buffer+i2);
2308 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ制御プログラム\r\n");
2309 i2+=lstrlen(buffer+i2);
2310 sprintf(buffer+i2,"#include \"Callback.wbp\"\r\n");
2311 i2+=lstrlen(buffer+i2);
2312 }
2313 if(ProjectInfo.pobj_DBFileInfo->iNum>1){
2314 lstrcpy(buffer+i2,"\r\n");
2315 i2+=lstrlen(buffer+i2);
2316 lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
2317 i2+=lstrlen(buffer+i2);
2318 for(i=1;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
2319 //メインファイルは含まない
2320 sprintf(buffer+i2,"#include \"%s\"\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
2321 i2+=lstrlen(buffer+i2);
2322 lstrcpy(buffer+i2,"_ClearNamespaceImported\r\n");
2323 i2+=lstrlen(buffer+i2);
2324 }
2325 }
2326 if(ProjectInfo.NumberOfWindows){
2327 lstrcpy(buffer+i2,"\r\n");
2328 i2+=lstrlen(buffer+i2);
2329 lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ生成プログラム\r\n");
2330 i2+=lstrlen(buffer+i2);
2331 sprintf(buffer+i2,"#include \"MakeWindow.wbp\"\r\n");
2332 i2+=lstrlen(buffer+i2);
2333 }
2334 if(ProjectInfo.ResourceFileName[0]){
2335 //リソースファイルが含まれる場合
2336 lstrcpy(buffer+i2,"\r\n");
2337 i2+=lstrlen(buffer+i2);
2338 lstrcpy(buffer+i2,"'リソースファイル\r\n");
2339 i2+=lstrlen(buffer+i2);
2340 lstrcpy(buffer+i2,"#include \"resource.ab\"\r\n");
2341 i2+=lstrlen(buffer+i2);
2342 sprintf(buffer+i2,"#resource \"%s.rc\"\r\n",ProjectInfo.name);
2343 i2+=lstrlen(buffer+i2);
2344 }
2345
2346 //保存
2347 sprintf(temporary,"%s%s.idx",ProjectInfo.dir,ProjectInfo.name);
2348 WriteBuffer(temporary,buffer,i2);
2349
2350
2351 if(ProjectInfo.NumberOfWindows){
2352 /////////////////////////////////////////////////////
2353 //ウィンドウ関連ファイル(*.wnd)を作成、保存
2354 if(ProjectInfo.ModifyOfMaterial){
2355 sprintf(temporary,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
2356 SaveWindowFile(temporary,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows);
2357 }
2358
2359 //.wbpファイルを生成
2360 SaveWindowProgram();
2361 }
2362
2363
2364 MakeWorkFile();
2365
2366 SetStatusText("");
2367
2368 ProjectInfo.modify=0;
2369 ProjectInfo.ModifuOfResource=0;
2370}
2371
2372BOOL SetProjectToRun(void){
2373 extern PROJECTINFO ProjectInfo;
2374 HANDLE hFind;
2375 WIN32_FIND_DATA wfd;
2376
2377 if(ProjectInfo.pobj_DBFileInfo->iNum==0){
2378 //"プログラム ファイルがプロジェクトに存在しません。"
2379 MessageBox(hOwner,STRING_ERROR_NOFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2380 return 0;
2381 }
2382
2383 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
2384 hFind=FindFirstFile( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ).c_str(), &wfd );
2385 if(hFind==INVALID_HANDLE_VALUE){
2386 //"BasicCompiler.exe が見つかりません"
2387 MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
2388 return 0;
2389 }
2390 FindClose(hFind);
2391
2392 //プロジェクト構造のバージョンが違う時は、再保存する
2393 if(ProjectInfo.dwVersion<PROJECT_VERSION)
2394 ProjectInfo.ModifyOfMaterial=1;
2395
2396 //保存確認
2397 if(!ProjectModifyCheck(1)) return 0;
2398
2399 return 1;
2400}
2401BOOL IsNeedCompileForProject(BOOL bDebug){
2402 extern PROJECTINFO ProjectInfo;
2403 int i2;
2404 char temporary[MAX_PATH];
2405 HANDLE hFind,hFile;
2406 WIN32_FIND_DATA wfd;
2407 FILETIME SourceTime,ExeTime;
2408
2409 if(bDebug) lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
2410 else lstrcpy(temporary,ProjectInfo.lpszOutput_Release);
2411 GetFullPath(temporary,ProjectInfo.dir);
2412
2413 hFind=FindFirstFile(temporary,&wfd);
2414 if(hFind==INVALID_HANDLE_VALUE) return 1;
2415 FindClose(hFind);
2416
2417 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2418 GetFileTime(hFile,NULL,NULL,&ExeTime);
2419 CloseHandle(hFile);
2420
2421 for(i2=0;i2<ProjectInfo.pobj_DBFileInfo->iNum;i2++){
2422 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i2]->GetFullPath(temporary);
2423 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2424 GetFileTime(hFile,NULL,NULL,&SourceTime);
2425 CloseHandle(hFile);
2426
2427 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2428 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2429 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2430 }
2431 if(ProjectInfo.NumberOfWindows){
2432 //CallBack.wbp
2433 lstrcpy(temporary,"CallBack.wbp");
2434 GetFullPath(temporary,ProjectInfo.dir);
2435 hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2436 GetFileTime(hFile,NULL,NULL,&SourceTime);
2437 CloseHandle(hFile);
2438 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2439 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2440 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2441
2442 //MakeWindow.wbp
2443 lstrcpy(temporary,"MakeWindow.wbp");
2444 GetFullPath(temporary,ProjectInfo.dir);
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 if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
2449 SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
2450 SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
2451 }
2452 return 0;
2453}
Note: See TracBrowser for help on using the repository browser.