Java 해야하는데 학교에서는 C++을 가르친다.
그리고 이번에 교수님이 C++과 MFC라이브러리를 이용한 윈도우 프로그램에 대하여 설명해 주셨다.
솔직히 조금 뜬금없었다. MFC가 뭐지? 갑자기 이걸 왜 하는거지????
궁금하여 검색해보니...
마이크로소프트 파운데이션 클래스 라이브러리
(Microsoft Foundation Class Library)는 C++용
프로그램
라이브러리이다. 윈도용 응용 프로그램의 통합 개발 환경인 마이크로소프트 비주얼 C++에 부속되는 클래스 라이브러리이다. -위키백과
이렇게 나와있다. 그냥 간단하게 C++로 GUI가 있는 윈도우 프로그램을 만드는 라이브러리라고 생각하면 될 것 같다.
아마도 교수님은 매번 검은색 콘솔창만 보면서 코딩하는 우리를 위해 GUI라는 것을 맛보게 해주고 싶으셨는지도 모른다.
MFC 라이브러리에서 사용하는 표기법을 알아보자.
MFC 표기법
1. 헝가리안 표기법
헝가리안 표기법? 여기서부터 조금 안좋은 느낌이 들었다. 내가 아는 헝가리안 표기법은 이미 몰락한.. 그 표기법이 아닌가.. 엄청 옛날에 쓰던 표기법인걸로 아는데..
아니나 다를까... 아마 옛날에 만들어진 라이브러리 같다. 이런 표기법을 쓰는 것을 보니..
2. 클래스는 모두 C로 시작한다.
3. 여러 단어가 하나의 클래스 이름일 경우 각 단어별로 첫 글자를 대문자로 표기한다.
4. 맴버 변수는 m_으로 시작하고, 맴버 변수는 대문자로 시작한다.
5. 전역 함수는 Afx라는 접두어가 붙는다.
이러한 표기법 들이 있다고 한다.
오늘은 MFC 프로젝트의 생성과, 간단한 컨트롤러들을 다루어 보려고 한다.
MFC 프로젝트를 생성하려 했는데, 설치되어 있지 않은듯 했다. 그래서 하단에 있는 '추가 도구 및 기능 설치'를 클릭하였다.
상단의 '개별 구성 요소' 클릭 후 3개 항목을 설치했다.
설치를 진행해 주었다.
설치가 완료되니 이렇게 MFC 앱 항목이 생겼다. 이걸로 선택하고 프로젝트를 만들었다.
이렇게 어플리케이션 옵션을 선택하는 창이 나오는데, 이번에는 맛만 볼 것이므로 '대화상자 기반'으로 생성하였다.
처음 실행시 이렇게 아무것도 없다. 여기서 바로 디버깅을 진행해 주면..
이렇게 기본적인 공허한 대화 상자가 출력된다.
일단 무엇을 만들기 전에 좀 더 편하게 작업하기 위해 리소스 뷰를 띄울 것이다.
'보기' -> '다른 창' -> '리소스 뷰' 혹은 Ctrl + Shift + E 를 누르면 리소스 뷰가 추가된다.
여기서 IDD_프로젝트명_DIALOG 를 누르면..
이렇게 작업하기 편한 뷰가 생성된다.
이걸 보니 C# 의 Form 이 생각난다.. 그게 좀더 세련되어 보이지만..
이제 좌측의 '도구 모음'을 선택하고 '대화 상자 편집기'를 누르면 다양한 컨트롤러들이 나온다. 일단 버튼을 추가한다. 추가할때는 그냥 드래그 앤 드롭 하면 되었기에 편리했다.
같은 방법으로 'static text' 와 'edit control' 을 추가한 뒤 적절히 배치해 주었다.
'edit control'을 하나 더 만들고, 안의 내용을 수정하였다.
내용 수정은 해당 컨트롤러를 클릭하고 우측 아래 '캡션' 에서 내용을 수정하면 된다.
나는 여기서 상단의 입력란에 어떤 텍스트를 입력하고 '확인' 버튼을 선택시 하단의 입력란에 그 텍스트가 출력되는 프로그램을 만들 것이다.
이제 버튼을 클릭했을 때의 액션을 지정해야 한다. 해당 버튼을 더블클릭 하면 자동으로 액션을 지정하는 함수로 이동된다.
근데 여기서 액션을 지정하기 전에, 상단의 입력상자에 해당하는 변수를 선언해야 한다.
입력란에 우클릭을 하고, 변수 추가를 선택한다.
범주를 값으로 바꾸고, 적당한 변수 이름을 지정한 뒤, '마침'을 선택한다.
그러면 아마 아까 버튼을 클릭했을때 이동했던 cpp 파일에
이러한 코드가 추가되었을 것이다. 이는 IDC_EDIT1(입력 상자1) 과 m_name 변수가 연결되었다고 생각하면 된다.
같은 방법으로 두번째 입력상자에도 변수를 추가해준다.
이제 다시 버튼을 클릭하여 해당 함수로 돌아간 뒤, 액션을 추가해주어야 한다.
이러한 코드를 작성했다.
void CTheory13Dlg::OnBnClickedButton1()
{
UpdateData(TRUE);
m_result = m_name;
UpdateData(FALSE);
}
UpdateData() 함수는, 컨트롤러에 어떠한 값이 변경되었을 때, 이를 갱신하고 변수에 저장하기 위한 함수라고 한다.
이때 TRUE 가 인자로 들어가면, 컨트롤러에서 변수로 값을 저장하는것이고, FALSE가 들어가면 변수에서 컨트롤러로 값을 전달하는 것이라고 한다.
이렇게 작성하고 F5를 눌러보면!
이러한 창이 열리는데 여기서 상단의 입력상자에 입력을 하고 확인을 클릭하면,
하단의 입력상자에도 값이 전달되는 것을 확인할 수 있다.
이렇게 상당히 기본적인 MFC 라이브러리의 기능들을 이용해 보았다. 근데 그닥 더 하고 싶지는 않다...
주요 Code 는 github.com/david02324/school-assignment/tree/main/MFC 에 올려두었다.
'Study > C++' 카테고리의 다른 글
[C++]예외처리(Exception Handling) (0) | 2020.12.16 |
---|---|
[C++]복사 생성자(Copy Constructor) (0) | 2020.12.15 |
[C++]연산자 중복(연산자 오버로딩) (0) | 2020.12.14 |
[C++]업캐스팅과 가상함수, 순수가상함수 (0) | 2020.12.13 |
[C++]STL Vector 자주 쓰는 기초적인 코드들 (0) | 2020.12.12 |
댓글