본문 바로가기
프로그래밍학습/MFC

[MFC]컨트롤 클릭 이벤트

by 해리보쉬 2021. 3. 11.
728x90
반응형

mfc가 은근히

UI짜기가 힘듭니다

그냥 힘든게 아니고 남이 짜놓은거 선배가 오랜시간 넘겨받은 것들

그리고 내가 받은거 다시 손대기가 쉽지 않습니다. 너무나 많은 리소스들이 엮여있는 경우 컨트롤이 쉽지 않습니다.

그러나 하나씩 해봅시다.

픽쳐컨트롤,그룹박스 컨트롤,텍스트 컨트롤 등의 컨트롤은 기본적으로 클릭이벤트를 제공하지 않습니다.

그래서 따로 만들어줘야합니다.

저는 픽쳐컨트롤 내 이미지를 클릭하면 최대 사이즈로 보여주게하기 위해 만들어봤습니다.

왜냐하면 픽쳐컨트롤을 클릭하고 아무리 mfc 클래스 마법사로 더블클릭이나 클릭

함수를 만들어도 그리로 들어가지 않았습니다.

그래서

더블클릭하는 경우를 따로 만들고 그떄 픽쳐컨트롤에 마우스가 위치하면 반응하는 함수로 만들었습니다.

 

// 마우스 더블 클릭 이벤트 생성 정의
void automainsinglelDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	
	if( ClickControl(IDC_IMAGElVIEW, point) )
		MessageBoxA("clicked");
	   //전체 사이즈 화면 출력 코드 추가
	else
		MessageBoxA("Outside clicked");

	CDialogEx::OnLButtonDblClk(nFlags, point);
}

// 컨트롤 클릭 상태 확인 함수
bool automainsinglelDlg::ClickControl(int IDC_TARTGET, CPoint pt)
{
	CRect rcIdcTraget;
	GetDlgItem(IDC_TARTGET)->GetWindowRect(rcIdcTraget);
	ScreenToClient(rcIdcTraget);

	if(rcIdcTraget.left < pt.x && rcIdcTraget.top < pt.y 
		&& rcIdcTraget.right > pt.x &&rcIdcTraget.bottom > pt.y)
		return true;
	else
		return false;
}

 

요렇게 해결했습니다.

픽쳐컨트롤 자체를 키워보려니 제공하는 함수도 없고 리소스를 건드리려니 겁나네요

 

 

728x90
반응형

댓글