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

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

MdiInfoをリファクタリング

File size: 31.5 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 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic); //ウィンドウ作成
231
232
233 ////////////////////
234 //子ウィンドウ作成
235
236 //ダイアログの下地を作成
237 hMenuEdit=CreateWindowEx(WS_EX_CLIENTEDGE,"MenuEditWindow",NULL,
238 WS_CHILD|WS_VSCROLL|WS_VISIBLE,
239 0,0,0,0,
240 hChild,NULL,hInst,NULL);
241
242 //メニュー リスト ウィンドウを作成
243 hListWnd=CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX",NULL,
244 WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE|LBS_NOTIFY|LBS_NOINTEGRALHEIGHT,
245 0,0,0,0,
246 hChild,NULL,hInst,NULL);
247
248
249 //ウィンドウのID登録
250 MdiInfo.push_back( MDIINFO() );
251 i = MdiInfo.size()-1;
252 MdiInfo[i].hwnd=hChild;
253 MdiInfo[i].DocType=WNDTYPE_MENU;
254 MdiInfo[i].title = pMenuInfo->IdName;
255 MdiInfo[i].path = pMenuInfo->IdName;
256
257
258 /////////////////////
259 //MENU ウィンドウ情報
260
261 MdiInfo[i].MdiMenuInfo=(MDIMENUINFO *)GlobalAlloc(GPTR,sizeof(MDIMENUINFO));
262
263 MdiInfo[i].MdiMenuInfo->hList=hListWnd;
264
265 MdiInfo[i].MdiMenuInfo->hMenuEdit=hMenuEdit;
266 MdiInfo[i].MdiMenuInfo->hEdit_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_PROJECT_MENUEDIT),hMenuEdit,(DLGPROC)MenuEditDlg);
267
268 SCROLLINFO ScrollInfo;
269 ScrollInfo.cbSize=sizeof(SCROLLINFO);
270 ScrollInfo.fMask=SIF_POS;
271 ScrollInfo.nPos=0;
272 SetScrollInfo(MdiInfo[i].MdiMenuInfo->hMenuEdit,SB_VERT,&ScrollInfo,1);
273
274 SendMessage(hListWnd,LB_RESETCONTENT,0,0);
275 SetMenuDataList(hListWnd,pMenuInfo,0);
276 if(pMenuInfo->NumberOfMenu){
277 SendMessage(hListWnd,LB_SETCURSEL,0,0);
278 SendMessage(hChild,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)hListWnd);
279 }
280
281
282 //ウィンドウ位置を初期化
283 GetClientRect(hChild,&rect);
284 MoveWindow(MdiInfo[i].MdiMenuInfo->hMenuEdit,0,0,172,rect.bottom,1);
285 MoveWindow(MdiInfo[i].MdiMenuInfo->hList,172,0,rect.right-172,rect.bottom,1);
286
287 //Docコンボボックスに追加
288 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)pMenuInfo->IdName);
289 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
290
291 //タブに追加
292 pobj_MainTab->InsertItem( pMenuInfo->IdName, true );
293
294 SetFocus(hListWnd);
295
296 //メニュー状態を設定
297 ResetState_DocMenu();
298}
299
300int GetNumberOfMenu(MENU_INFO *pMenuInfo){
301 int i,i2;
302 for(i=0,i2=0;i<pMenuInfo->NumberOfMenu;i++,i2++){
303 if(pMenuInfo->pMenuInfo[i].pMenuInfo) i2+=GetNumberOfMenu(&pMenuInfo->pMenuInfo[i]);
304 }
305 return i2;
306}
307MENU_INFO *GetMenuInfoFromList(MENU_INFO *pMenuInfo,int *pPos,int index,int *GradeNum){
308 int i;
309 MENU_INFO *pRetMenuInfo;
310 for(i=0;i<pMenuInfo->NumberOfMenu;i++){
311 if((*pPos)==index){
312 *pPos=i;
313 return pMenuInfo;
314 }
315 (*pPos)++;
316 if(pMenuInfo->pMenuInfo[i].pMenuInfo){
317 (*GradeNum)++;
318 pRetMenuInfo=GetMenuInfoFromList(&pMenuInfo->pMenuInfo[i],pPos,index,GradeNum);
319 if(pRetMenuInfo) return pRetMenuInfo;
320 (*GradeNum)--;
321 }
322 }
323 return 0;
324}
325BOOL CALLBACK DlgMenuProperty_Rename(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
326 extern HANDLE hHeap;
327 extern HWND hClient,hOwner;
328 int i;
329 char temporary[MAX_PATH];
330 static MENU_INFO *pMenuInfo;
331
332 switch(message){
333 case WM_INITDIALOG:
334 SetPosCenter(hwnd);
335 i=GetWndNum(GetWindow(hClient,GW_CHILD));
336 GetDlgItemText(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,temporary,MAX_PATH);
337 SetDlgItemText(hwnd,IDC_IDNAME,temporary);
338 GetDlgItemText(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,temporary,MAX_PATH);
339 SetDlgItemText(hwnd,IDC_CAPTION,temporary);
340
341 pMenuInfo=(MENU_INFO *)lParam;
342 if(pMenuInfo->pMenuInfo){
343 EnableWindow(GetDlgItem(hwnd,IDC_IDSTATIC),0);
344 EnableWindow(GetDlgItem(hwnd,IDC_IDNAME),0);
345 }
346 break;
347 case WM_COMMAND:
348 switch(LOWORD(wParam)){
349 case IDOK:
350 i=GetWndNum(GetWindow(hClient,GW_CHILD));
351
352 if(!pMenuInfo->pMenuInfo){
353 //ID
354 GetDlgItemText(hwnd,IDC_IDNAME,temporary,MAX_PATH);
355 if(!temporary[0]){
356 //"ID名を入力して下さい。"
357 MessageBox(hOwner,STRING_ERROR_MUST_IDNAME,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
358 break;
359 }
360 HeapDefaultFree(pMenuInfo->IdName);
361 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
362 lstrcpy(pMenuInfo->IdName,temporary);
363 }
364
365 //キャプション
366 GetDlgItemText(hwnd,IDC_CAPTION,temporary,MAX_PATH);
367 if(!temporary[0]){
368 //"キャプションを入力して下さい。"
369 MessageBox(hOwner,STRING_ERROR_MUST_CAPTION,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
370 break;
371 }
372 HeapDefaultFree(pMenuInfo->caption);
373 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
374 lstrcpy(pMenuInfo->caption,temporary);
375
376 EndDialog(hwnd,1);
377 return 1;
378 case IDCANCEL:
379 EndDialog(hwnd,0);
380 return 1;
381 }
382 break;
383 }
384 return 0;
385}
386BOOL CALLBACK MenuEditDlg(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
387 extern HANDLE hHeap;
388 int i,i2,i3,i4,WndNum,MenuInfoNum;
389 char temporary[MAX_PATH];
390 MENU_INFO *pMenuInfo,tempMenuInfo;
391
392 switch(message){
393 case WM_COMMAND:
394 switch(LOWORD(wParam)){
395 case IDC_RENAME:
396 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
397 if(WndNum==-1) return 1;
398 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
399
400 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
401 if(i4==LB_ERR) return 1;
402 i2=0;
403 i3=0;
404 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
405 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
406
407 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_PROJECT_MENURENAME),hOwner,(DLGPROC)DlgMenuProperty_Rename,(long)pMenuInfo)) return 1;
408 GetDlgItemText(hwnd,IDC_IDNAME,temporary,MAX_PATH);
409
410 if(!pMenuInfo->pMenuInfo){
411 //ID
412 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,pMenuInfo->IdName);
413 }
414
415 //キャプション
416 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
417
418 //リストへキャプションを反映
419 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
420 memset(temporary,' ',i3*4);
421 lstrcpy(temporary+i3*4,pMenuInfo->caption);
422 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
423
424 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
425 projectInfo.ModifyOfMaterial=1;
426 return 1;
427 case IDC_POPUP:
428 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
429 if(WndNum==-1) return 1;
430 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
431
432 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
433 if(i4==LB_ERR) return 1;
434 i2=0;
435 i3=0;
436 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
437 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
438
439 if(pMenuInfo->pMenuInfo){
440 if(pMenuInfo->NumberOfMenu){
441 //"この操作を行うとポップアップされるメニュー アイテムも削除されます。"
442 if(MessageBox(hOwner,STRING_MENUEDIT_DELETECHECK,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)==IDCANCEL) return 1;
443 }
444 i=0;
445 HeapMenuDataFree(pMenuInfo->pMenuInfo,pMenuInfo->NumberOfMenu,&i);
446
447 for(i2=0;i2<i;i2++)
448 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4+1,0);
449
450 HeapDefaultFree(pMenuInfo->pMenuInfo);
451 pMenuInfo->pMenuInfo=0;
452 lstrcpy(temporary,"IDM_name");
453 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
454 lstrcpy(pMenuInfo->IdName,temporary);
455 }
456 else{
457 if(pMenuInfo->type==MFT_STRING){
458 HeapDefaultFree(pMenuInfo->IdName);
459 pMenuInfo->IdName=0;
460 }
461 else if(pMenuInfo->type==MFT_SEPARATOR){
462 lstrcpy(temporary,"caption text");
463 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
464 lstrcpy(pMenuInfo->caption,temporary);
465 }
466 pMenuInfo->NumberOfMenu=0;
467 pMenuInfo->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
468 pMenuInfo->type=MFT_STRING;
469 }
470 SendMessage(MdiInfo[WndNum].hwnd,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
471 projectInfo.ModifyOfMaterial=1;
472 return 1;
473 case IDC_SEPARATOR:
474 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
475 if(WndNum==-1) return 1;
476 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
477
478 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
479 if(i4==LB_ERR) return 1;
480 i2=0;
481 i3=0;
482 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
483 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
484
485 if(SendDlgItemMessage(hwnd,IDC_SEPARATOR,BM_GETCHECK,0,0)){
486 HeapDefaultFree(pMenuInfo->caption);
487 pMenuInfo->caption=0;
488 HeapDefaultFree(pMenuInfo->IdName);
489 pMenuInfo->IdName=0;
490 pMenuInfo->type=MFT_SEPARATOR;
491
492 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
493 memset(temporary,' ',i3*4);
494 lstrcpy(temporary+i3*4,"-");
495 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
496 }
497 else{
498 lstrcpy(temporary,"caption text");
499 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
500 lstrcpy(pMenuInfo->caption,temporary);
501 lstrcpy(temporary,"IDM_name");
502 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
503 lstrcpy(pMenuInfo->IdName,temporary);
504 pMenuInfo->type=MFT_STRING;
505
506 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
507 memset(temporary,' ',i3*4);
508 lstrcpy(temporary+i3*4,pMenuInfo->caption);
509 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
510 }
511 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
512 SendMessage(MdiInfo[WndNum].hwnd,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
513 return 1;
514 case IDC_CHECKED:
515 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
516 if(WndNum==-1) return 1;
517 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
518
519 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
520 if(i4==LB_ERR) return 1;
521 i2=0;
522 i3=0;
523 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
524 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
525
526 if(SendDlgItemMessage(hwnd,IDC_CHECKED,BM_GETCHECK,0,0))
527 pMenuInfo->state|=MFS_CHECKED;
528 else
529 pMenuInfo->state&=~MFS_CHECKED;
530
531 projectInfo.ModifyOfMaterial=1;
532 return 1;
533 case IDC_DISABLED:
534 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
535 if(WndNum==-1) return 1;
536 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
537
538 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
539 if(i4==LB_ERR) return 1;
540 i2=0;
541 i3=0;
542 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
543 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
544
545 if(SendDlgItemMessage(hwnd,IDC_DISABLED,BM_GETCHECK,0,0))
546 pMenuInfo->state|=MFS_DISABLED;
547 else
548 pMenuInfo->state&=~MFS_DISABLED;
549
550 projectInfo.ModifyOfMaterial=1;
551 return 1;
552 case IDC_INSERTMENUITEM:
553 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
554 if(WndNum==-1) return 1;
555 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
556
557 if(projectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu==0){
558 projectInfo.pMenuInfo[MenuInfoNum].pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,projectInfo.pMenuInfo[MenuInfoNum].pMenuInfo,(projectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu+1)*sizeof(MENU_INFO));
559 pMenuInfo=&projectInfo.pMenuInfo[MenuInfoNum].pMenuInfo[projectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu];
560
561 sprintf(temporary,"caption text");
562 pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
563 lstrcpy(pMenuInfo->caption,temporary);
564
565 sprintf(temporary,"IDM_name");
566 pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
567 lstrcpy(pMenuInfo->IdName,temporary);
568
569 pMenuInfo->state=0;
570 pMenuInfo->type=MFT_STRING;
571 pMenuInfo->pMenuInfo=0;
572
573 projectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu++;
574
575 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,0,(long)pMenuInfo->caption);
576 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,0,0);
577 SendMessage(GetParent(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit),WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
578 }
579 else{
580 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
581 if(i4==LB_ERR){
582 //"新しいメニュー アイテムの挿入位置を選択して下さい"
583 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_NEW_ITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
584 return 1;
585 }
586 i2=0;
587 i3=0;
588 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
589 if(pMenuInfo->pMenuInfo[i2].pMenuInfo){
590 //"ポップアップ アイテムを作成する場合は \"はい\" を、ポップアップと同じ階層にメニュー アイテムを作成する場合は \"いいえ\" を押して下さい。"
591 i=MessageBox(hOwner,STRING_MENUEDIT_INSERTTYPE_YESNO,APPLICATION_NAME,MB_YESNOCANCEL);
592 if(i==IDYES){
593 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
594 i2=0;
595 i3++;
596 }
597 else if(i==IDNO){
598 i4+=GetNumberOfMenu(&pMenuInfo->pMenuInfo[i2]);
599 i2++;
600 }
601 else return 1;
602 }
603 else i2++;
604 i4++;
605 pMenuInfo->pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,pMenuInfo->pMenuInfo,(pMenuInfo->NumberOfMenu+1)*sizeof(MENU_INFO));
606 for(i=pMenuInfo->NumberOfMenu;i>i2;i--){
607 pMenuInfo->pMenuInfo[i]=pMenuInfo->pMenuInfo[i-1];
608 }
609 memset(&pMenuInfo->pMenuInfo[i2],0,sizeof(MENU_INFO));
610
611 sprintf(temporary,"caption text");
612 pMenuInfo->pMenuInfo[i2].caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
613 lstrcpy(pMenuInfo->pMenuInfo[i2].caption,temporary);
614
615 sprintf(temporary,"IDM_name");
616 pMenuInfo->pMenuInfo[i2].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
617 lstrcpy(pMenuInfo->pMenuInfo[i2].IdName,temporary);
618
619 memset(temporary,' ',i3*4);
620 lstrcpy(temporary+i3*4,pMenuInfo->pMenuInfo[i2].caption);
621
622 pMenuInfo->NumberOfMenu++;
623
624 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
625 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
626 SendMessage(GetParent(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit),WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
627 }
628 projectInfo.ModifyOfMaterial=1;
629 return 1;
630 case IDC_DELETEMENUITEM:
631 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
632 if(WndNum==-1) return 1;
633 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
634
635 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
636 if(i4==LB_ERR){
637 //"削除するメニュー アイテムを選択して下さい"
638 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_DELETE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
639 return 1;
640 }
641 i2=0;
642 i3=0;
643 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
644
645 i3=1;
646 if(pMenuInfo->pMenuInfo[i2].pMenuInfo){
647 if(pMenuInfo->pMenuInfo[i2].NumberOfMenu){
648 //"この操作を行うとポップアップされるメニュー アイテムも削除されます。"
649 if(MessageBox(hOwner,STRING_MENUEDIT_DELETECHECK,APPLICATION_NAME,MB_OKCANCEL)==IDCANCEL) return 1;
650 }
651 HeapMenuDataFree(pMenuInfo->pMenuInfo[i2].pMenuInfo,pMenuInfo->pMenuInfo[i2].NumberOfMenu,&i3);
652 HeapDefaultFree(pMenuInfo->pMenuInfo[i2].pMenuInfo);
653 }
654 else HeapDefaultFree(pMenuInfo->pMenuInfo[i2].IdName);
655
656 if(pMenuInfo->pMenuInfo[i2].type!=MFT_SEPARATOR)
657 HeapDefaultFree(pMenuInfo->pMenuInfo[i2].caption);
658
659 for(i=i2;i<pMenuInfo->NumberOfMenu-1;i++)
660 pMenuInfo->pMenuInfo[i]=pMenuInfo->pMenuInfo[i+1];
661
662 pMenuInfo->NumberOfMenu--;
663 pMenuInfo->pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,pMenuInfo->pMenuInfo,pMenuInfo->NumberOfMenu*sizeof(MENU_INFO));
664
665 for(i=0;i<i3;i++)
666 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
667
668 i=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCOUNT,0,0)-1;
669 if(i){
670 if(i<i4) i4=i;
671 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
672 }
673
674 projectInfo.ModifyOfMaterial=1;
675 return 1;
676 case IDC_UP:
677 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
678 if(WndNum==-1) return 1;
679 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
680
681 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
682 if(i4==LB_ERR){
683 //"移動するメニュー アイテムを選択して下さい"
684 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
685 return 1;
686 }
687 i2=0;
688 i3=0;
689 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
690 if(i2==0) return 1;
691 i2--;
692
693 memcpy(&tempMenuInfo,&pMenuInfo->pMenuInfo[i2],sizeof(MENU_INFO));
694 memcpy(&pMenuInfo->pMenuInfo[i2],&pMenuInfo->pMenuInfo[i2+1],sizeof(MENU_INFO));
695 memcpy(&pMenuInfo->pMenuInfo[i2+1],&tempMenuInfo,sizeof(MENU_INFO));
696
697 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_RESETCONTENT,0,0);
698 SetMenuDataList(MdiInfo[WndNum].MdiMenuInfo->hList,&projectInfo.pMenuInfo[MenuInfoNum],0);
699 if(!pMenuInfo->pMenuInfo[i2].pMenuInfo)
700 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4-1,0);
701
702 projectInfo.ModifyOfMaterial=1;
703 return 1;
704 case IDC_DOWN:
705 WndNum=GetWndNum(GetParent(GetParent(hwnd)));
706 if(WndNum==-1) return 1;
707 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
708
709 i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
710 if(i4==LB_ERR){
711 //"移動するメニュー アイテムを選択して下さい"
712 MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
713 return 1;
714 }
715 i2=0;
716 i3=0;
717 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
718 if(pMenuInfo->NumberOfMenu<=i2+1) return 1;
719
720 memcpy(&tempMenuInfo,&pMenuInfo->pMenuInfo[i2],sizeof(MENU_INFO));
721 memcpy(&pMenuInfo->pMenuInfo[i2],&pMenuInfo->pMenuInfo[i2+1],sizeof(MENU_INFO));
722 memcpy(&pMenuInfo->pMenuInfo[i2+1],&tempMenuInfo,sizeof(MENU_INFO));
723
724 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_RESETCONTENT,0,0);
725 SetMenuDataList(MdiInfo[WndNum].MdiMenuInfo->hList,&projectInfo.pMenuInfo[MenuInfoNum],0);
726 if(!pMenuInfo->pMenuInfo[i2].pMenuInfo)
727 SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4+1,0);
728
729 projectInfo.ModifyOfMaterial=1;
730 return 1;
731 }
732 break;
733 }
734 return 0;
735}
736
737LRESULT CALLBACK MenuEditWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
738 extern HINSTANCE hInst;
739 int i;
740 RECT rect;
741 SCROLLINFO ScrollInfo;
742
743 switch(message){
744 case WM_MOUSEACTIVATE:
745 BringWindowToTop(GetParent(hwnd));
746 return 0;
747 case WM_VSCROLL:
748 ScrollInfo.cbSize=sizeof(SCROLLINFO);
749 ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
750 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
751 if(LOWORD(wParam)==SB_LINEUP) i=-20;
752 else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
753 else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
754 else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
755 else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
756 else i=0;
757 GetClientRect(hwnd,&rect);
758 i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
759 if(i!=0){
760 ScrollInfo.nPos+=i;
761 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
762 ScrollWindow(hwnd,0,-i,NULL,NULL);
763 UpdateWindow(hwnd);
764 }
765 return 0;
766 case WM_SIZE:
767 i=GetWndNum(GetParent(hwnd));
768 if(i==-1) return 0; //ウィンドウが初期状態の場合
769 ScrollInfo.cbSize=sizeof(SCROLLINFO);
770 ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
771 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
772 GetClientRect(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,&rect);
773 ScrollInfo.nMin=0;
774 ScrollInfo.nMax=rect.bottom;
775 ScrollInfo.nPage=HIWORD(lParam);
776 SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
777
778 i=ScrollInfo.nPos;
779 ScrollInfo.fMask=SIF_POS;
780 GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
781 if(i>ScrollInfo.nPos){
782 ScrollWindow(hwnd,0,i-ScrollInfo.nPos,NULL,NULL);
783 UpdateWindow(hwnd);
784 }
785 return 0;
786 }
787 return DefWindowProc(hwnd,message,wParam,lParam);
788}
789LRESULT CALLBACK MDIClientWindow_Menu(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
790 extern HWND hDocCombo;
791 int i,i2,i3,WndNum,MenuInfoNum;
792 MENU_INFO *pMenuInfo;
793
794 switch(message){
795 case WM_COMMAND:
796 WndNum=GetWndNum(hwnd);
797 if(WndNum==-1) return 0;
798 MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
799 if((HWND)lParam==MdiInfo[WndNum].MdiMenuInfo->hList&&HIWORD(wParam)==LBN_SELCHANGE){
800 i=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
801 i2=0;
802 i3=0;
803 pMenuInfo=GetMenuInfoFromList(&projectInfo.pMenuInfo[MenuInfoNum],&i2,i,&i3);
804 pMenuInfo=&pMenuInfo->pMenuInfo[i2];
805
806 if(pMenuInfo->pMenuInfo){
807 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
808 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
809 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
810 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
811 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
812 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),0);
813 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
814 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
815 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
816 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
817 }
818 else if(pMenuInfo->type==MFT_STRING){
819 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
820 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,pMenuInfo->IdName);
821 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),1);
822 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),1);
823 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
824 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
825 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
826 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
827 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
828 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
829 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
830 }
831 else if(pMenuInfo->type==MFT_SEPARATOR){
832 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,"");
833 SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
834 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
835 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),0);
836 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),0);
837 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),0);
838 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
839 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),0);
840 EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),0);
841 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
842 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_CHECKED,0);
843 }
844
845 if(pMenuInfo->state&MFS_CHECKED) i2=BST_CHECKED;
846 else i2=BST_UNCHECKED;
847 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED,BM_SETCHECK,i2,0);
848 if(pMenuInfo->state&MFS_DISABLED) i2=BST_CHECKED;
849 else i2=BST_UNCHECKED;
850 SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED,BM_SETCHECK,i2,0);
851 }
852 return 0;
853 case WM_MDIACTIVATE:
854 if(!lParam) return 0;
855 i=GetWndNum((HWND)lParam);
856 if(i==-1) return 0; //ウィンドウが初期状態の場合
857
858 i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title.c_str());
859 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
860 SetStatusText(NULL);
861 ResetState_EditMenu();
862 return 0;
863 case WM_SIZE:
864 WndNum=GetWndNum(hwnd);
865 if(WndNum==-1) break;
866 MoveWindow(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit,0,0,172,HIWORD(lParam),1);
867 MoveWindow(MdiInfo[WndNum].MdiMenuInfo->hList,172,0,LOWORD(lParam)-172,HIWORD(lParam),1);
868 break;
869 case WM_CLOSE:
870 CloseDocWindow(GetWndNum(hwnd));
871 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
872 i=DefMDIChildProc(hwnd,message,wParam,lParam);
873
874 //メニュー状態を設定
875 ResetState_DocMenu();
876
877 return i;
878 }
879 return DefMDIChildProc(hwnd,message,wParam,lParam);
880}
Note: See TracBrowser for help on using the repository browser.