[오리지널] MFC에서 메뉴 항목 동적 추가 및 응답 메뉴 이벤트
새 단일 문서 프로그램
보기 메뉴 항목에 숨김 도구막대(ID HIDE), 새 메뉴(ID NEWMENU) 등 두 개의 하위 메뉴를 추가합니다.
Resource에서h에 ID 하나 추가NEWMENU 매크로
#define ID_NEWMENU WM_USER+101
작업 도구 모음 및 상태 표시줄
GetDescendantWindow 함수를 사용하여 도구막대 및 상태막대 포인터 가져오기
IDHIDE는 다음과 같은 메시지 매핑을 추가합니다.
static bool m_Hide=false; m_Hide=!m_Hide; // CWnd* pWndToolBar=(CWnd*)GetDescendantWindow(AFX_IDW_TOOLBAR); // CWnd* pWndStatusBar=(CWnd*)GetDescendantWindow(AFX_IDW_STATUS_BAR); CMenu* pMenu=GetMenu(); CMenu* pSubMenu=pMenu->GetSubMenu(2); if(m_Hide) { pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE," "); if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText(" "); if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_HIDE); } else { pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE," "); if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText(" "); if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_SHOW); } 동적 추가 하위 메뉴
IDNEWMENU는 다음과 같이 메시지 매핑을 추가합니다.
static UINT m_NewMenu=ID_NEWMENU+1; // CMenu* pMenu=GetMenu(); // 2 , 3 CMenu* pSubMenu=pMenu->GetSubMenu(2); char buffer[1]; itoa(m_NewMenu-ID_NEWMENU,buffer,10); if(m_NewMenu<=ID_NEWMENU+5) { pSubMenu->AppendMenu(MF_SEPARATOR); // pSubMenu->AppendMenu(MF_STRING | MF_ENABLED,m_NewMenu++, CString(" ")+buffer); } // m_bAutoMenuEnable true, View、Document、Frame // , m_bAutoMenuEnable=false; OnCommand 메시지 맵을 추가하여 추가된 하위 메뉴 항목에 응답합니다. 코드는 다음과 같습니다.
UINT uMsg=LOWORD(wParam); for(UINT i=ID_NEWMENU+1;i<=ID_NEWMENU+5;i++) if(uMsg==i) { char buffer[1]; itoa(i-ID_NEWMENU,buffer,10); MessageBox(CString(" ") + buffer); } 마우스 오른쪽 버튼 클릭 메뉴
View 클래스에 다음과 같은 OnRButtonDown 메시지 매핑을 추가합니다.
CMenu pPopMenu; pPopMenu.CreatePopupMenu(); if(pPopMenu==NULL); pPopMenu.AppendMenu(MF_STRING,ID_NEWMENU+6," "); this->ClientToScreen(&point); pPopMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); View 클래스에 OnCommand 메시지 매핑을 추가하여 마우스 오른쪽 버튼 메뉴의 이벤트에 대응
UINT uMsg=LOWORD(wParam); if(uMsg==ID_NEWMENU+6) MessageBox(CString(" ")); 전재 대상:https://www.cnblogs.com/mx113/archive/2009/12/05/1617678.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.