목록MFC (11)
삽이 부서질 때까지 삽질
전 글에서 언급했던 두 개의 도큐먼트 타입을 지원하는걸 만들어볼게요.맛보기 1 글에서 사용했던 프로젝트를 사용하니 없으시면 그 글을 보시고 만드시면 되겠습니다.[MDI 맛보기 1 글 보러가기] 먼저 글자 이외에 클릭하면 원을 찍는 새로운 도큐먼트를 만들어볼게요.MFC 클래스를 추가해주세요. 새로운 도큐먼트니 CDocument와 View가 필요하겠죠. 원을 저장하는 CircleDoc.h에서 CArray 를 만들어주고 CircleDoc.cpp 에서 초기화를 해줍니다. CircleView.cpp 에 왼쪽 클릭하면 발생하는 메세지 핸들러를 추가하고 좌표를 저장하는 코드를 작성합니다.그리고 OnDraw에 원을 출력하는 코드를 작성합니다. 리소스 뷰 전환 후 String에 IDR_Circle_Type 를 추가합니다..
MDI 에 대해서 찾아보면 복잡해서 잘 사용을 안한다고 하네요... ㅋㅋㅋ심지어 MSDN 에 보면... 이런 글이... MDI가 두개의 도큐먼트 템플릿을 가질 때 이렇게 된다고 하네요. 저 구성도를 MDITest 창으로 보면 이렇게 되겠네요.[MFC MDI 맛보기 1 글 보러가기] 템플릿 1:1에서 쓴글이 템플릿 1:2 에서도 똑같이 써지는걸 알 수 있죠.첫번째 그림 오른쪽 도큐먼트 템플릿처럼 되어 있는 경우 같네요.[틀리면 지적해주세요!! 혼자 독학하다보니...] 다음에는 두개의 도큐먼트 타입을 생성해볼게요.
지금까진 Single Document Interface 를 사용했다면 지금은 Multiple Document Interface 를 사용해볼게요.가장 간단히 할 수 있는 뷰에 글자를 써보죠!! 다중 문서로 작업하기 위해서 설정이 약간 바뀌었다. 응용 프로그램 종류 다중 문서 중 탭 문서해제 문서 템플릿 속성 파일 확장명 mdi 사용자 인터페이스 기능 클래식 메뉴 사용도킹 가능한 클래식 도구 모음 고급 기능 인쇄 및 인쇄 미리 보기를 제외하고 해제 다중 창에서 입력하기 위해서 MDITestDoc.h 에 CArray를 추가하고 MDITestDoc.cpp 에 OnNewDocument에서 초기화를 하자.[프로젝트 이름이 MDITest 입니다. 여기는 사용자 프로젝트 이름에 따라 변할 수 있습니다.] 그리고 글자를..
이전 글을 가지고 정적 분할 윈도우를 제작해보겠습니다. [동적 분할 윈도우 글 보러 가기] 왼쪽에는 마우스 클릭으로 원을 그리고, 오른쪽에는 글자를 입력하게 제작해보겠습니다. SplitDocumentDoc.h 에 문자열을 저장하기 위한 CArray를 선언하고 SplitDocumentDoc.cpp 에서 초기화 시켜줍니다. 키보드 입력 받는 클래스를 추가하겠습니다.이때 c++ 클래스 추가가 아닌 MFC 클래스 추가해야합니다!! 그리고 글자를 쓰기 위한 메세지 핸들러 WM_CHAR 를 추가한 뒤 코드를 작성합니다. 그리고 화면에 글자를 출력하도록 OnDraw에 작성합니다. 그리고 MainFrm.cpp 에 OnCreateClient 함수를 수정해서 정적 분할 윈도우로 만든다. 이때 CreateStatic에서 가..
클릭한 곳에 도형이 생기고 화면이 분할이 되도록 만들어보자.응용 프로그램 종류 단일 문서프로젝트 스타일 : MFC 표준비주얼 스타일 전환 사용 사용자 인터페이스 기능 클래식 메뉴 사용도킹 가능한 클래식 도구 모음 사용분할 창 고급 기능 인쇄 및 인쇄 미리 보기 클릭한 곳에 도형이 생기게 좌표를 저장하는 변수를 추가하자. 생성이 될 때 초기화 되도록~ 왼쪽 클릭하면 도형이 생기도록 코드를 추가하자. 분할 윈도우를 사용하면 뷰가 두 개 이상이 되기 때문에 Invalidate 대신 UpdateAllViews 함수를 이용해 모든 뷰가 화면을 갱신하게 만들어야한다. 마지막으로 출력하게 하는 OnDraw에 출력되게 만든다.
응용 프로그램 종류 단일 문서프로젝트 스타일 : MFC 표준비주얼 스타일 전환 사용 문서 템플릿 속성 파일 확장명 : sdi 사용자 인터페이스 기능 클래식 메뉴 사용도킹 가능한 클래식 도구 모음 사용 고급 기능 인쇄 및 인쇄 미리 보기만 체크 vs2013 이상에서는 안해도 되지만 vs2010 이나 vs2012 을 사용하면 CoInitialize 함수를 추가해줘야 문서 파일을 마우스로 클릭해서 프로그램을 실행할 경우 에러가 발생하지 않는다고 한다.. [이 에러 때문에 많은 고생을...] sdi 확장명으로 저장했다가 키거나 아니면 드래그 앤 드롭을 하여 파일을 열면 저장한 이름으로 열리는 것을 확인할 수 있다.[제목 없음으로 저장한 뒤 열면 이렇게~] [이렇게도 뜨기도하고] 이제 SDI 에서 부가적인 기능을..
뭐... 이건 귀찮으니 전에 했던 예제로 바꿔보죠. [[MFC] 파일 저장 및 읽기(직렬화)] 기본 저장 방식은 파일인데 이걸 확장 메타파일 형식으로 바꾸려면 프로젝트 생성때 템플릿 속성에서 파일 형식에 emf로 주면 됩니다. 템플릿을 저장할 때 파일 형식을 emf 로 저장만 하면 끝난다.
간단하게 입력한 글자와 스타일 저장하는 예제를 만들볼게요. 뷰에서 도큐먼트 객체과 관리하기 때문에 [이름]DOC.h 에서 관리를 합니다.저는 FileIOTest로 지어서 FileIOTest.Doc.h 입니다. OnNewDocument 에서 변수를 초기화 하자[OnNewDocument 는 파일을 새로만들기 했을 경우 자동으로 호출하는 함수이다.] 클래스 뷰에서 CFileIOTestView 에 WM_CHAR 메세지를 추가한다. 입력한 글자를 도큐먼트 객체에 저장하기 위해서 GetDocument 함수를 이용해 도큐먼트 객체의 주소를 가져오고, SetModifiedFlag 함수로 데이터가 수정된걸 도큐먼트 객체에 알린다. 마지막에는 Invalidate 함수를 사용해 WM_PAINT 메세지를 발생시킨다. 준비가 ..
메뉴를 생성을 알아봤으니 이제 해당 명령어를 처리하는 것에 대해서 공부해볼게요. 기존 메뉴에 list 라는 최상위 메뉴를 추가한 뒤 아래는 폰트 1, 2, 3 을 추가하고 ID는 ID_LIST1 ,2, 3 을 할당했어요. 그리고 폰트에 색을 주는 간단한걸 구현할거라 CChildView.h 에 COLOREF 변수를 추가할게요. 그리고 생성자에서는 색을 초기화 합니다. 메뉴에 이벤트를 할당할건데 이건 클래스 뷰에서 CChildView 에 오른쪽 클릭을 한 뒤 속성을 들어갑니다.그리고 이벤트 창(번개모양)을 클릭하시면 추가된 ID를 볼 수 있습니다. 여기서 우리가 추가한 ID_LIST 1 ~ 3 을 +를 눌러 확장하시고 커멘드를 눌러 추가하기를 누르시면 자동으로 ChildView.cpp 에 명령 핸들러가 추가..
먼저 MFC 응용프로그램 프로젝트를 생성하고 설정 옵션은 아래와 같습니다. 단계 변경 사항 응용 프로그램 종류 '단일 문서' 선택'문서/뷰 아키텍처 지원' 해제'비주얼 스타일 전환 사용' 해제 데이터베이스 지원 변경 사항 없음 사용자 인터페이스 기능 '클레식 메뉴 사용' 선택 고급 기능 모든 옵션 해제 메뉴 생성하는 방법은 두가지가 있어요. 1. 리소스를 이용한 메뉴 생성2. 코드를 이용한 메뉴 생성 먼저 리소스 를 이용한 메뉴 생성법에 대해서 알아 볼게요. 1. 클래스 뷰에서 오른쪽 클릭한 뒤 추가에 리소스를 누르고2. 메뉴를 추가 하면 됩니다. 그러면 아래 그림과같이 자동으로 메뉴에 ID가 추가가되고 IntiInstance 함수에는 IDR_MAINFRAME 이 추가가 되어있습니다. 여기서 보이는 Lo..