source: dev/trunk/ab5.0/abdev/ProjectEditor/MenuProc.cpp@ 475

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

構成管理を変更中・・・(いったんコミット)

File size: 32.1 KB
Line 
1#include "stdafx.h"
2
3#include "Common.h"
4
5#if defined(JPN)
6//日本語
7#include "rad_msg_jpn.h"
8#else
9//英語
10#include "rad_msg_eng.h"
11#endif
12
13int GetMenuInfoNum(char *name){
14 extern PROJECTINFO ProjectInfo;
15 int i;
16 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
17 if(lstrcmpi(name,ProjectInfo.pMenuInfo[i].IdName)==0) return i;
18 }
19 return -1;
20}
21void HeapMenuDataFree(MENU_INFO *pMenuInfo,int ItemNum,int *NumberOfFreedItem){
22 extern HANDLE hHeap;
23 int i;
24 for(i=0;i<ItemNum;i++){
25 if(NumberOfFreedItem) (*NumberOfFreedItem)++;
26 if(pMenuInfo[i].caption) HeapDefaultFree(pMenuInfo[i].caption);
27 if(pMenuInfo[i].IdName) HeapDefaultFree(pMenuInfo[i].IdName);
28 if(pMenuInfo[i].pMenuInfo){
29 HeapMenuDataFree(pMenuInfo[i].pMenuInfo,pMenuInfo[i].NumberOfMenu,NumberOfFreedItem);
30 HeapDefaultFree(pMenuInfo[i].pMenuInfo);
31 }
32 }
33}
34
35BOOL CALLBACK DlgProject_MenuID_Input(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
36 extern char NewIdName[MAX_PATH];
37 switch(message){
38 case WM_INITDIALOG:
39 if(lParam==0){
40 //"新規メニュー"
41 SetWindowText(hwnd,STRING_MENUEDIT_MAKE_NEWMENU);
42 }
43 else{
44 //"メニューIDの変更"
45 SetWindowText(hwnd,STRING_MENUEDIT_RENAME_MENUID);
46 SetDlgItemText(hwnd,IDC_IDNAME,(char *)lParam);
47 }
48 SetPosCenter(hwnd);
49 break;
50 case WM_COMMAND:
51 switch(LOWORD(wParam)){
52 case IDOK:
53 GetDlgItemText(hwnd,IDC_IDNAME,NewIdName,MAX_PATH);
54 if(!NewIdName[0]){
55 //"ID名を入力して下さい。"
56 MessageBox(hwnd,STRING_ERROR_MUST_IDNAME,STRING_ERROR,MB_OK);
57 return 1;
58 }
59 EndDialog(hwnd,1);
60 return 1;
61 case IDCANCEL:
62 EndDialog(hwnd,0);
63 return 1;
64 }
65 break;
66 }
67 return 0;
68}
69void Project_Menu_Insert(void){
70 extern HANDLE hHeap;
71 extern PROJECTINFO ProjectInfo;
72 extern MDIINFO MdiInfo[MAX_WNDNUM];
73 extern char NewIdName[MAX_PATH];
74 int i;
75 char temporary[MAX_PATH];
76 MENU_INFO *MenuInfo;
77
78 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_MenuID_Input,0)) return;
79
80 //重複チェック
81 for(i=0;i<ProjectInfo.NumberOfMenu;i++){
82 if(lstrcmpi(NewIdName,ProjectInfo.pMenuInfo[i].IdName)==0){
83 //"\"%s\" メニューは既にプロジェクト内に存在します。"
84 sprintf(temporary,STRING_MENUEDIT_DUPLICATIONERROR,ProjectInfo.pMenuInfo[i].IdName);
85 MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
86 return;
87 }
88 }
89
90 ProjectInfo.pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pMenuInfo,(ProjectInfo.NumberOfMenu+1)*sizeof(MENU_INFO));
91 MenuInfo=&ProjectInfo.pMenuInfo[ProjectInfo.NumberOfMenu];
92
93 MenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
94 lstrcpy(MenuInfo->IdName,NewIdName);
95
96 MenuInfo->caption=0;
97
98 MenuInfo->NumberOfMenu=0;
99 MenuInfo->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
100
101
102 //////////////////////
103 //ツリービューに追加
104
105 extern HWND hMaterialTreeView;
106 TV_INSERTSTRUCT tv;
107 tv.hInsertAfter=TVI_SORT;
108 tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
109 tv.item.iImage=3;
110 tv.item.iSelectedImage=3;
111 tv.hParent=ProjectInfo.hMenuTreeItem;
112 tv.item.pszText=MenuInfo->IdName;
113
114 MenuInfo->hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
115
116 TreeView_SelectItem(hMaterialTreeView,MenuInfo->hTreeItem);
117
118
119 ProjectInfo.NumberOfMenu++;
120 ProjectInfo.ModifyOfMaterial=1;
121
122
123 ////////////////////////////////
124 // ウィンドウ プロパティを更新
125 for(i=0;i<MAX_WNDNUM;i++){
126 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
127 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
128 ChangePropertyWindow(i,GetWndInfoNum(MdiInfo[i].path));
129 }
130 }
131
132 NewMenuWindow(&ProjectInfo.pMenuInfo[ProjectInfo.NumberOfMenu-1]);
133}
134void Project_Menu_Delete(int MenuInfoNum){
135 extern HANDLE hHeap;
136 extern MDIINFO MdiInfo[MAX_WNDNUM];
137 extern PROJECTINFO ProjectInfo;
138 int i;
139
140 //ウィンドウが開かれている場合は閉じる
141 for(i=0;i<MAX_WNDNUM;i++){
142 if(MdiInfo[i].hwnd&&lstrcmpi(ProjectInfo.pMenuInfo[MenuInfoNum].IdName,MdiInfo[i].path)==0){
143 SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
144 break;
145 }
146 }
147
148 //メニュー情報のメモリを解放
149 HeapMenuDataFree(ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo,ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu,0);
150 HeapDefaultFree(ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo);
151 HeapDefaultFree(ProjectInfo.pMenuInfo[MenuInfoNum].IdName);
152
153 //ツリービューから削除
154 extern HWND hMaterialTreeView;
155 TreeView_DeleteItem(hMaterialTreeView,ProjectInfo.pMenuInfo[MenuInfoNum].hTreeItem);
156
157 //ProjectInfo.pMenuInfo構造体から削除
158 ProjectInfo.NumberOfMenu--;
159 for(i=MenuInfoNum;i<ProjectInfo.NumberOfMenu;i++) ProjectInfo.pMenuInfo[i]=ProjectInfo.pMenuInfo[i+1];
160 if(ProjectInfo.NumberOfMenu==0){
161 HeapDefaultFree(ProjectInfo.pMenuInfo);
162 ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
163 }
164 else ProjectInfo.pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu*sizeof(MENU_INFO));
165
166 ProjectInfo.ModifyOfMaterial=1;
167
168
169 ////////////////////////////////
170 // ウィンドウ プロパティを更新
171 for(i=0;i<MAX_WNDNUM;i++){
172 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
173 if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
174 ChangePropertyWindow(i,GetWndInfoNum(MdiInfo[i].path));
175 }
176 }
177}
178
179void SetMenuDataList(HWND hList,MENU_INFO *pMenuInfo,int GradeNum){
180 int i;
181 char temporary[MAX_PATH];
182 for(i=0;i<pMenuInfo->NumberOfMenu;i++){
183 memset(temporary,' ',GradeNum*4);
184 temporary[GradeNum*4]=0;
185 if(pMenuInfo->pMenuInfo[i].type==MFT_SEPARATOR)
186 lstrcpy(temporary+GradeNum*4,"-");
187 else
188 lstrcpy(temporary+GradeNum*4,pMenuInfo->pMenuInfo[i].caption);
189 SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
190 if(pMenuInfo->pMenuInfo[i].pMenuInfo)
191 SetMenuDataList(hList,&pMenuInfo->pMenuInfo[i],GradeNum+1);
192 }
193}
194void NewMenuWindow(MENU_INFO *pMenuInfo){
195 extern HINSTANCE hInst;
196 extern HWND hDocCombo;
197 extern MDIINFO MdiInfo[MAX_WNDNUM];
198 int i;
199 HWND hChild,hListWnd,hMenuEdit;
200 RECT rect;
201 MDICREATESTRUCT mdic;
202
203 //すでに指定されたファイルが開かれている場合
204 hChild=GetWindow(hClient,GW_CHILD);
205 while(hChild){
206 i=GetWndNum(hChild);
207 if(MdiInfo[i].DocType==WNDTYPE_MENU){
208 if(lstrcmpi(MdiInfo[i].path,pMenuInfo->IdName)==0) break;
209 }
210 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
211 }
212 if(hChild){
213 BringWindowToTop(hChild);
214 return;
215 }
216
217 mdic.szTitle=pMenuInfo->IdName;
218 mdic.szClass="MDIClientWindow_Menu";
219 mdic.hOwner=hInst;
220 mdic.x=CW_USEDEFAULT;
221 mdic.y=CW_USEDEFAULT;
222 mdic.cx=CW_USEDEFAULT;
223 mdic.cy=CW_USEDEFAULT;
224
225 hChild=GetWindow(hClient,GW_CHILD);
226 if(IsWindow(hChild)){
227 if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
228 else mdic.style=0;
229 }
230 else{
231 if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
232 else mdic.style=0;
233 }
234
235 mdic.lParam=0;
236 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic); //ウィンドウ作成
237
238
239 ////////////////////
240 //子ウィンドウ作成
241
242 //ダイアログの下地を作成
243 hMenuEdit=CreateWindowEx(WS_EX_CLIENTEDGE,"MenuEditWindow",NULL,
244 WS_CHILD|WS_VSCROLL|WS_VISIBLE,
245 0,0,0,0,
246 hChild,NULL,hInst,NULL);
247
248 //メニュー リスト ウィンドウを作成
249 hListWnd=CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX",NULL,
250 WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE|LBS_NOTIFY|LBS_NOINTEGRALHEIGHT,
251 0,0,0,0,
252 hChild,NULL,hInst,NULL);
253
254 //ウィンドウのID登録
255 for(i=0;i<MAX_WNDNUM;i++){
256 if(MdiInfo[i].hwnd==0){
257 MdiInfo[i].hwnd=hChild;
258 MdiInfo[i].DocType=WNDTYPE_MENU;
259 MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pMenuInfo->IdName)+1);
260 lstrcpy(MdiInfo[i].title,pMenuInfo->IdName);
261 MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pMenuInfo->IdName)+1);
262 lstrcpy(MdiInfo[i].path,pMenuInfo->IdName);
263
264
265 /////////////////////
266 //MENU ウィンドウ情報
267
268 MdiInfo[i].MdiMenuInfo=(MDIMENUINFO *)GlobalAlloc(GPTR,sizeof(MDIMENUINFO));
269
270 MdiInfo[i].MdiMenuInfo->hList=hListWnd;
271
272 MdiInfo[i].MdiMenuInfo->hMenuEdit=hMenuEdit;
273 MdiInfo[i].MdiMenuInfo->hEdit_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_PROJECT_MENUEDIT),hMenuEdit,(DLGPROC)MenuEditDlg);
274
275 SCROLLINFO ScrollInfo;
276 ScrollInfo.cbSize=sizeof(SCROLLINFO);
277 ScrollInfo.fMask=SIF_POS;
278 ScrollInfo.nPos=0;
279 SetScrollInfo(MdiInfo[i].MdiMenuInfo->hMenuEdit,SB_VERT,&ScrollInfo,1);
280
281 SendMessage(hListWnd,LB_RESETCONTENT,0,0);
282 SetMenuDataList(hListWnd,pMenuInfo,0);
283 if(pMenuInfo->NumberOfMenu){
284 SendMessage(hListWnd,LB_SETCURSEL,0,0);
285 SendMessage(hChild,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)hListWnd);
286 }
287 break;
288 }
289 }
290
291 //ウィンドウ位置を初期化
292 GetClientRect(hChild,&rect);
293 MoveWindow(MdiInfo[i].MdiMenuInfo->hMenuEdit,0,0,172,rect.bottom,1);
294 MoveWindow(MdiInfo[i].MdiMenuInfo->hList,172,0,rect.right-172,rect.bottom,1);
295
296 //Docコンボボックスに追加
297 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)pMenuInfo->IdName);
298 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
299
300 //タブに追加
301 pobj_MainTab->InsertItem( pMenuInfo->IdName, true );
302
303 SetFocus(hListWnd);
304
305 //メニュー状態を設定
306 ResetState_DocMenu();
307}
308
309int GetNumberOfMenu(MENU_INFO *pMenuInfo){
310 int i,i2;
311 for(i=0,i2=0;i<pMenuInfo->NumberOfMenu;i++,i2++){
312 if(pMenuInfo->pMenuInfo[i].pMenuInfo) i2+=GetNumberOfMenu(&pMenuInfo->pMenuInfo[i]);
313 }
314 return i2;
315}
316MENU_INFO *GetMenuInfoFromList(MENU_INFO *pMenuInfo,int *pPos,int index,int *GradeNum){
317 int i;
318 MENU_INFO *pRetMenuInfo;
319 for(i=0;i<pMenuInfo->NumberOfMenu;i++){
320 if((*pPos)==index){
321 *pPos=i;
322 return pMenuInfo;
323 }
324 (*pPos)++;
325 if(pMenuInfo->pMenuInfo[i].pMenuInfo){
326 (*GradeNum)++;
327 pRetMenuInfo=GetMenuInfoFromList(&pMenuInfo->pMenuInfo[i],pPos,index,GradeNum);
328 if(pRetMenuInfo) return pRetMenuInfo;
329 (*GradeNum)--;
330 }
331 }
332 return 0;
333}
334BOOL CALLBACK DlgMenuProperty_Rename(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
335 extern HANDLE hHeap;
336 extern HWND hClient,hOwner;
337 extern MDIINFO MdiInfo[MAX_WNDNUM];
338 int i;
339 char temporary[MAX_PATH];
340 static MENU_INFO *pMenuInfo;
341
342 switch(message){
343 case WM_INITDIALOG:
344 SetPosCenter(hwnd);
345 i=GetWndNum(GetWindow(hClient,GW_CHILD));
346 GetDlgItemText(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,temporary,MAX_PATH);
347 SetDlgItemText(hwnd,IDC_IDNAME,temporary);
348 GetDlgItemText(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,temporary,MAX_PATH);
349 SetDlgItemText(hwnd,IDC_CAPTION,temporary);
350
351 pMenuInfo=(MENU_INFO *)lParam;
352 if(pMenuInfo->pMenuInfo){
353 EnableWindow(GetDlgItem(hwnd,IDC_IDSTATIC),0);
354 EnableWindow(GetDlgItem(hwnd,IDC_IDNAME),0);
355 }
356 break;
357 case WM_COMMAND:
358 switch(LOWORD(wParam)){
359 case IDOK:
360 i=GetWndNum(GetWindow(hClient,GW_CHILD));
361
362 if(!pMenuInfo->pMenuInfo){
363 //ID
364 GetDlgItemText(hwnd,IDC_IDNAME,temporary,MAX_PATH);
365 if(!temporary[0]){
366 //"ID名を入力して下さい。"
367 MessageBox(hOwner,STRING_ERROR_MUST_IDNAME,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
368 break;
369 }
370 HeapDefaultFree(pMenuInfo->IdName);
371 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
372 lstrcpy(pMenuInfo->IdName,temporary);
373 }
374
375 //キャプション
376 GetDlgItemText(hwnd,IDC_CAPTION,temporary,MAX_PATH);
377 if(!temporary[0]){
378 //"キャプションを入力して下さい。"
379 MessageBox(hOwner,STRING_ERROR_MUST_CAPTION,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
380 break;
381 }
382 HeapDefaultFree(pMenuInfo->caption);
383 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
384 lstrcpy(pMenuInfo->caption,temporary);
385
386 EndDialog(hwnd,1);
387 return 1;
388 case IDCANCEL:
389 EndDialog(hwnd,0);
390 return 1;
391 }
392 break;
393 }
394 return 0;
395}
396BOOL CALLBACK MenuEditDlg(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
397 extern HANDLE hHeap;
398 extern PROJECTINFO ProjectInfo;
399 int i,i2,i3,i4,WndNum,MenuInfoNum;
400 char temporary[MAX_PATH];
401 MENU_INFO *pMenuInfo,tempMenuInfo;
402
403 switch(message){
404 case WM_COMMAND:
405 switch(LOWORD(wParam)){
406 case IDC_RENAME:
407 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
408 if(WndNum==-1) return 1;
409 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
410
411 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
412 if(i4==LB_ERR) return 1;
413 i2=0;
414 i3=0;
415 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
416 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
417
418 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_PROJECT_MENURENAME),hOwner,(DLGPROC)DlgMenuProperty_Rename,(long)pMenuInfo)) return 1;
419 GetDlgItemText(hwnd,IDC_IDNAME,temporary,MAX_PATH);
420
421 if(!pMenuInfo->pMenuInfo){
422 //ID
423 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,pMenuInfo->IdName);
424 }
425
426 //キャプション
427 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
428
429 //リストへキャプションを反映
430 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
431 memset(temporary,' ',i3*4);
432 lstrcpy(temporary+i3*4,pMenuInfo->caption);
433 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
434
435 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
436 ProjectInfo.ModifyOfMaterial=1;
437 return 1;
438 case IDC_POPUP:
439 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
440 if(WndNum==-1) return 1;
441 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
442
443 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
444 if(i4==LB_ERR) return 1;
445 i2=0;
446 i3=0;
447 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
448 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
449
450 if(pMenuInfo->pMenuInfo){
451 if(pMenuInfo->NumberOfMenu){
452 //"この操作を行うとポップアップされるメニュー アイテムも削除されます。"
453 if(MessageBox(hOwner,STRING_MENUEDIT_DELETECHECK,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)==IDCANCEL) return 1;
454 }
455 i=0;
456 HeapMenuDataFree(pMenuInfo->pMenuInfo,pMenuInfo->NumberOfMenu,&i);
457
458 for(i2=0;i2<i;i2++)
459 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4+1,0);
460
461 HeapDefaultFree(pMenuInfo->pMenuInfo);
462 pMenuInfo->pMenuInfo=0;
463 lstrcpy(temporary,"IDM_name");
464 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
465 lstrcpy(pMenuInfo->IdName,temporary);
466 }
467 else{
468 if(pMenuInfo->type==MFT_STRING){
469 HeapDefaultFree(pMenuInfo->IdName);
470 pMenuInfo->IdName=0;
471 }
472 else if(pMenuInfo->type==MFT_SEPARATOR){
473 lstrcpy(temporary,"caption text");
474 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
475 lstrcpy(pMenuInfo->caption,temporary);
476 }
477 pMenuInfo->NumberOfMenu=0;
478 pMenuInfo->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
479 pMenuInfo->type=MFT_STRING;
480 }
481 SendMessage(MdiInfo[WndNum].hwnd,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
482 ProjectInfo.ModifyOfMaterial=1;
483 return 1;
484 case IDC_SEPARATOR:
485 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
486 if(WndNum==-1) return 1;
487 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
488
489 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
490 if(i4==LB_ERR) return 1;
491 i2=0;
492 i3=0;
493 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
494 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
495
496 if(SendDlgItemMessage(hwnd,IDC_SEPARATOR,BM_GETCHECK,0,0)){
497 HeapDefaultFree(pMenuInfo->caption);
498 pMenuInfo->caption=0;
499 HeapDefaultFree(pMenuInfo->IdName);
500 pMenuInfo->IdName=0;
501 pMenuInfo->type=MFT_SEPARATOR;
502
503 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
504 memset(temporary,' ',i3*4);
505 lstrcpy(temporary+i3*4,"-");
506 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
507 }
508 else{
509 lstrcpy(temporary,"caption text");
510 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
511 lstrcpy(pMenuInfo->caption,temporary);
512 lstrcpy(temporary,"IDM_name");
513 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
514 lstrcpy(pMenuInfo->IdName,temporary);
515 pMenuInfo->type=MFT_STRING;
516
517 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
518 memset(temporary,' ',i3*4);
519 lstrcpy(temporary+i3*4,pMenuInfo->caption);
520 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
521 }
522 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
523 SendMessage(MdiInfo[WndNum].hwnd,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
524 return 1;
525 case IDC_CHECKED:
526 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
527 if(WndNum==-1) return 1;
528 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
529
530 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
531 if(i4==LB_ERR) return 1;
532 i2=0;
533 i3=0;
534 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
535 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
536
537 if(SendDlgItemMessage(hwnd,IDC_CHECKED,BM_GETCHECK,0,0))
538 pMenuInfo->state|=MFS_CHECKED;
539 else
540 pMenuInfo->state&=~MFS_CHECKED;
541
542 ProjectInfo.ModifyOfMaterial=1;
543 return 1;
544 case IDC_DISABLED:
545 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
546 if(WndNum==-1) return 1;
547 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
548
549 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
550 if(i4==LB_ERR) return 1;
551 i2=0;
552 i3=0;
553 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
554 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
555
556 if(SendDlgItemMessage(hwnd,IDC_DISABLED,BM_GETCHECK,0,0))
557 pMenuInfo->state|=MFS_DISABLED;
558 else
559 pMenuInfo->state&=~MFS_DISABLED;
560
561 ProjectInfo.ModifyOfMaterial=1;
562 return 1;
563 case IDC_INSERTMENUITEM:
564 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
565 if(WndNum==-1) return 1;
566 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
567
568 if(ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu==0){
569 ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo,(ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu+1)*sizeof(MENU_INFO));
570 pMenuInfo=&ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo[ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu];
571
572 sprintf(temporary,"caption text");
573 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
574 lstrcpy(pMenuInfo->caption,temporary);
575
576 sprintf(temporary,"IDM_name");
577 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
578 lstrcpy(pMenuInfo->IdName,temporary);
579
580 pMenuInfo->state=0;
581 pMenuInfo->type=MFT_STRING;
582 pMenuInfo->pMenuInfo=0;
583
584 ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu++;
585
586 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,0,(long)pMenuInfo->caption);
587 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,0,0);
588 SendMessage(GetParent(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit),WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
589 }
590 else{
591 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
592 if(i4==LB_ERR){
593 //"新しいメニュー アイテムの挿入位置を選択して下さい"
594 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_NEW_ITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
595 return 1;
596 }
597 i2=0;
598 i3=0;
599 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
600 if(pMenuInfo->pMenuInfo[i2].pMenuInfo){
601 //"ポップアップ アイテムを作成する場合は \"はい\" を、ポップアップと同じ階層にメニュー アイテムを作成する場合は \"いいえ\" を押して下さい。"
602 i=MessageBox(hOwner,STRING_MENUEDIT_INSERTTYPE_YESNO,APPLICATION_NAME,MB_YESNOCANCEL);
603 if(i==IDYES){
604 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
605 i2=0;
606 i3++;
607 }
608 else if(i==IDNO){
609 i4+=GetNumberOfMenu(&pMenuInfo->pMenuInfo[i2]);
610 i2++;
611 }
612 else return 1;
613 }
614 else i2++;
615 i4++;
616 pMenuInfo->pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,pMenuInfo->pMenuInfo,(pMenuInfo->NumberOfMenu+1)*sizeof(MENU_INFO));
617 for(i=pMenuInfo->NumberOfMenu;i>i2;i--){
618 pMenuInfo->pMenuInfo[i]=pMenuInfo->pMenuInfo[i-1];
619 }
620 memset(&pMenuInfo->pMenuInfo[i2],0,sizeof(MENU_INFO));
621
622 sprintf(temporary,"caption text");
623 pMenuInfo->pMenuInfo[i2].caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
624 lstrcpy(pMenuInfo->pMenuInfo[i2].caption,temporary);
625
626 sprintf(temporary,"IDM_name");
627 pMenuInfo->pMenuInfo[i2].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
628 lstrcpy(pMenuInfo->pMenuInfo[i2].IdName,temporary);
629
630 memset(temporary,' ',i3*4);
631 lstrcpy(temporary+i3*4,pMenuInfo->pMenuInfo[i2].caption);
632
633 pMenuInfo->NumberOfMenu++;
634
635 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
636 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
637 SendMessage(GetParent(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit),WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
638 }
639 ProjectInfo.ModifyOfMaterial=1;
640 return 1;
641 case IDC_DELETEMENUITEM:
642 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
643 if(WndNum==-1) return 1;
644 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
645
646 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
647 if(i4==LB_ERR){
648 //"削除するメニュー アイテムを選択して下さい"
649 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_DELETE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
650 return 1;
651 }
652 i2=0;
653 i3=0;
654 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
655
656 i3=1;
657 if(pMenuInfo->pMenuInfo[i2].pMenuInfo){
658 if(pMenuInfo->pMenuInfo[i2].NumberOfMenu){
659 //"この操作を行うとポップアップされるメニュー アイテムも削除されます。"
660 if(MessageBox(hOwner,STRING_MENUEDIT_DELETECHECK,APPLICATION_NAME,MB_OKCANCEL)==IDCANCEL) return 1;
661 }
662 HeapMenuDataFree(pMenuInfo->pMenuInfo[i2].pMenuInfo,pMenuInfo->pMenuInfo[i2].NumberOfMenu,&i3);
663 HeapDefaultFree(pMenuInfo->pMenuInfo[i2].pMenuInfo);
664 }
665 else HeapDefaultFree(pMenuInfo->pMenuInfo[i2].IdName);
666
667 if(pMenuInfo->pMenuInfo[i2].type!=MFT_SEPARATOR)
668 HeapDefaultFree(pMenuInfo->pMenuInfo[i2].caption);
669
670 for(i=i2;i<pMenuInfo->NumberOfMenu-1;i++)
671 pMenuInfo->pMenuInfo[i]=pMenuInfo->pMenuInfo[i+1];
672
673 pMenuInfo->NumberOfMenu--;
674 pMenuInfo->pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,pMenuInfo->pMenuInfo,pMenuInfo->NumberOfMenu*sizeof(MENU_INFO));
675
676 for(i=0;i<i3;i++)
677 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
678
679 i=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCOUNT,0,0)-1;
680 if(i){
681 if(i<i4) i4=i;
682 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
683 }
684
685 ProjectInfo.ModifyOfMaterial=1;
686 return 1;
687 case IDC_UP:
688 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
689 if(WndNum==-1) return 1;
690 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
691
692 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
693 if(i4==LB_ERR){
694 //"移動するメニュー アイテムを選択して下さい"
695 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
696 return 1;
697 }
698 i2=0;
699 i3=0;
700 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
701 if(i2==0) return 1;
702 i2--;
703
704 memcpy(&tempMenuInfo,&pMenuInfo->pMenuInfo[i2],sizeof(MENU_INFO));
705 memcpy(&pMenuInfo->pMenuInfo[i2],&pMenuInfo->pMenuInfo[i2+1],sizeof(MENU_INFO));
706 memcpy(&pMenuInfo->pMenuInfo[i2+1],&tempMenuInfo,sizeof(MENU_INFO));
707
708 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_RESETCONTENT,0,0);
709 SetMenuDataList(MdiInfo[WndNum].MdiMenuInfo->hList,&ProjectInfo.pMenuInfo[MenuInfoNum],0);
710 if(!pMenuInfo->pMenuInfo[i2].pMenuInfo)
711 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4-1,0);
712
713 ProjectInfo.ModifyOfMaterial=1;
714 return 1;
715 case IDC_DOWN:
716 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
717 if(WndNum==-1) return 1;
718 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
719
720 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
721 if(i4==LB_ERR){
722 //"移動するメニュー アイテムを選択して下さい"
723 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
724 return 1;
725 }
726 i2=0;
727 i3=0;
728 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
729 if(pMenuInfo->NumberOfMenu<=i2+1) return 1;
730
731 memcpy(&tempMenuInfo,&pMenuInfo->pMenuInfo[i2],sizeof(MENU_INFO));
732 memcpy(&pMenuInfo->pMenuInfo[i2],&pMenuInfo->pMenuInfo[i2+1],sizeof(MENU_INFO));
733 memcpy(&pMenuInfo->pMenuInfo[i2+1],&tempMenuInfo,sizeof(MENU_INFO));
734
735 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_RESETCONTENT,0,0);
736 SetMenuDataList(MdiInfo[WndNum].MdiMenuInfo->hList,&ProjectInfo.pMenuInfo[MenuInfoNum],0);
737 if(!pMenuInfo->pMenuInfo[i2].pMenuInfo)
738 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4+1,0);
739
740 ProjectInfo.ModifyOfMaterial=1;
741 return 1;
742 }
743 break;
744 }
745 return 0;
746}
747
748LRESULT CALLBACK MenuEditWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
749 extern HINSTANCE hInst;
750 extern MDIINFO MdiInfo[MAX_WNDNUM];
751 extern PROJECTINFO ProjectInfo;
752 int i;
753 RECT rect;
754 SCROLLINFO ScrollInfo;
755
756 switch(message){
757 case WM_MOUSEACTIVATE:
758 BringWindowToTop(GetParent(hwnd));
759 return 0;
760 case WM_VSCROLL:
761 ScrollInfo.cbSize=sizeof(SCROLLINFO);
762 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
763 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
764 if(LOWORD(wParam)==SB_LINEUP) i=-20;
765 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
766 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
767 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
768 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
769 else i=0;
770 GetClientRect(hwnd,&rect);
771 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
772 if(i!=0){
773 ScrollInfo.nPos+=i;
774 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
775 ScrollWindow(hwnd,0,-i,NULL,NULL);
776 UpdateWindow(hwnd);
777 }
778 return 0;
779 case WM_SIZE:
780 i=GetWndNum(GetParent(hwnd));
781 if(i==-1) return 0; //ウィンドウが初期状態の場合
782 ScrollInfo.cbSize=sizeof(SCROLLINFO);
783 ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
784 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
785 GetClientRect(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,&rect);
786 ScrollInfo.nMin=0;
787 ScrollInfo.nMax=rect.bottom;
788 ScrollInfo.nPage=HIWORD(lParam);
789 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
790
791 i=ScrollInfo.nPos;
792 ScrollInfo.fMask=SIF_POS;
793 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
794 if(i>ScrollInfo.nPos){
795 ScrollWindow(hwnd,0,i-ScrollInfo.nPos,NULL,NULL);
796 UpdateWindow(hwnd);
797 }
798 return 0;
799 }
800 return DefWindowProc(hwnd,message,wParam,lParam);
801}
802LRESULT CALLBACK MDIClientWindow_Menu(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
803 extern HWND hDocCombo;
804 extern MDIINFO MdiInfo[MAX_WNDNUM];
805 extern PROJECTINFO ProjectInfo;
806 int i,i2,i3,WndNum,MenuInfoNum;
807 MENU_INFO *pMenuInfo;
808
809 switch(message){
810 case WM_COMMAND:
811 WndNum=GetWndNum(hwnd);
812 if(WndNum==-1) return 0;
813 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
814 if((HWND)lParam==MdiInfo[WndNum].MdiMenuInfo->hList&&HIWORD(wParam)==LBN_SELCHANGE){
815 i=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
816 i2=0;
817 i3=0;
818 pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i,&i3);
819 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
820
821 if(pMenuInfo->pMenuInfo){
822 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
823 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
824 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
825 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
826 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
827 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),0);
828 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
829 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
830 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
831 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
832 }
833 else if(pMenuInfo->type==MFT_STRING){
834 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
835 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,pMenuInfo->IdName);
836 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),1);
837 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),1);
838 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
839 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
840 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
841 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
842 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
843 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
844 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
845 }
846 else if(pMenuInfo->type==MFT_SEPARATOR){
847 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,"");
848 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
849 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
850 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),0);
851 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),0);
852 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),0);
853 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
854 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),0);
855 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),0);
856 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
857 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_CHECKED,0);
858 }
859
860 if(pMenuInfo->state&MFS_CHECKED) i2=BST_CHECKED;
861 else i2=BST_UNCHECKED;
862 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED,BM_SETCHECK,i2,0);
863 if(pMenuInfo->state&MFS_DISABLED) i2=BST_CHECKED;
864 else i2=BST_UNCHECKED;
865 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED,BM_SETCHECK,i2,0);
866 }
867 return 0;
868 case WM_MDIACTIVATE:
869 if(!lParam) return 0;
870 i=GetWndNum((HWND)lParam);
871 if(i==-1) return 0; //ウィンドウが初期状態の場合
872
873 i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
874 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
875 SetStatusText(NULL);
876 ResetState_EditMenu();
877 return 0;
878 case WM_SIZE:
879 WndNum=GetWndNum(hwnd);
880 if(WndNum==-1) break;
881 MoveWindow(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit,0,0,172,HIWORD(lParam),1);
882 MoveWindow(MdiInfo[WndNum].MdiMenuInfo->hList,172,0,LOWORD(lParam)-172,HIWORD(lParam),1);
883 break;
884 case WM_CLOSE:
885 CloseDocWindow(GetWndNum(hwnd));
886 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
887 i=DefMDIChildProc(hwnd,message,wParam,lParam);
888
889 //メニュー状態を設定
890 ResetState_DocMenu();
891
892 return i;
893 }
894 return DefMDIChildProc(hwnd,message,wParam,lParam);
895}
Note: See TracBrowser for help on using the repository browser.