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

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

・PROJECTINFO構造体を廃止し、Projectクラスを採用した。
・ProjectInfoをprojectInfoにリネーム

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