본문 바로가기
VisualStudio.C++.C#

MFC MenuButton Control

by i.got.it 2026. 10. 20.

 

 

MFC MenuButton Control 

 

툴박스에서 MFC Menu Button Control 선택하여 대화상자로 드래그드롭 , 속성창에서 ID 기록하고, Caption 부분에는 대표값 기록. 

 

메뉴버튼 우클릭 메뉴 > Add Variable... 클릭하여 name 기록(예 : m_menubtnSampleFreq)

 

 

위와같이 추가하면 헤더파일에 변수추가된다. 그 아래 CMenu 도 수동 추가하고 메뉴버튼 클릭시 이벤트 수신처리 위한 BN_CLICKED 이벤트 핸들러 추가한다. 

#include "afxmenubutton.h" // 수동추가
...


public:
	CMFCMenuButton m_menubtnSampleFreq;// 메뉴 버튼 멤버 변수
	CMenu          m_menuSampleFreq; // 팝업 메뉴 객체. 수동추가했음.
public:
	afx_msg void OnBnClickedMfcmenubtnsamplefreq();

 

 

OnInitDialog() 내에서 아래처럼 활용한다.

    // 1. 팝업 메뉴 생성
    m_menuSampleFreq.CreatePopupMenu();

    // 2. 메뉴 항목 추가 (메뉴ID는 프로젝트 내에서 중복되지 않는 값 사용)
    m_menuSampleFreq.AppendMenu(MF_STRING, 2001, _T("250Hz"));
    m_menuSampleFreq.AppendMenu(MF_STRING, 2002, _T("500Hz"));
    m_menuSampleFreq.AppendMenu(MF_STRING, 2003, _T("1000Hz"));
    m_menuSampleFreq.AppendMenu(MF_STRING, 2004, _T("2000Hz"));

    // 3. MFC Menu Button에 메뉴 연결
    m_menubtnSampleFreq.m_hMenu = m_menuSampleFreq.GetSafeHmenu();
    
    // 4. 첫 실행 시 버튼에 표시될 기본 텍스트 설정
    m_menubtnSampleFreq.SetWindowText(_T("250Hz")); 
    
    // 버튼 우측에 화살표 표시 (콤보박스 느낌 강조)
    m_menubtnSampleFreq.m_bOSMenu = FALSE; // MFC 고유 스타일 적용.이 값을 FALSE로 두면 시스템 기본 메뉴 스타일 대신 MFC 고유의 깔끔한 스킨 스타일로 화살표와 메뉴가 렌더링된다.

 

 

메뉴버튼 클릭 이벤트 핸들러 

 

void UITDlg::OnBnClickedMfcmenubtnsamplefreq()
{
	// CMFCMenuButton이 팝업 메뉴에서 선택된 ID 받기.
	UINT nSelectedID = m_menubtnSampleFreq.m_nMenuResult;

	// 아무것도 선택하지 않고 메뉴가 닫힌 경우(0 또는 -1) 예외 처리
	// 드랍다운 된것을 선택하지 않은 경우 무처리하는것.
	if (nSelectedID < 2001 || nSelectedID > 2004)
		return;

	// 다시 메뉴를 열었을 때를 위한 체크(V) 표시 업데이트
	for (UINT id = 2001; id <= 2004; id++)
	{
		m_menuSampleFreq.CheckMenuItem(id, (id == nSelectedID) ? MF_CHECKED : MF_UNCHECKED);
	}

	uint16_t sample_freq_sel = Sampling_Frequency;
	switch (nSelectedID)
	{
	case 2001: // 250Hz 처리 
		sample_freq_sel = 250; 
		break;
	case 2002: // 500Hz 처리 
		sample_freq_sel = 500;
		break;
	case 2003: // 1000Hz 처리  
		sample_freq_sel = 1000;

		break;
	case 2004: // 2000Hz 처리  
		sample_freq_sel = 2000;
		break;
	}
	// 현재 설정된 것과 동일 샘플링 이면 기기 송신안해. 
	if (sample_freq_sel == Sampling_Frequency) return; 

	SetSampleFrequency(sample_freq_sel);
}

 

 

 

 

상위정리

 

 

Visual Studio , Visual C++ 활용 정리.

Visual Studio C++ 활용 Visual StudioVisual C++ / C#1.설치, 설정 주제 비고. Visual Studio 2010 설치. Visual Studio 2013 (Community)무료 설치. Visaul Studio 2015 (Community)무료 설치.- Visual Studio 2015 버전은 이전 버전대비 급

igotit.tistory.com

 

 

 


첫 등록 : 2026.10.20

최종 수정 : 

단축 주소 : https://igotit.tistory.com/6879


 

댓글



비트코인




            암호화폐/외환/나스닥/골드          
       
현물 |선물 인버스 |선물 USDT , bybit MT5               프랍 트레이딩. MT4,MT5