[MFC] C를 C++(MFC)로 옮겨보자 (1)

Sireal·2021년 8월 30일
0

C++/Win32/MFC

목록 보기
1/12
post-thumbnail

개념

객체지향 간단한 상식
  • 클래스 안에 함수와 변수 -> 멤버 함수, 멤버 변수
  • 프레임워크(클래스(멤버함수,멤버변수))
  • 타 클래스 간 변수 공유 못함. 그래서 파이프를 통해 연결 시켜줘야함.
MFC : C++로 제작된 GUI 라이브러리(MS) 프레임워크 (메모장, 윈도우 응용프로그램 등 에서 사용)
  • 클래스 : 특정 기능의 함수와 변수의 집합.
  • 클래스 종류 : MainFrame(메인틀), View(눈에보이는것들), Document(눈에안보이는것들) ...
    -> Document, View 구조 (Doc에서 내부함수코딩 하는 구조)

프로젝트 생성

  • 새 프로젝트 구성시, 저는 VisualStudio 2022 Preview를 사용 중이어서, 저 옵션을 체크했습니다.(안하면 버그 나올수도)
  • 여러문서 : 엑셀같은 프로그램처럼 여러페이지를 사용할 때 설정
  • 단일문서 : 메모장 같이 한 페이지만 사용할 때 설정
  • 기본스타일 설정 : MFC standard

  • 지금은 .raw만 사용하니까 파일확장명은 raw
  • 간단한 프로젝트 생성은 여기서 끝.

C 코드 붙여넣기

  • C에서 전역변수와 함수를 옮긴다.

openImage() -> Doc::OnOpenDocument()
saveImage() -> Doc::OnSaveDocument()
displayImage() -> View::OnDraw()


  • Document클래스에는 보이지않는 기능을 넣음
  • View클래스(메뉴)에는 눈에 보여주는 기능을 넣음
  • 두 클래스를 사용하려면 파이프로 서로 호출해줘야 함

클래스 뷰 : 객체지향 코딩시 필수 창

  • 클래스간 코딩시 여러 정보를 한번에 보고 코딩가능.
  • MFC는 이 친구로 코딩함

보기 -> 클래스 뷰

함수, 변수넣기 ( 클래스 뷰 )

변수 선언
  • 해당 클래스에 우클릭 후 전역변수 선언
  • Doc 에는 내부 친구, View 에는 보여주는 친구들 넣을 것임.
  • 만약에 변수나 함수를 잘못 추가했다면(오타 등등), 그 친구들 버리고, 새로운 이름의 친구들을 만들어야한다. (MFC 특성상 고치기가 정말 힘듦)
    (전역 변수 추가완료, 초기화 시켜줘야 한다.)
함수 재정의(상속하기)
  • OnOpenDocument() 만들기.
    클래스뷰 아래 지우개처럼 생긴 친구 클릭
  • 해당 함수에서 Add 로 재정의 해서 사용하면 됨
  • C를 C++에 맞게 수정 후 코드추가
  • 확실히 바뀐 부분들( 파일 열고 닫기 )
CFile rfp; // File * rfp;
rfp.Open(lpszPathName, CFile::modeRead | CFile::typeBinary); // rfp =fopne("경로", "rb");
for (int i = 0; i < m_inH; i++)
	rfp.Read(m_InputImage[i], m_inW);//fread(m_InputImage[i], sizeof(unsigned char), m_inW, rfp);
rfp.Close(); //fclose(rfp);
unsigned long fsize = rfp.GetLength();
  • OnDraw()부분 바꾸기
  • 메소드 잠금되어있던것 풀고 코드 추가* 구현코드 추가하기.
void CImageMFC1View::OnDraw(CDC* pDC)
{
	CImageMFC1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;
	// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
	int px;
	for (int i = 0; i < pDoc->m_inH; i++) {
		for (int k = 0; k < pDoc->m_inW; k++) {
			px = pDoc->m_InputImage[i][k];
			pDC->SetPixel(k + 5, i + 5, RGB(px, px, px));
		}
	}
	for (int i = 0; i < pDoc->m_inH; i++) {
		for (int k = 0; k < pDoc->m_inW; k++) {
			px = pDoc->m_OutputImage[i][k];
			pDC->SetPixel(k + pDoc->m_inH + 5, i + 5, RGB(px, px, px));
		}
	}
}
함수 선언
  • 해당 클래스에 우클릭 후 전역변수 및 함수 선언

최초 실행

(출력이 된다~!)


메뉴추가(기능추가)

  • 해당 View들을 만들어 주고 기능 부여를 해보자
  • 리소스 에서 기능을 넣어보자
  • 리소스에 ID 부여 꼭 해야한다(함수이름으로 들어간다)
  • 우클릭 후 이벤트처리기 추가하기(순서 : View에 함수추가 후 Doc에 기능부여)
  • View 클래스에서 메뉴 만드는 부분 (pDoc로 Doc와 연결돼 있다)
  • Doc 클래스에서 기능 구현

기능 구현 후 최초 실행

((위코드와 다른코드입니다~)와~ 된다!!)


profile
🚄계속 앞으로🚄

0개의 댓글