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

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

"extern PROJECTINFO ProjectInfo;" をすべて除去した。
PROJECTINFO構造体の定義位置を移動した。

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