소연의_개발일지
article thumbnail

 

라인에딧 값을 가져와서 검은 원을 그리는 코드를 그리며 공부해 보았다.

 

 

전체 코드

using namespace std;

void CProDrawCircleDlg::OnBnClickedButton1()
{
	CClientDC dc(this);
	

	// 라인에딧 값 가져오기 = 원의 반지름 가져오기
	CString mText;
	mEdit.GetWindowText(mText);
	int r = _wtoi(mText.GetBuffer()); // 반지름
	mText.ReleaseBuffer();
	
	cout << r << endl; // 출력 확인용

	// 다이얼로그의 클라이언트 영역의 크기와 위치를 얻기
	CRect rect;
	GetClientRect(&rect);

	// 원의 중심을 다이얼로그의 중앙으로 설정
	int centerX = rect.Width() / 2;
	int centerY = rect.Height() / 2;
	int radius = r;

	// 화면 칠하기
	dc.FillSolidRect(&rect, RGB(255, 255, 255));

	// 원의 테두리 두께를 설정
	int penWidth = 5;

	// 검은 원 그리기
	CBrush blackBrush(RGB(0, 0, 0));
	CBrush* oldBrush = dc.SelectObject(&blackBrush);
	dc.Ellipse(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
	dc.SelectObject(oldBrush);

	//// 노란색 테두리 그리기
	//CPen yellowPen(PS_SOLID, penWidth, RGB(255, 255, 0));
	//CPen* oldPen = dc.SelectObject(&yellowPen);
	//dc.Ellipse(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
	//dc.SelectObject(oldPen);
}

 

왼쪽 도구상자에서 버튼, 에딧 컨트롤, 스태틱 텍스트를 가져와서 다이얼로그 하단에 넣는다.

 

버튼을 더블클릭 해서 클릭 이벤트 함수 생성한다.

 

 

출력 확인을 위해 헤더에 아래와 같이 코드를 넣는다.

 

#ifdef _DEBUG
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
#endif
#include <iostream>

코드 설명

using namespace std;

cout 출력에 사용되는 std를 축약하기 위해 함수 위에 넣었다.

 

CClientDC dc(this);

CClientDC dc(this);

함수 내에 그림을 그리는 CClientDC 클래스를 생성한다. 이 클래스는 주로 다이얼로그나 윈도우의 클라이언트 영역에 그림을 그리는데 사용된다. 이 클래스의 객체는 해당 윈도우의 클라이언트 영역에 직접 그림을 그리기 위 그래픽 디바이스 컨텍스트를 제공한다.

this: 현재 클래스(대개는 CDialog 파생 클래스)의 포인터이다. 현재 다이얼로그의 클라이언트 영역에 그림을 그리기 위해 사용된다.

 

 

라인에딧의 함수를 생성해 준다. 쉬운 방법으로 라인에딧 우클릭 - 클래스 마법사 - 멤버 변수에 들어간다.

라인에딧의 ID를 확인하고 더블클릭 혹은 변수 추가를 해서 변수를 추가해 준다.

 

생성된 변수는 헤더 맨 마지막에 추가된 모습을 확인할 수 있다.

 

라인에딧 값 가져오기

// 라인에딧 값 가져오기 = 원의 반지름 가져오기
	CString mText;
	mEdit.GetWindowText(mText);
	int r = _wtoi(mText.GetBuffer()); // 반지름
	mText.ReleaseBuffer();
	
	cout << r << endl; // 출력 확인용

라인에딧에 쓴 값을 가져오기 위해 Cstring 변수를 선언해 준 후 

GetWindowText 메서드를 사용하여 값을 가져온다.

그리고 _wtoi를 사용하여 int형으로변환해 준다.

 

 

참고 링크

http://www.tipssoft.com/bulletin/board.php?bo_table=story&wr_id=3496 

 

팁스소프트 > 우리들 이야기 > 0730(목) 강좌 리뷰~

함수 vs 매크로 함수 : 함수는 분기(call)가 일어나서 실행된다.매크로 : 매크로에 지정된 루틴이 매크로가 사용된 지점(inline 키워드 사용)에 치환된다. 성능차이   -    Size      :      Speed

www.tipssoft.com

 

// 다이얼로그의 클라이언트 영역의 크기와 위치를 얻기
	CRect rect;
	GetClientRect(&rect);

다이얼로그의 클라이언트 영역의 크기와 위치를 얻기 위해 rect 객채를 생성한 후

GetClientRect 함수를 사용한다. 이 함수는 다이얼로그의 클라이언트 영역의 크기와 위치를 CRect 객체로 반환한다.

 

// 원의 중심을 다이얼로그의 중앙으로 설정
	int centerX = rect.Width() / 2;
	int centerY = rect.Height() / 2;
	int radius = r;

원의 중심을 다이얼로그의 중앙으로 설정한다.

 

 

// 화면 칠하기
	dc.FillSolidRect(&rect, RGB(255, 255, 255));

화면을 하얗게 칠하기 위해 FillSolidRect함수를 사용한다.

이 함수는 지정된 색상으로 지정된 영역을 채워준다.

 

// 검은 원 그리기
	CBrush blackBrush(RGB(0, 0, 0));
	CBrush* oldBrush = dc.SelectObject(&blackBrush);
	dc.Ellipse(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
	dc.SelectObject(oldBrush);

검은 원 그리기 

  • CBrush: GDI 브러시 오브젝트를 나타내는 MFC 클래스이다. 여기에서는 검은색 브러시를 생성한다. RGB(0, 0, 0)은 검은색을 나타낸다.
  • SelectObject: CDC 클래스의 멤버 함수로, 그리기 도구(펜, 브러시 등)를 선택한다. 기존에 사용되던 브러시를 oldBrush에 저장하고, 새로운 브러시를 blackBrush로 선택한다.
  • Ellipse: 원 또는 타원을 그리는 CDC 클래스의 멤버 함수이다. 주어진 좌표를 사용하여 원을 그린다.
  • SelectObject: 그리기 도구를 원래대로 복구한다. oldBrush에 저장된 원래의 브러시로 돌아온다.

 

이클립스 함수

 

BOOL Ellipse(
  [in] HDC hdc, // 디바이스 컨텍스트에 대한 핸들
  [in] int left, // 경계 사각형의 왼쪽 위 모서리에 있는 논리 좌표의 x 좌표
  [in] int top, // 경계 사각형의 왼쪽 위 모서리에 있는 논리 좌표의 y 좌표
  [in] int right, // 경계 사각형의 오른쪽 아래 모서리에 있는 논리 좌표의 x 좌표입니다.
  [in] int bottom // 경계 사각형의 오른쪽 아래 모서리에 있는 논리 좌표의 y 좌표입니다.
);

 

 

그리고 이 프로젝트를 실행하면

입력값 반지름에 따라 다르게 원이 생성되는 모습을 볼 수 있다.

 

 

 

 


 

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!