mfc_Edit_Message - 8BitsCoding/RobotMentor GitHub Wiki


이미지

버튼을 클릭시 메시지를 처리하는 프로그램


구현(WindowProc 이용)

클래스마법사 -> 가상함수 WindowProc 추가

LRESULT CMFCApplication6Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	if (WM_COMMAND == message) {
		UINT ctrl_id = LOWORD(wParam);
		//if (ctrl_id == IDC_BUTTON1 || ctrl_id == IDC_BUTTON2 || ctrl_id == IDC_BUTTON3)
		// Resource.h 파일의 IDC_BUTTON#의 ID를 수정하여 코드를 간결하게 한다.
		if(ctrl_id >= IDC_BUTTON1 && ctrl_id <=IDC_BUTTON3)
		{
			SetDlgItemInt(IDC_SHOW_EDIT, ctrl_id - IDC_BUTTON1 + 1);
		}
	}

	return CDialogEx::WindowProc(message, wParam, lParam);
}

하지만 이 방법의 단점은 WindowProc는 모든 메시지를 받기에 부하가 크다.(부담이 된다.)


구현(OnCommand 이용)

클래스 마법사 -> 가상함수 OnCommand 추가

OnCommand는 WM_COMMAND만 처리하는 함수이다.

BOOL CMFCApplication6Dlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
    UINT ctrl_id = LOWORD(wParam);

    if(ctrl_id >= IDC_BUTTON1 && ctrl_id <=IDC_BUTTON3)
    {
        SetDlgItemInt(IDC_SHOW_EDIT, ctrl_id - IDC_BUTTON1 + 1);
    }

	return CDialogEx::OnCommand(wParam, lParam);
}

구현(MFC에서 권장하는 방법??)

좀 더 객체 지향적인 방법으로 구현해보자. (지금같은 방식은 새로운 코드가 추가되면 코드가 아래로 계속 길어진다.)

BEGIN_MESSAGE_MAP(CMFCApplication6Dlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND_RANGE(IDC_BUTTON1, IDC_BUTTON3, OnSetNumber)
END_MESSAGE_MAP()

IDC_BUTTON1~IDC_BUTTON3의 메시지를 OnSetNumber로 처리한다고 선언

void CMFCApplication6Dlg::OnSetNumber(UINT a_ctrl_id) 
{
	SetDlgItemInt(IDC_SHOW_EDIT, a_ctrl_id - IDC_BUTTON1 + 1);
}