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);
}