source: dev/ProjectEditor/ProjectControl.cpp@ 81

Last change on this file since 81 was 81, checked in by dai_9181, 17 years ago

プロジェクトを開いていないときでもクラスビューの機能を有効にした。

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