본문 바로가기
[ Program ]/자체숙제프로젝트

1-1.윈도우폼 띄우기

by 관이119 2013. 11. 27.

<사진은 누르면 커집니다!>

 

일단 VS2010 으로 프로젝트 부터 만들어 봅시다.

 

 

 

프로그램을 실행하고 새로만들기 > 프로젝트를 눌러줍시다.

 

 

 

그러면 위와같은 창이 뜨는데 요기서 Visual C++ 탭의 MFC 에서 MFC 응용 프로그램을 선택하고

아래 이름에 프로젝트 명을 적어줍시다.

저는 TestTrans 로 정했습니다.

 

그리고 확인을 눌러주면 아래와 같이 팝업창이 뜹니다.

그럼 아래와 같이 설정해주고 다음을 누릅시다.

 

 

 

 

 

 

위와 같이 설정을 해주고 마침을 누르면 아래와 같이 이제 시작화면을 볼수 있습니다.

위설정중 유니코드 라이브러리사용 옵션같은 경우는 따로 내용을 공부를 해야합니다.

저도 어설프게 알아서 설명을 할수가 없네요.

일단은 사용하지않겠습니다!

 

유니코드와 멀티바이트에 대해서 알수있는경로들 입니다.

 

http://animal.memozee.com/articles/02-MBCS-UNICODE-kr.php

http://www.gpgstudy.com/forum/viewtopic.php?highlight=&postdays=0&postorder=asc&start=0&t=23590

http://blog.kaludin.com/2585587

http://blog.naver.com/agug?Redirect=Log&logNo=80142332861

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=69&MAEULNO=28&no=18193

 

여기저기서 글읽어보고 혼자 정리한 결론은

1.멀티바이트는 한글은 2바이트 영어는 1바이트로 표현해서 메모리상의 공간이 문자에따라 다르다.

2.유니코드는 전부 2바이트로 표현해서 어떤문자를 써도 메모리상의 공간이 일정하다.

3.유니코드와 멀티바이트에따라 MFC에서 사용하는 함수명도 다르다.

 

정도 입니다.

저정도만하고 일단 넘어갑니다.

 

 

 

일단 시작화면까지 만들었으니 실제로 실행이 잘되나 테스트부터 해봅시다.

 

위화면에 빨간색네모안의 화살표를 눌러도 되고 단축키 F5 를 눌러도 됩니다.

 

그러면 갑자기 무섭게 위와같은 팝업창이 뜹니다.

가볍게 예를 눌러줍시다.

 

 

 

그러면 위와같이 잘실행이 되는걸 확인할수 있습니다.

이제 윈폼하나 띄우는 프로그램을 완성했습니다!

무려 MFC로!

참쉽죠?.............................

 

 

 

--추가: 폼2개 띄우기-------------------------------------------------------------------------------------------------

원래는 프로그램 2개에서 서로 윈도우 메세지 주고받는것도 연습할겸 프로그램 2개로 서로 데이터를 보낼려고 했는데

그전에 언뜻잘못 생각해서 윈폼 2개에서 서로 데이터를 주고 받는걸 만들려고 생각했습니다.

그래서 이왕하는거 폼2개를 띄우는 연습도 해보기로 했습니다.

 

 

 

생성한 프로젝트의 오른쪽에 보면 솔루션에 리소스 파일이 있습니다.

저기서 리소스 파일중 TestTrans.rc 에서 마우스 우클릭해서 열기를 하거나 아니면 더블클릭을 해줍니다.

 

 

그러면 위와 같이 왼쪽에 리소스 뷰라는 곳이 열립니다.

 

 

위와같이 Dialog 폴더에서 우클릭으로 Dialog삽입 해줍니다.

 

 

그럼 위와같이 새 다이어로그 창이 생성이 됩니다.

 

 

새로 생성된 다이어로그 창(폼) 위에서 우클릭을 해서 클래스 추가를 합니다.

 

 

 

 

그러면 위와 같이 팝업창이 뜨는데 일단 클래스 이름을 test1 로 해주겠습니다.

그리고 기본클래스는 CDialog 로 변경해줍니다.

그리고 마침을 누릅니다.

 

 

