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

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

MDIINFO構造体をリファクタリング。

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