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

Last change on this file since 829 was 829, checked in by イグトランス (egtra), 12 years ago

svn:eol-styleとsvn:mime-type(文字コード指定含む)の設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain; charset=Shift_JIS
File size: 30.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(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 (!ActiveBasic::Resource::DialogBoxAlt(hResInst, IDD_INPUTID, hOwner, DlgProject_MenuID_Input))
76 {
77 return;
78 }
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<MdiInfo.size();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 int i;
137
138 //ウィンドウが開かれている場合は閉じる
139 for(i=0;i<MdiInfo.size();i++){
140 if(MdiInfo[i]->hwnd&&lstrcmpi(projectInfo.pMenuInfo[MenuInfoNum].IdName,MdiInfo[i]->path.c_str())==0){
141 SendMessage(MdiInfo[i]->hwnd,WM_CLOSE,0,0);
142 break;
143 }
144 }
145
146 //メニュー情報のメモリを解放
147 HeapMenuDataFree(projectInfo.pMenuInfo[MenuInfoNum].pMenuInfo,projectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu,0);
148 HeapDefaultFree(projectInfo.pMenuInfo[MenuInfoNum].pMenuInfo);
149 HeapDefaultFree(projectInfo.pMenuInfo[MenuInfoNum].IdName);
150
151 //ツリービューから削除
152 extern HWND hMaterialTreeView;
153 TreeView_DeleteItem(hMaterialTreeView,projectInfo.pMenuInfo[MenuInfoNum].hTreeItem);
154
155 //projectInfo.pMenuInfo構造体から削除
156 projectInfo.NumberOfMenu--;
157 for(i=MenuInfoNum;i<projectInfo.NumberOfMenu;i++) projectInfo.pMenuInfo[i]=projectInfo.pMenuInfo[i+1];
158 if(projectInfo.NumberOfMenu==0){
159 HeapDefaultFree(projectInfo.pMenuInfo);
160 projectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
161 }
162 else projectInfo.pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,projectInfo.pMenuInfo,projectInfo.NumberOfMenu*sizeof(MENU_INFO));
163
164 projectInfo.ModifyOfMaterial=1;
165
166
167 ////////////////////////////////
168 // ウィンドウ プロパティを更新
169 for(i=0;i<MdiInfo.size();i++){
170 if(MdiInfo[i]->hwnd&&MdiInfo[i]->DocType==WNDTYPE_RAD){
171 if(MdiInfo[i]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
172 ChangePropertyWindow(i,GetWndInfoNum(MdiInfo[i]->path.c_str()));
173 }
174 }
175}
176
177void SetMenuDataList(HWND hList,MENU_INFO *pMenuInfo,int GradeNum){
178 int i;
179 char temporary[MAX_PATH];
180 for(i=0;i<pMenuInfo->NumberOfMenu;i++){
181 memset(temporary,' ',GradeNum*4);
182 temporary[GradeNum*4]=0;
183 if(pMenuInfo->pMenuInfo[i].type==MFT_SEPARATOR)
184 lstrcpy(temporary+GradeNum*4,"-");
185 else
186 lstrcpy(temporary+GradeNum*4,pMenuInfo->pMenuInfo[i].caption);
187 SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
188 if(pMenuInfo->pMenuInfo[i].pMenuInfo)
189 SetMenuDataList(hList,&pMenuInfo->pMenuInfo[i],GradeNum+1);
190 }
191}
192void NewMenuWindow(MENU_INFO *pMenuInfo){
193 extern HINSTANCE hInst;
194 extern HWND hDocCombo;
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.c_str(),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 mdic.style |= WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
234 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(LPARAM)&mdic); //ウィンドウ作成
235
236
237 ////////////////////
238 //子ウィンドウ作成
239
240 //ダイアログの下地を作成
241 hMenuEdit=CreateWindowEx(WS_EX_CLIENTEDGE,"MenuEditWindow",NULL,
242 WS_CHILD|WS_VSCROLL|WS_VISIBLE,
243 0,0,0,0,
244 hChild,NULL,hInst,NULL);
245
246 //メニュー リスト ウィンドウを作成
247 hListWnd=CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX",NULL,
248 WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE|LBS_NOTIFY|LBS_NOINTEGRALHEIGHT,
249 0,0,0,0,
250 hChild,NULL,hInst,NULL);
251
252
253 //ウィンドウのID登録
254 MdiInfo.push_back( new MDIINFO() );
255 i = MdiInfo.size()-1;
256 MdiInfo[i]->hwnd=hChild;
257 MdiInfo[i]->DocType=WNDTYPE_MENU;
258 MdiInfo[i]->title = pMenuInfo->IdName;
259 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 = ActiveBasic::Resource::CreateDialogAlt(hResInst, IDD_PROJECT_MENUEDIT, hMenuEdit, 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
285
286 //ウィンドウ位置を初期化
287 GetClientRect(hChild,&rect);
288 MoveWindow(MdiInfo[i]->MdiMenuInfo->hMenuEdit,0,0,172,rect.bottom,1);
289 MoveWindow(MdiInfo[i]->MdiMenuInfo->hList,172,0,rect.right-172,rect.bottom,1);
290
291 //Docコンボボックスに追加
292 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)pMenuInfo->IdName);
293 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
294
295 //タブに追加
296 pobj_MainTab->InsertItem( hChild, pMenuInfo->IdName, true );
297
298 SetFocus(hListWnd);
299
300 //メニュー状態を設定
301 ResetState_DocMenu();
302}
303
304int GetNumberOfMenu(MENU_INFO *pMenuInfo){
305 int i,i2;
306 for(i=0,i2=0;i<pMenuInfo->NumberOfMenu;i++,i2++){
307 if(pMenuInfo->pMenuInfo[i].pMenuInfo) i2+=GetNumberOfMenu(&pMenuInfo->pMenuInfo[i]);
308 }
309 return i2;
310}
311MENU_INFO *GetMenuInfoFromList(MENU_INFO *pMenuInfo,int *pPos,int index,int *GradeNum){
312 int i;
313 MENU_INFO *pRetMenuInfo;
314 for(i=0;i<pMenuInfo->NumberOfMenu;i++){
315 if((*pPos)==index){
316 *pPos=i;
317 return pMenuInfo;
318 }
319 (*pPos)++;
320 if(pMenuInfo->pMenuInfo[i].pMenuInfo){
321 (*GradeNum)++;
322 pRetMenuInfo=GetMenuInfoFromList(&pMenuInfo->pMenuInfo[i],pPos,index,GradeNum);
323 if(pRetMenuInfo) return pRetMenuInfo;
324 (*GradeNum)--;
325 }
326 }
327 return 0;
328}
329BOOL CALLBACK DlgMenuProperty_Rename(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
330 extern HANDLE hHeap;
331 extern HWND hClient,hOwner;
332 int i;
333 char temporary[MAX_PATH];
334 static MENU_INFO *pMenuInfo;
335
336 switch(message){
337 case WM_INITDIALOG:
338 SetPosCenter(hwnd);
339 i=GetWndNum(GetWindow(hClient,GW_CHILD));
340 GetDlgItemText(MdiInfo[i]->MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,temporary,MAX_PATH);
341 SetDlgItemText(hwnd,IDC_IDNAME,temporary);
342 GetDlgItemText(MdiInfo[i]->MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,temporary,MAX_PATH);
343 SetDlgItemText(hwnd,IDC_CAPTION,temporary);
344
345 pMenuInfo=(MENU_INFO *)lParam;
346 if(pMenuInfo->pMenuInfo){
347 EnableWindow(GetDlgItem(hwnd,IDC_IDSTATIC),0);
348 EnableWindow(GetDlgItem(hwnd,IDC_IDNAME),0);
349 }
350 break;
351 case WM_COMMAND:
352 switch(LOWORD(wParam)){
353 case IDOK:
354 i=GetWndNum(GetWindow(hClient,GW_CHILD));
355
356 if(!pMenuInfo->pMenuInfo){
357 //ID
358 GetDlgItemText(hwnd,IDC_IDNAME,temporary,MAX_PATH);
359 if(!temporary[0]){
360 //"ID名を入力して下さい。"
361 MessageBox(hOwner,STRING_ERROR_MUST_IDNAME,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
362 break;
363 }
364 HeapDefaultFree(pMenuInfo->IdName);
365 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
366 lstrcpy(pMenuInfo->IdName,temporary);
367 }
368
369 //キャプション
370 GetDlgItemText(hwnd,IDC_CAPTION,temporary,MAX_PATH);
371 if(!temporary[0]){
372 //"キャプションを入力して下さい。"
373 MessageBox(hOwner,STRING_ERROR_MUST_CAPTION,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
374 break;
375 }
376 HeapDefaultFree(pMenuInfo->caption);
377 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
378 lstrcpy(pMenuInfo->caption,temporary);
379
380 EndDialog(hwnd,1);
381 return 1;
382 case IDCANCEL:
383 EndDialog(hwnd,0);
384 return 1;
385 }
386 break;
387 }
388 return 0;
389}
390BOOL CALLBACK MenuEditDlg(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
391 extern HANDLE hHeap;
392 int i,i2,i3,i4,WndNum,MenuInfoNum;
393 char temporary[MAX_PATH];
394 MENU_INFO *pMenuInfo,tempMenuInfo;
395
396 switch(message){
397 case WM_COMMAND:
398 switch(LOWORD(wParam)){
399 case IDC_RENAME:
400 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
401 if(WndNum==-1) return 1;
402 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum]->path);
403
404 i4=SendMessage(MdiInfo[WndNum]->MdiMenuInfo->hList,LB_GETCURSEL,0,0);
405 if(i4==LB_ERR) return 1;
406 i2=0;
407 i3=0;
408 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
409 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
410
411 if (!ActiveBasic::Resource::DialogBoxAlt(hResInst, IDD_PROJECT_MENURENAME, hOwner, DlgMenuProperty_Rename, reinterpret_cast<LPARAM>(pMenuInfo)))
412 {
413 return 1;
414 }
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 int i;
747 RECT rect;
748 SCROLLINFO ScrollInfo;
749
750 switch(message){
751 case WM_MOUSEACTIVATE:
752 BringWindowToTop(GetParent(hwnd));
753 return 0;
754 case WM_VSCROLL:
755 ScrollInfo.cbSize=sizeof(SCROLLINFO);
756 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
757 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
758 if(LOWORD(wParam)==SB_LINEUP) i=-20;
759 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
760 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
761 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
762 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
763 else i=0;
764 GetClientRect(hwnd,&rect);
765 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
766 if(i!=0){
767 ScrollInfo.nPos+=i;
768 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
769 ScrollWindow(hwnd,0,-i,NULL,NULL);
770 UpdateWindow(hwnd);
771 }
772 return 0;
773 case WM_SIZE:
774 i=GetWndNum(GetParent(hwnd));
775 if(i==-1) return 0; //ウィンドウが初期状態の場合
776 ScrollInfo.cbSize=sizeof(SCROLLINFO);
777 ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
778 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
779 GetClientRect(MdiInfo[i]->MdiMenuInfo->hEdit_Dlg,&rect);
780 ScrollInfo.nMin=0;
781 ScrollInfo.nMax=rect.bottom;
782 ScrollInfo.nPage=HIWORD(lParam);
783 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
784
785 i=ScrollInfo.nPos;
786 ScrollInfo.fMask=SIF_POS;
787 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
788 if(i>ScrollInfo.nPos){
789 ScrollWindow(hwnd,0,i-ScrollInfo.nPos,NULL,NULL);
790 UpdateWindow(hwnd);
791 }
792 return 0;
793 }
794 return DefWindowProc(hwnd,message,wParam,lParam);
795}
796LRESULT CALLBACK MDIClientWindow_Menu(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
797 extern HWND hDocCombo;
798 int i,i2,i3,WndNum,MenuInfoNum;
799 MENU_INFO *pMenuInfo;
800
801 switch(message){
802 case WM_COMMAND:
803 WndNum=GetWndNum(hwnd);
804 if(WndNum==-1) return 0;
805 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum]->path);
806 if((HWND)lParam==MdiInfo[WndNum]->MdiMenuInfo->hList&&HIWORD(wParam)==LBN_SELCHANGE){
807 i=SendMessage(MdiInfo[WndNum]->MdiMenuInfo->hList,LB_GETCURSEL,0,0);
808 i2=0;
809 i3=0;
810 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i,&i3);
811 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
812
813 if(pMenuInfo->pMenuInfo){
814 SetDlgItemText(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
815 SetDlgItemText(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
816 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
817 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
818 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
819 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),0);
820 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
821 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
822 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
823 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
824 }
825 else if(pMenuInfo->type==MFT_STRING){
826 SetDlgItemText(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
827 SetDlgItemText(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,pMenuInfo->IdName);
828 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),1);
829 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),1);
830 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
831 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
832 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
833 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
834 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
835 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
836 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
837 }
838 else if(pMenuInfo->type==MFT_SEPARATOR){
839 SetDlgItemText(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,"");
840 SetDlgItemText(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
841 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
842 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),0);
843 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_RENAME),0);
844 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_POPUP),0);
845 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
846 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),0);
847 EnableWindow(GetDlgItem(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),0);
848 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
849 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_CHECKED,0);
850 }
851
852 if(pMenuInfo->state&MFS_CHECKED) i2=BST_CHECKED;
853 else i2=BST_UNCHECKED;
854 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_CHECKED,BM_SETCHECK,i2,0);
855 if(pMenuInfo->state&MFS_DISABLED) i2=BST_CHECKED;
856 else i2=BST_UNCHECKED;
857 SendDlgItemMessage(MdiInfo[WndNum]->MdiMenuInfo->hEdit_Dlg,IDC_DISABLED,BM_SETCHECK,i2,0);
858 }
859 return 0;
860 case WM_MDIACTIVATE:
861 if(!lParam) return 0;
862 i=GetWndNum((HWND)lParam);
863 if(i==-1) return 0; //ウィンドウが初期状態の場合
864
865 i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i]->title.c_str());
866 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
867 SetStatusText(NULL);
868 ResetState_EditMenu();
869 return 0;
870 case WM_SIZE:
871 WndNum=GetWndNum(hwnd);
872 if(WndNum==-1) break;
873 MoveWindow(MdiInfo[WndNum]->MdiMenuInfo->hMenuEdit,0,0,172,HIWORD(lParam),1);
874 MoveWindow(MdiInfo[WndNum]->MdiMenuInfo->hList,172,0,LOWORD(lParam)-172,HIWORD(lParam),1);
875 break;
876 case WM_CLOSE:
877 CloseDocWindow(GetWndNum(hwnd));
878 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
879 i=DefMDIChildProc(hwnd,message,wParam,lParam);
880
881 //メニュー状態を設定
882 ResetState_DocMenu();
883
884 return i;
885 }
886 return DefMDIChildProc(hwnd,message,wParam,lParam);
887}
Note: See TracBrowser for help on using the repository browser.