2012-09-26 2 views
7

MFC에서 POPUP 유형의 메뉴 항목을 제거하는 방법. RemoveMenu()는 ID 또는 위치를 취합니다. POPUP 메뉴에는 ID가 없기 때문에 왼쪽 옵션은 위치를 사용하는 것입니다.MFC에서 메뉴 제거

하지만 RemoveMenu()를 호출 할 수있는 방법과 위치가 표시되지 않습니다.

 
File Edit Test 
      Test_submenu_1 
      Test_submenu_2 
      Test_submenu_3 > submenu_3_item_1 
      Test_submenu_4 
      Test_submenu_5 

내가 Test_submenu_3을 제거하고 싶습니까? 나는 어떻게 TestMenu 객체를 찾을 수 있도록 submenu_3_item_1에 "2"라는 위치를 전달하여 RemoveMenu()를 호출 할 수 있는지 얻지 못하고있다.

이 작업에 대한 제안은 크게 감사하겠습니다.

감사합니다.

답변

7

LoadMenu는 사용할 수 없으므로 LoadMenu를 사용할 수 없습니다.

로드 된 메뉴를 수정 한 후로드하는 데 사용 된 메뉴 객체가 범위를 벗어나면이 메뉴가 종료됩니다. 현재 사용중인 메뉴를 수정해야합니다.

메뉴는 기본 메뉴의 두 번째 위치에있는 팝업 부분입니다. 그것은 5 항목을 포함하고 두 번째 또 다른 팝업입니다. 내 이해를 위해이 항목과이 항목의 팝업을 제거하고 싶습니다.

물론
CMenu* pMenu = GetMenu(); // get the main menu 
CMenu* pPopupMenu = pMenu->GetSubMenu(2);//(Test menu with item....) 
pPopupMenu->RemoveMenu(2, MF_BYPOSITION); 

,이 코드는 메인 프레임에서입니다 : 은 당신이 현재 메뉴에 대한 기본 창을 요청해야합니다 작동하게합니다. 다른 곳에서 사용하려면 메인 프레임에 대한 포인터를 사용하여 모두 액세스해야합니다.

0

'테스트'는 최상위 메뉴의 세 번째 메뉴 항목 (위치 기준)입니다. 그것은 단지 수직이 아닌 수평으로 렌더링되었습니다. 최상위 메뉴에 대한 핸들을 가지고 있다고 가정 할 때 '테스트'메뉴를 얻는 것처럼 하위 메뉴를 사용하는 것과 동일한 코드를 사용하십시오.

0

다음을 시도해보십시오. Test 하위 메뉴를 먼저 가져온 다음 (Index 2), Test_submenu_3 하위 메뉴를 위치 (2)로 제거하도록 지시하면 테스트 하위 메뉴가 나타납니다.

CMenu topMenu; 
topMenu.LoadMenu(IDR_YOUR_MENU); 
CMenu& testSubMenu = *topMenu.GetSubMenu(2); 
testSubMenu.RemoveMenu(2,MF_BYPOSITION); 
관련 문제