[오리지널] 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에 따라 라이센스가 부여됩니다.