오늘은 아래 그림과 같이 mfc 대화상자에 메뉴를 만들어 보겠습니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-46-26-038-min.png)
대화상자 프로젝트를 만들어 주시고, 아래와 같이 리소스를 추가하여 메뉴를 만들어 줍니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-39-28-127-min.png)
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-40-16-853-min.png)
위 작업을 하시면 보시는 것과 같이 메뉴가 추가됩니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-40-39-079-min.png)
메뉴도 추가 해보고 메뉴 아이디도 바꿔봅니다. 각각의 메뉴에도 아이디를 입력해 줍니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-44-57-250-min.png)
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-53-05-704-min.png)
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-53-08-487-min.png)
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-53-10-921-min.png)
그리고 대화상자 속성에서 Menu에 방금 만들어준 메뉴 리소스의 ID를 입력합니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-45-27-945-min.png)
이 상태로 실행 시켜 보면 대화상자에 메뉴가 자동으로 삽입 됩니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-21-55-18-182-min.png)
자 이제 소스 코드를 알아보겠습니다. 각각의 메뉴들은 클릭 되었을 때 실행될 함수 3개를 아래와 같이 선언하고 정의합니다.
// 선언
void OnMenu1_1();
void OnMenu1_2();
void OnMenu2_1();
// ...
// 정의
void CMFCApplication1Dlg::OnMenu1_1()
{
AfxMessageBox( _T("OnMenu1_1") );
}
void CMFCApplication1Dlg::OnMenu1_2()
{
AfxMessageBox( _T( "OnMenu1_2" ) );
}
void CMFCApplication1Dlg::OnMenu2_1()
{
AfxMessageBox( _T( "OnMenu2_1" ) );
}
그리고 아래와 같이 대화상자에 WindowProc를 추가합니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/Cap-2020-01-07-22-00-54-927-min.png)
추가된 WindowProc에 아래와 같이 코딩합니다.
LRESULT CMFCApplication1Dlg::WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
if ( WM_COMMAND == message )
{
switch ( wParam )
{
case ID_MENU1_1:
OnMenu1_1();
break;
case ID_MENU1_2:
OnMenu1_2();
break;
case ID_MENU2_1:
OnMenu2_1();
break;
}
}
return CDialogEx::WindowProc( message, wParam, lParam );
}
이 상태로 실행 시켜보면 아래와 같이 실행 됩니다.
![](https://3001ssw.com/wp-content/uploads/2023/07/녹화_2020_01_07_22_02_57_175-min.gif)
물론 아래와 같이 이벤트 처리로 구현 가능합니다.
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND( ID_MENU1_1, &CMFCApplication1Dlg::OnMenu1_1 )
ON_COMMAND( ID_MENU1_2, &CMFCApplication1Dlg::OnMenu1_2 )
ON_COMMAND( ID_MENU2_1, &CMFCApplication1Dlg::OnMenu2_1 )
END_MESSAGE_MAP()
// 함수 선언
afx_msg void OnMenu1_1();
afx_msg void OnMenu1_2();
afx_msg void OnMenu2_1();
이상으로 대화상자 메뉴를 만들어 봤습니다.