source: dev/trunk/ab5.0/abdev/abdev/Resource.cpp @ 620

Last change on this file since 620 was 620, checked in by dai_9181, 15 years ago

Projectクラスをリファクタリング中。

File size: 18.1 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5#if defined(JPN)
6//日本語
7#include "pj_msg_jpn.h"
8#else
9//英語
10#include "pj_msg_eng.h"
11#endif
12
13void GetResourceData(void){
14    extern HANDLE hHeap;
15    int i2,i3;
16    char *buffer,temporary[MAX_PATH],temp2[MAX_PATH],temp3[MAX_PATH];
17    HANDLE hFile;
18
19    lstrcpy(temporary,projectInfo.ResourceFileName);
20    lstrcpy( temporary, projectInfo.GetWorkDir().GetFullPath( temporary ).c_str() );
21
22    hFile=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
23    if(hFile==INVALID_HANDLE_VALUE) return;
24    i2=GetFileSize(hFile,NULL);
25    buffer=(char *)HeapAlloc(hHeap,0,i2+i2+1);
26    ReadFile(hFile,buffer,i2,(DWORD *)&i3,NULL);
27    CloseHandle(hFile);
28    buffer[i3]=0;
29    ChangeReturnCode(buffer);
30
31    i2=0;
32    while(1){
33        //ID
34        while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
35        for(i3=0;;i2++,i3++){
36            if(!IsVariableChar(buffer[i2])){
37                temp3[i3]=0;
38                break;
39            }
40            temp3[i3]=buffer[i2];
41        }
42        if(temp3[0]=='\0') break;
43
44        //Type
45        while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
46        for(i3=0;;i2++,i3++){
47            if(!IsVariableChar(buffer[i2])){
48                temporary[i3]=0;
49                break;
50            }
51            temporary[i3]=buffer[i2];
52        }
53
54        //FileName
55        while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
56        if(buffer[i2]!='\"'){
57            //エラー
58            return;
59        }
60        for(i2++,i3=0;;i2++,i3++){
61            if(buffer[i2]=='\"'){
62                temp2[i3]=0;
63                break;
64            }
65            temp2[i3]=buffer[i2];
66        }
67
68        if(lstrcmpi(temporary,"CURSOR")==0){
69            projectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,projectInfo.res.pCursorResInfo,(projectInfo.res.NumberOfCursorRes+1)*sizeof(RESITEMINFO));
70
71            projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].IdName=
72                (char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
73            lstrcpy(projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].IdName,temp3);
74
75            projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].path=
76                (char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
77            lstrcpy(projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].path,temp2);
78
79            projectInfo.res.NumberOfCursorRes++;
80        }
81        else if(lstrcmpi(temporary,"BITMAP")==0){
82            projectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,projectInfo.res.pBitmapResInfo,(projectInfo.res.NumberOfBitmapRes+1)*sizeof(RESITEMINFO));
83
84            projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].IdName=
85                (char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
86            lstrcpy(projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].IdName,temp3);
87
88            projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].path=
89                (char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
90            lstrcpy(projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].path,temp2);
91
92            projectInfo.res.NumberOfBitmapRes++;
93        }
94        else if(lstrcmpi(temporary,"ICON")==0){
95            projectInfo.res.pIconResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,projectInfo.res.pIconResInfo,(projectInfo.res.NumberOfIconRes+1)*sizeof(RESITEMINFO));
96
97            projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].IdName=
98                (char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
99            lstrcpy(projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].IdName,temp3);
100
101            projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].path=
102                (char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
103            lstrcpy(projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].path,temp2);
104
105            projectInfo.res.NumberOfIconRes++;
106        }
107        else if(lstrcmpi(temporary,"RT_MANIFEST")==0){
108            //無視
109        }
110        else{
111            //エラー
112            return;
113        }
114
115        i2++;
116        while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
117        if(buffer[i2]=='\0') break;
118        else if(buffer[i2]!='\n'){
119            //エラー
120            return;
121        }
122        i2++;
123    }
124
125    //リソースが空の場合
126    if(projectInfo.res.NumberOfCursorRes==0&&
127        projectInfo.res.NumberOfBitmapRes==0&&
128        projectInfo.res.NumberOfIconRes==0)
129        projectInfo.ResourceFileName[0]=0;
130
131    HeapDefaultFree(buffer);
132}
133
134void Project_CursorResInsert(void){
135    extern HANDLE hHeap;
136    extern LPSTR CursorFileFilter;
137    int i2,i3;
138    char temporary[MAX_PATH];
139
140    if(!projectInfo.ResourceFileName[0])
141        sprintf(projectInfo.ResourceFileName,"%s.rc",projectInfo.GetName().c_str());
142
143    //"カーソル ファイルを指定してください"
144    if(!GetFilePathDialog(hOwner,temporary,CursorFileFilter,STRING_FILEOPENTITLE_CURSOR,TRUE)) return;
145
146    lstrcpy( temporary, projectInfo.GetWorkDir().GetRelationalPath( temporary ).c_str() );
147
148    projectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,projectInfo.res.pCursorResInfo,(projectInfo.res.NumberOfCursorRes+1)*sizeof(RESITEMINFO));
149
150    projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].path=
151        (char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
152    lstrcpy(projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].path,temporary);
153
154    for(i3=1;;i3++){
155        sprintf(temporary,"IDC_CURSOR%d",i3);
156        for(i2=0;i2<projectInfo.res.NumberOfCursorRes;i2++){
157            if(lstrcmp(temporary,projectInfo.res.pCursorResInfo[i2].IdName)==0) break;
158        }
159        if(i2==projectInfo.res.NumberOfCursorRes) break;
160    }
161
162    projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].IdName=
163        (char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
164    lstrcpy(projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].IdName,temporary);
165
166    //ツリービューに追加
167    extern HWND hMaterialTreeView;
168    TV_INSERTSTRUCT tv;
169    tv.hInsertAfter=TVI_SORT;
170    tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
171    tv.item.iImage=6;
172    tv.item.iSelectedImage=6;
173    tv.hParent=projectInfo.res.hCursorTreeItem;
174    tv.item.pszText=temporary;
175
176    projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].hTreeItem=
177        TreeView_InsertItem(hMaterialTreeView,&tv);
178
179    TreeView_SelectItem(hMaterialTreeView,projectInfo.res.pCursorResInfo[projectInfo.res.NumberOfCursorRes].hTreeItem);
180
181    projectInfo.res.NumberOfCursorRes++;
182    projectInfo.ModifuOfResource=1;
183}
184void Project_Cursor_Delete(int CursorInfoNum){
185    int i;
186
187    //ツリービューから削除
188    extern HWND hMaterialTreeView;
189    TreeView_DeleteItem(hMaterialTreeView,projectInfo.res.pCursorResInfo[CursorInfoNum].hTreeItem);
190
191    //projectInfo.pCursorInfo構造体から削除
192    HeapDefaultFree(projectInfo.res.pCursorResInfo[CursorInfoNum].IdName);
193    HeapDefaultFree(projectInfo.res.pCursorResInfo[CursorInfoNum].path);
194    projectInfo.res.NumberOfCursorRes--;
195    for(i=CursorInfoNum;i<projectInfo.res.NumberOfCursorRes;i++)
196        projectInfo.res.pCursorResInfo[i]=projectInfo.res.pCursorResInfo[i+1];
197
198    projectInfo.ModifuOfResource=1;
199}
200void Project_Cursor_RenameID(int CursorInfoNum){
201    extern HANDLE hHeap;
202    extern char NewIdName[MAX_PATH];
203    extern HWND hMaterialTreeView;
204    int i2;
205    char temporary[MAX_PATH];
206    TVITEM tvItem;
207
208    if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_ResourceID_Input,(long)projectInfo.res.pCursorResInfo[CursorInfoNum].IdName)) return;
209
210    //重複チェック
211    for(i2=0;i2<projectInfo.res.NumberOfCursorRes;i2++){
212        if(i2==CursorInfoNum) continue;
213        if(lstrcmp(NewIdName,projectInfo.res.pCursorResInfo[i2].IdName)==0){
214            //"ID \"%s\" は既にプロジェクト内に存在します。"
215            sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
216            MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
217            return;
218        }
219    }
220
221    HeapDefaultFree(projectInfo.res.pCursorResInfo[CursorInfoNum].IdName);
222    projectInfo.res.pCursorResInfo[CursorInfoNum].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
223    lstrcpy(projectInfo.res.pCursorResInfo[CursorInfoNum].IdName,NewIdName);
224
225    tvItem.hItem=projectInfo.res.pCursorResInfo[CursorInfoNum].hTreeItem;
226    tvItem.mask=TVIF_TEXT;
227    tvItem.pszText=projectInfo.res.pCursorResInfo[CursorInfoNum].IdName;
228    tvItem.cchTextMax=lstrlen(projectInfo.res.pCursorResInfo[CursorInfoNum].IdName)+1;
229    TreeView_SetItem(hMaterialTreeView,&tvItem);
230
231    projectInfo.ModifuOfResource=1;
232
233    TreeView_SortChildren(hMaterialTreeView,
234        TreeView_GetParent(hMaterialTreeView,projectInfo.res.pCursorResInfo[CursorInfoNum].hTreeItem),
235        0);
236}
237
238void Project_BitmapResInsert(void){
239    extern HANDLE hHeap;
240    extern LPSTR BitmapFileFilter;
241    int i2,i3;
242    char temporary[MAX_PATH];
243
244    if(!projectInfo.ResourceFileName[0])
245        sprintf(projectInfo.ResourceFileName,"%s.rc",projectInfo.GetName().c_str());
246
247    //"ビットマップ ファイルを指定してください"
248    if(!GetFilePathDialog(hOwner,temporary,BitmapFileFilter,STRING_FILEOPENTITLE_BITMAP,TRUE)) return;
249
250    lstrcpy( temporary, projectInfo.GetWorkDir().GetRelationalPath( temporary ).c_str() );
251
252    projectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,projectInfo.res.pBitmapResInfo,(projectInfo.res.NumberOfBitmapRes+1)*sizeof(RESITEMINFO));
253
254    projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].path=
255        (char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
256    lstrcpy(projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].path,temporary);
257
258    for(i3=1;;i3++){
259        sprintf(temporary,"IDB_BITMAP%d",i3);
260        for(i2=0;i2<projectInfo.res.NumberOfBitmapRes;i2++){
261            if(lstrcmp(temporary,projectInfo.res.pBitmapResInfo[i2].IdName)==0) break;
262        }
263        if(i2==projectInfo.res.NumberOfBitmapRes) break;
264    }
265
266    projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].IdName=
267        (char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
268    lstrcpy(projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].IdName,temporary);
269
270    //ツリービューに追加
271    extern HWND hMaterialTreeView;
272    TV_INSERTSTRUCT tv;
273    tv.hInsertAfter=TVI_SORT;
274    tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
275    tv.item.iImage=5;
276    tv.item.iSelectedImage=5;
277    tv.hParent=projectInfo.res.hBitmapTreeItem;
278    tv.item.pszText=temporary;
279
280    projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].hTreeItem=
281        TreeView_InsertItem(hMaterialTreeView,&tv);
282
283    TreeView_SelectItem(hMaterialTreeView,projectInfo.res.pBitmapResInfo[projectInfo.res.NumberOfBitmapRes].hTreeItem);
284
285    projectInfo.res.NumberOfBitmapRes++;
286    projectInfo.ModifuOfResource=1;
287
288
289    ////////////////////////////////
290    // ウィンドウ プロパティを更新
291    extern MDIINFO MdiInfo[MAX_WNDNUM];
292    for(i2=0;i2<MAX_WNDNUM;i2++){
293        if(MdiInfo[i2].hwnd&&MdiInfo[i2].DocType==WNDTYPE_RAD){
294            if(MdiInfo[i2].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
295                ChangePropertyWindow(i2,GetWndInfoNum(MdiInfo[i2].path));
296        }
297    }
298}
299void Project_Bitmap_Delete(int BitmapInfoNum){
300    int i;
301
302    //ツリービューから削除
303    extern HWND hMaterialTreeView;
304    TreeView_DeleteItem(hMaterialTreeView,projectInfo.res.pBitmapResInfo[BitmapInfoNum].hTreeItem);
305
306    //projectInfo.pBitmapInfo構造体から削除
307    HeapDefaultFree(projectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName);
308    HeapDefaultFree(projectInfo.res.pBitmapResInfo[BitmapInfoNum].path);
309    projectInfo.res.NumberOfBitmapRes--;
310    for(i=BitmapInfoNum;i<projectInfo.res.NumberOfBitmapRes;i++)
311        projectInfo.res.pBitmapResInfo[i]=projectInfo.res.pBitmapResInfo[i+1];
312
313    projectInfo.ModifuOfResource=1;
314}
315void Project_Bitmap_RenameID(int BitmapInfoNum){
316    extern HANDLE hHeap;
317    extern char NewIdName[MAX_PATH];
318    extern HWND hMaterialTreeView;
319    int i2;
320    char temporary[MAX_PATH];
321    TVITEM tvItem;
322
323    if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_ResourceID_Input,(long)projectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName)) return;
324
325    //重複チェック
326    for(i2=0;i2<projectInfo.res.NumberOfBitmapRes;i2++){
327        if(i2==BitmapInfoNum) continue;
328        if(lstrcmp(NewIdName,projectInfo.res.pBitmapResInfo[i2].IdName)==0){
329            //"ID \"%s\" は既にプロジェクト内に存在します。"
330            sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
331            MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
332            return;
333        }
334    }
335
336    HeapDefaultFree(projectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName);
337    projectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
338    lstrcpy(projectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName,NewIdName);
339
340    tvItem.hItem=projectInfo.res.pBitmapResInfo[BitmapInfoNum].hTreeItem;
341    tvItem.mask=TVIF_TEXT;
342    tvItem.pszText=projectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName;
343    tvItem.cchTextMax=lstrlen(projectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName)+1;
344    TreeView_SetItem(hMaterialTreeView,&tvItem);
345
346    projectInfo.ModifuOfResource=1;
347
348    TreeView_SortChildren(hMaterialTreeView,
349        TreeView_GetParent(hMaterialTreeView,projectInfo.res.pBitmapResInfo[BitmapInfoNum].hTreeItem),
350        0);
351}
352void Project_IconResInsert(void){
353    extern HANDLE hHeap;
354    extern LPSTR IconFileFilter;
355    int i2,i3;
356    char temporary[MAX_PATH];
357
358    if(!projectInfo.ResourceFileName[0])
359        sprintf(projectInfo.ResourceFileName,"%s.rc",projectInfo.GetName().c_str());
360
361    //"アイコン ファイルを指定してください"
362    if(!GetFilePathDialog(hOwner,temporary,IconFileFilter,STRING_FILEOPENTITLE_ICON,TRUE)) return;
363
364    lstrcpy( temporary, projectInfo.GetWorkDir().GetRelationalPath( temporary ).c_str() );
365
366    projectInfo.res.pIconResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,projectInfo.res.pIconResInfo,(projectInfo.res.NumberOfIconRes+1)*sizeof(RESITEMINFO));
367
368    projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].path=
369        (char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
370    lstrcpy(projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].path,temporary);
371
372    for(i3=1;;i3++){
373        sprintf(temporary,"IDI_ICON%d",i3);
374        for(i2=0;i2<projectInfo.res.NumberOfIconRes;i2++){
375            if(lstrcmp(temporary,projectInfo.res.pIconResInfo[i2].IdName)==0) break;
376        }
377        if(i2==projectInfo.res.NumberOfIconRes) break;
378    }
379
380    projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].IdName=
381        (char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
382    lstrcpy(projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].IdName,temporary);
383
384    //ツリービューに追加
385    extern HWND hMaterialTreeView;
386    TV_INSERTSTRUCT tv;
387    tv.hInsertAfter=TVI_SORT;
388    tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
389    tv.item.iImage=4;
390    tv.item.iSelectedImage=4;
391    tv.hParent=projectInfo.res.hIconTreeItem;
392    if(projectInfo.res.NumberOfIconRes==0) lstrcat(temporary," (Main)");
393    tv.item.pszText=temporary;
394
395    projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].hTreeItem=
396        TreeView_InsertItem(hMaterialTreeView,&tv);
397
398    TreeView_SelectItem(hMaterialTreeView,projectInfo.res.pIconResInfo[projectInfo.res.NumberOfIconRes].hTreeItem);
399
400    projectInfo.res.NumberOfIconRes++;
401    projectInfo.ModifuOfResource=1;
402
403    ////////////////////////////////
404    // ウィンドウ プロパティを更新
405    extern MDIINFO MdiInfo[MAX_WNDNUM];
406    for(i2=0;i2<MAX_WNDNUM;i2++){
407        if(MdiInfo[i2].hwnd&&MdiInfo[i2].DocType==WNDTYPE_RAD){
408            if(MdiInfo[i2].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
409                ChangePropertyWindow(i2,GetWndInfoNum(MdiInfo[i2].path));
410        }
411    }
412}
413void Project_Icon_Delete(int IconInfoNum){
414    extern HANDLE hHeap;
415    int i2;
416    char temporary[MAX_PATH];
417    TVITEM tv;
418
419    //ツリービューから削除
420    extern HWND hMaterialTreeView;
421    TreeView_DeleteItem(hMaterialTreeView,projectInfo.res.pIconResInfo[IconInfoNum].hTreeItem);
422
423    //projectInfo.pIconInfo構造体から削除
424    HeapDefaultFree(projectInfo.res.pIconResInfo[IconInfoNum].IdName);
425    HeapDefaultFree(projectInfo.res.pIconResInfo[IconInfoNum].path);
426    projectInfo.res.NumberOfIconRes--;
427    for(i2=IconInfoNum;i2<projectInfo.res.NumberOfIconRes;i2++) projectInfo.res.pIconResInfo[i2]=projectInfo.res.pIconResInfo[i2+1];
428
429    if(IconInfoNum==0&&projectInfo.res.NumberOfIconRes){
430        tv.mask=TVIF_TEXT|TVIF_HANDLE;
431        tv.pszText=temporary;
432        tv.cchTextMax=MAX_PATH;
433        tv.hItem=projectInfo.res.pIconResInfo[0].hTreeItem;
434        TreeView_GetItem(hMaterialTreeView,&tv);
435        lstrcat(tv.pszText," (Main)");
436        TreeView_SetItem(hMaterialTreeView,&tv);
437    }
438
439    projectInfo.ModifuOfResource=1;
440
441    ////////////////////////////////
442    // ウィンドウ プロパティを更新
443    extern MDIINFO MdiInfo[MAX_WNDNUM];
444    for(i2=0;i2<MAX_WNDNUM;i2++){
445        if(MdiInfo[i2].hwnd&&MdiInfo[i2].DocType==WNDTYPE_RAD){
446            if(MdiInfo[i2].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
447                ChangePropertyWindow(i2,GetWndInfoNum(MdiInfo[i2].path));
448        }
449    }
450}
451void Project_Icon_RenameID(int IconInfoNum){
452    extern HANDLE hHeap;
453    extern char NewIdName[MAX_PATH];
454    extern HWND hMaterialTreeView;
455    int i2;
456    char temporary[MAX_PATH];
457    TVITEM tvItem;
458
459    if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_ResourceID_Input,(long)projectInfo.res.pIconResInfo[IconInfoNum].IdName)) return;
460
461    //重複チェック
462    for(i2=0;i2<projectInfo.res.NumberOfIconRes;i2++){
463        if(i2==IconInfoNum) continue;
464        if(lstrcmp(NewIdName,projectInfo.res.pIconResInfo[i2].IdName)==0){
465            //"ID \"%s\" は既にプロジェクト内に存在します。"
466            sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
467            MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
468            return;
469        }
470    }
471
472    HeapDefaultFree(projectInfo.res.pIconResInfo[IconInfoNum].IdName);
473    projectInfo.res.pIconResInfo[IconInfoNum].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
474    lstrcpy(projectInfo.res.pIconResInfo[IconInfoNum].IdName,NewIdName);
475
476    tvItem.hItem=projectInfo.res.pIconResInfo[IconInfoNum].hTreeItem;
477    tvItem.mask=TVIF_TEXT;
478    if(IconInfoNum==0){
479        sprintf(temporary,"%s (Main)",projectInfo.res.pIconResInfo[IconInfoNum].IdName);
480        tvItem.pszText=temporary;
481    }
482    else tvItem.pszText=projectInfo.res.pIconResInfo[IconInfoNum].IdName;
483    tvItem.cchTextMax=lstrlen(projectInfo.res.pIconResInfo[IconInfoNum].IdName)+1;
484    TreeView_SetItem(hMaterialTreeView,&tvItem);
485
486    projectInfo.ModifuOfResource=1;
487
488    TreeView_SortChildren(hMaterialTreeView,
489        TreeView_GetParent(hMaterialTreeView,projectInfo.res.pIconResInfo[IconInfoNum].hTreeItem),
490        0);
491}
492
493BOOL CALLBACK DlgProject_ResourceID_Input(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
494    extern char NewIdName[MAX_PATH];
495    switch(message){
496        case WM_INITDIALOG:
497            //"IDの変更"
498            SetWindowText(hwnd,STRING_RENAME_ID);
499
500            SetDlgItemText(hwnd,IDC_IDNAME,(char *)lParam);
501            SetPosCenter(hwnd);
502            break;
503        case WM_COMMAND:
504            switch(LOWORD(wParam)){
505                case IDOK:
506                    GetDlgItemText(hwnd,IDC_IDNAME,NewIdName,MAX_PATH);
507                    if(!NewIdName[0]){
508                        //"ID名を入力して下さい。"
509                        MessageBox(hwnd,STRING_ERROR_MUST_IDNAME,APPLICATION_NAME,MB_OK);
510                        return 1;
511                    }
512                    EndDialog(hwnd,1);
513                    return 1;
514                case IDCANCEL:
515                    EndDialog(hwnd,0);
516                    return 1;
517            }
518            break;
519    }
520    return 0;
521}
Note: See TracBrowser for help on using the repository browser.