본문 바로가기

MFC프로그래밍

[mfc programming 2015] mfc를 시작하기 전에 알아야 할 필수 지식(헤더파일,cpp파일,클래스뷰,리소스뷰)

단계 별로 쉽게 배우는 visual c++ mfc programming 2015 책을 참고했습니다.

안녕하세요!!!!

mfc를 시작하기 전에 몇가지 지식을 알고 있으면 상당히 도움이 됩니다.

목차

     

    MFC는 사용자가 발생한 이벤트를 처리하는 프로그램의 구현입니다.

    MFC는 클래스 라이브러리로 거의 모든 이벤트에 대해서 발생되는 메세지 함수가 있기에

    이 함수들만 정의해주면 상당히 편리합니다.+_+

     

    /*내가 만든 프로그램이 시작할 때 어떤 메세지 헨들러 함수가 호출되면서 프로그램이 실행되는지, 이벤트가 발생하면 이를 캐치할 핸들러 함수를 잘 정의해주기만 하면 생각보다 쉽고 재밌는 프로그래밍 인 것 같습니다. */


     

     C언어에서는 솔루션 탐색기를 많이 사용했다면 MFC에서는 클래스뷰리소스 뷰를 많이 사용합니다.

    또한 헤더파일(.h)소스파일(.cpp)의 개념을 알아두셔야 멤버변수를 잘못 추가하거나, 헨들러함수를 잘못 추가했을때 원활한 삭제가 가능합니다.

    또한 이벤트 발생의 개념을 알아두시면 편리합니다!!

    그리고 문자열을 처리할 때는 CString 을 사용해 _T("문자 입력구간~"); 을 사용해야합니다!

    이 책은 Visual 2015버전이지만 (중요!!) Visual 2019 버전은 생성자함수에 멤버변수가 자동 초기화가 되지 않으므로 따로 생성자함수에서 초기화를 해야합니다!

    /*또한 클래스 마법사에서 헨들러함수를 추가할 경우 자신이 추가하고자 하는 클래스(ex view ,dlg ...)가 맞는지 확인해야합니다.*/

    기본적으로 이벤트가 발생할 때 특정한 기능을 구현하고 싶다면 이벤트가 발생할 때마다 호출되는 해당 메세지 헨들러를 정의해주셔야 합니다! 

    ex) 마우스가 움직일 때마다 View창에 출력을 하고 싶다면?

    =>OnDraw(CDC *pDC)함수를 통해서 View창에 무엇을 나타내고 싶은지 구현해야 한다!

    1. 헤더파일(   .h)와 소스파일(    .cpp)란?

    C나 C++에서 내가 구현한 함수를 헤더파일과 cpp파일로 분류해보지 않았다면 정말 생소한 단어들일 수 있습니다.

    위 코드에는 3개의 헤더파일과 3개의 함수가 구현된 후에 main문장이 있습니다. 코드 정체 길이는 22줄입니다.

     

    헤더파일과 함수 구현부가 길어지게 된다면 main문의 위치 파악 또한 힘들어 질 것이고, 상당히 복잡해질 것입니다. 

    내가 이 함수를 구현했는지도 다시 확인하려면 스크롤을 엄청 내려가며 찾아야 할 것입니다.

    따라서 함수들의 선언부를 따로  선언하고, 구현부 또한 따로 구현해서 최대한 main문장을 간결하게 만들 것입니다.

     

    1. 헤더파일 선언하기

    헤더 파일 클릭후 추가-> 새항목 -> 나만의 헤더파일 생성하기

    이후에 stdio.h헤더파일과, 여러 함수 선언부 선언하기!

    추가적으로 헤더파일을 만들었기에 이 헤더파일과 동일한 이름의 cpp파일 또한 만들어야합니다. 

    이때 이 cpp 파일에는 선언만 했던 함수들을 구현하면 됩니다. 또한 추가족으로 <stdio.h>등 표준 입출력헤더파일도

    선언했기 때문에 printf등 여러 함수를 사용할 수 있게 되는 것입니다.

     

    2. 헤더파일의 이름과 동일한 .cpp파일 만들기!

    이제 이 cpp파일에는 헤더파일에 선언했던 함수들을 구현해주시면 됩니다.

    이때 이 cpp파일 또한 자신이 무엇을 구현하고있는지 에 대한 정의를 해주셔야합니다.

    #include "myHeader.h"를 선언하지 않으면 cpp파일은 무용지물이 됩니다.

    이제 다시 main함수가 있는 소스파일에서, 자신이 추가로 정의한 헤더파일과 소스파일부분의 중복되는 내용을 지워준 후  #include "myHeader.h" //나 myHeader.h라는 헤더파일을 포함할거야. 여기에 내가 #include <stdio.h>랑 여러 함수를 정의해놨지~ 의 의미를 갖게 됩니다.

    중복되는 내용 지우고.
    내가 추가로 구현한 헤더파일 include!

    맨 처음 사진과 비교해봐도 적어진 것을 한눈에 볼 수 있습니다.  내가 구현한 함수는 헤더파일을 통해

    몇개를 정의했는지, 해당 함수의 구현부분이 어떤지 함수를 클릭후 우클릭-> 정의 피킹을 통해 내가 구현한 함수를 한번에 확인이 가능합니다.

    그래서 헤더파일과 cpp파일을 따로 선언하는 것입니다!!

    2. 솔루션 탐색기와 클래스 뷰, 리소스 뷰란?

    • 솔루션 탐색기

    위 사진에서 솔루션 탐색기는 우리가 흔히 C나 C++을 사용할 때 많이 사용했던  탐색기입니다.

    이 탐색기는 소스파일(.cpp)와 헤더파일(.h)로 구성되어있습니다. 

    하지만 헤더파일에 어떤 함수들이 정의되어있는지 모르기 때문에

    MFC프로그래밍을 할 경우, 클래스 뷰를 많이 사용합니다.

     

    • 클래스 뷰(별표 세개!!)

    솔루션 탐색기에서 두번째 오른쪽 칸에 클래스 뷰가 있습니다. 

    빨간 클래스명(동그라미 부분)을 클릭할 경우, 헤당 헤더파일 창이 뜨고,

    파란 색 태두리 안에있는 함수를 클릭하게 되면 해당 헤더파일을 구현한 cpp파일로 이동합니다. 

    클래스 뷰의 장점은 클래스 안에 멤버변수와 멤버함수들을 한번에 찾아내기 쉽다는 장점이 있어서 많이 솔루션 탐색기보다 많이 사용됩니다.

    (처음엔 낯설지만 계속 사용하다보면 진짜 편리합니다. 스크롤 굳이 쭉쭉안내리고 쪼금만 내려도 클래스에 정의된 함수를 찾을수 있기 때문이죠 ㅎㅎ)

    • 리소스 뷰

    리소스 뷰는 대화상자 같은 것을 이용할 때 많이 사용됩니다.

     

    Dialog안에 내가 정의했거나 초기 구현되어있는 ID값을 클릭(빨간색)할 경우 내가 추가로 구현한 대화상자가 왼쪽의 대화상자 처럼 보여집니다. 물론 이 외관을 꾸미면 반드시 이에대한 메세지 헨들러함수를 DDX기법을 통해 처리해주어야합니다.

    (클래스 마법사.ctrl+shift+x)

    아직 클래스 마법사를 모르시는 분이라면 이 마법사는 뭐든지 이어준다는 것만 알아두시면 좋습니다..

    긴 글 읽어주셔서 감사합니다.

    'MFC프로그래밍' 카테고리의 다른 글

    Mfc를 배우면서 느낀점  (2) 2022.01.06