그럼 이제 위와같이 헤더가 생성 됩니다.

 

이제 이걸 어떻게 추가해야 하나 가만히 생각을 해본결과 다른것들이 어떻게 만들어져있나 보고 그대로 따라하기로 합니다.

 

 

기존에 있던 다이어로그 ID 를 확인합니다.(우측하단의 속성창에서 확인할수 있습니다.)

 

 

 

그리고 ctrl + shift + f 를 눌러 전체 찾기를 열고 아이디를 찾을 내용에 넣어줍니다.

 

그러면 아래와 같이 결과 내용이 나오는데 여기서 다시 생각을 해봅니다.

 

 

 

검색된 내용중 위두개 확장자가 rc 인 파일은 리소스 파일 내에 있는 내용이므로 무시하고

 

아래 두개를 살펴보면 다음과 같습니다.

 

 

 

 

그런데 두개 파일중 Resource.h 에는 새로만든다이어로그 내용인

#define IDD_DIALOG1                     131

내용이 이미 추가 되어있습니다.

 

그래서 TestTransDlg.h 파일이 어디서 사용되나 따라가보면

TestTrans.cpp 와  TestTransDlg.cpp 에서 인클러드 하는걸 확인할수 있습니다.(그냥 그파일을 사용하겠다는 의미입니다.)

 

그러면 이제 새로 만든다이어로그도 그위치에 각각 인클러드 해줍시다.

 

 

 

 

아까 위에서 test1로 클래스를 만들었으니 test1 을 인클러드 해줍니다.

 

그리고나서 TestTransDlg.cpp 파일에서 살살 아래로 내리다보면

// TODO: 여기에 추가 초기화 작업을 추가합니다.

라고 주석이 달려있습니다.

저같은경우는 101라인이네요

초기화작업을 추가하라고 하니 새창을 띄우겠다고 추가해 봅시다.

 

 

 

  test1 *dlg = new test1;
 
  dlg->Create(IDD_DIALOG1,CWnd::GetDesktopWindow());
  dlg->ShowWindow(SW_SHOW);

 

위와같이 추가해 봅시다.

그리고 F5 를 눌러 실행하면

 

 

 

이렇게 폼이 2개가 뜹니다.

 

여기서 완료가 아니라 다이어로그 창이 닫힐때 처리가 아직 남았습니다.

메모리 누수가 된다고 하니 꼭작업해주어야하는 부분입니다.

아직 이내용은 완전히 아는 내용이 아니라 다음번에 체크해봐야겠습니다.

 

일단 리소스 화면으로 돌아가서 버튼에서 우클릭을 합니다.

 

 

그리고 이벤트처리기추가를 해줍니다.

그럼 아래와 같은 팝업창이 뜹니다.

 

 

건드리지말고 추가및편집 버튼을 눌러줍시다.

 

 

그러면 위와같이 이벤트 핸들러가 추가 되었습니다.

그러면 기존에 있던 내용은 주석으로 막고

 

 //CDialog::OnCancel();
 DestroyWindow();

 

이렇게 내용을 바꿔줍시다.

그리고 나서 다시 리소스 파일로 돌아 갑니다.

 

 

 

이번엔 위와같이 메인폼에서 우클릭해서 클래스 마법사로 들어갑니다.

 

 

그러면 위와같이 팝업창이 뜨는데 여기서 가상함수 탭을 클릭하고 왼쪽에 검색란에 post 를 검색하면

PostNcDestory 라는 이벤트가 찾아집니다.

설명도 나와있네요!(창이 소멸된 후에 호출됩니다.)

그러면 선택하고 함수추가 버튼을 눌러줍니다.

그리고 확인을 누르면 아래와 같이 이벤트가 또 추가됩니다.

 

 

위와 같은창이 뜨면 기존에 있던 내용은 또 주석으로 막아주고

 

 

//CDialog::PostNcDestroy();
 delete this;

이렇게 바꿔줍니다.

 

이렇게 새폼띄우기가 끝났습니다.

여기서말한 새폼은 모달리스 다이어로그 입니다.

기본 모달 다이어로그는

CAboutDlg dlgAbout;
dlgAbout.DoModal();

 

이런식으로 해주면 됩니다.

댓글