MFC 코드 질문 드립니다.

MFC SDI에서 CButton 클래스를 상속받지 않고 CWnd를 상속받는 클래스를 따로 만들어서 거기에 사각형으로 그림을 만들어서 LbuttonDown, Up을 이용해서 버튼을 만들고, 기본으로 만들어진 CView 클래스의 OnPaint()에서 그 버튼을 가져다 쓰고자 합니다.

기본 CView 클래스에서 버튼까지 가져오는 것은 성공했습니다. 헌데 새로운 클래스에서 버튼을 누르면 그림이 변하고 메세지 박스까지 띄워주는 코드까지 작성했는데 클릭을 해도 아무 반응이 없는데 어떠한 방식으로 해결을 해야할지 궁금해서 글 올려봅니다. 밑에는 코드입니다.

ButtonView는 MFC 프로젝트 생성 시 기본으로 생성되는 View 클래스이고 CreateButton 클래스는 제가 생성한 CWnd 클래스를 상속받는 클래스입니다.

<ButtonView의 OnPaint 함수>

void CButtonView::OnPaint()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 여기에 메시지 처리기 코드를 추가합니다.
					   // 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
	CreateButton* cdc = new CreateButton;
	CreateButton* cdc2 = new CreateButton;

	cdc->CreateBtn((CDC*)&dc, m_BtnRect);
	cdc2->CreateBtn((CDC*)&dc, m_BtnRect2);
}

<CreateButton의 CreateBtn 함수>

void CreateButton::CreateBtn(CDC* pDC, CRect rect)
{
	m_BtnRect = rect;
	CRect Rect(m_BtnRect);
	Rect += CRect(1, 1, 1, 1);
	pDC->Rectangle(&Rect);
	pDC->FillSolidRect(&m_BtnRect, ::GetSysColor(COLOR_BTNFACE));
	
	if (m_bClicked)
	{
		pDC->Draw3dRect(m_BtnRect,
			::GetSysColor(COLOR_3DSHADOW),
			::GetSysColor(COLOR_3DLIGHT));
	}

	else
	{
		pDC->Draw3dRect(m_BtnRect,
			::GetSysColor(COLOR_3DLIGHT),
			::GetSysColor(COLOR_3DSHADOW));
	}

	pDC->SetBkColor(::GetSysColor(COLOR_BTNFACE));
	pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));

	if (m_bClicked)
	{
		CRect Rect = m_BtnRect;
		Rect += CRect(0, 0, 2, 2);
		pDC->DrawText(L"Test Button", &Rect,
			DT_CENTER | DT_SINGLELINE | DT_VCENTER);
	}

	else
	{
		pDC->DrawText(L"Test Button", &m_BtnRect,
			DT_CENTER | DT_SINGLELINE | DT_VCENTER);
	}
}

<CreateButton의 OnLButtonDown, Up 함수>

void CreateButton::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	if (m_BtnRect.PtInRect(point))
	{
		m_bClicked = !m_bClicked;
		RedrawWindow(&m_BtnRect);
	}
	CView::OnLButtonDown(nFlags, point);
}


void CreateButton::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	if (m_bClicked)
	{
		m_bClicked = !m_bClicked;
		RedrawWindow(&m_BtnRect);
	}

	if (m_BtnRect.PtInRect(point))
	{
		AfxMessageBox(L"버튼을 클릭했습니다.");
	}

	CView::OnLButtonUp(nFlags, point);
}