source: dev/ProjectEditor/ProjectControl.cpp@ 24

Last change on this file since 24 was 24, checked in by dai_9181, 18 years ago

保存されていないドキュメントのタブに(*)をつける機能に対応。
MDITEXTEDITINFOをCMdiTextEditに変更。今後、オブジェクト指向化を進める。

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