본문 바로가기

MFC Programming

MFC 분할 윈도우(4) - 다중 분할 윈도우 만들기 이번엔 다중 분할 윈도우 예제입니다. 앞서 만들었던 정적 분할 윈도우 예제 소스를 약간 수정만 하면 쉽게 다중 분할 윈도우를 만들 수 있습니다. ◎ CSplitterWnd 클래스의 인스턴스 생성 다중 분할 윈도우는 생성된 분할 윈도우의 위에 또 다른 분할 윈도우를 올려 놓는 것입니다. 그래서 필요한 분할 윈도우의 갯수만큼 인스턴스를 생성해야 합니다. 아래와 같이 두 개의 인스턴스를 만듭니다. CSplitterWnd m_wndSplitter1; CSplitterWnd m_wndSplitter2; 만드는 위치는 물론 CMainFrame 클래스입니다. ◎ OnCreateClient의 재정의 다음으로 OnCreateClient함수를 재정의 합니다. m_wndSplitter1을 이용해서 윈도우를 좌, 우로 나누어.. 더보기
MFC 분할 윈도우(3) - 정적 분할 윈도우 만들기 SDI기반에서 정적 분할 윈도우를 만드는 방법에 대한 간단한 예제입니다. 정적 분할 윈도우를 만드는 방법은 기본적으로 동적 분할 윈도우와 비슷합니다. ◎ 새로운 View 생성 정적 분할 윈도우는 하나의 Document에 연결된 서로 다른 뷰를 사용하기 위해 사용하는 것입니다. 다시 말해서 같은 데이터를 다른 방식으로 보여주기 위함이라고 볼 수 있겠지요. 그래서 다른 View를 하나 더 생성해야 합니다. 필요에 따라 CView나 FormView 같은 클래스의 상속을 받 아서 생성하면 되겠죠. 저는 FormView에서 상속을 받아 만들었습니다. FormView의 스타일은 Child이어야 합니다. View를 생성한 후에는 MainFrame 클래스에 Doc의 헤더파일과 생성된 뷰의 헤더파일을 인클루드 합니다. .. 더보기
MFC 분할 윈도우(2) - 동적 분할 윈도우 만들기 SDI기반에서 동적 분할 윈도우를 만드는 방법에 대한 간단한 예제입니다. 동적 분할 윈도우를 만드는 과정은 아주 간단합니다. MFC 프로그램에서 윈도우의 형태와 메뉴바 등과 관련된 부분을 담당하는 부분은 CMainFrame입니다. 분할 윈도우도 CMainFrame에서 만들어줍니다. 아래와 같이 두 과정을 거치면 쉽게 만들 수 있습니다. ◎ CSplitterWnd 클래스의 인스턴스 선언 처음해야 될 일은 분할 윈도우가 가지는 여러가지 기능을 담당하는 CSplitterWnd 클래스의 인스턴스를 선언합니다. CMainFrame의 멤버 변수로 아래와 같이 선언합니다. CSplitterWnd m_wndSplitter; ◎ OnCreateClient 함수의 재정의 프로그램 상에서 분할 윈도우의 위치는 프레임 윈도우.. 더보기
MFC 분할 윈도우(1) 분할 윈도우(Splitter Window)는 하나의 프레임 윈도우를 두 개 이상의 윈도우로 나누어 주는 기능을 하는 윈도우 입니다. 가장 대표적인 예로 아래 그림의 윈도우 탐색기를 들 수 있으며 같은 데이터를 보여주는데 보여주는 위치나 보여주는 형태가 다른 경우에 많이 사용합니다. 사용자는 분할 윈도우를 이용하여 원하는 만큼의 뷰 영역을 설정 할 수 있고, 각각의 뷰 영역에는 뷰 윈도우 뿐만 아니라 여러가지 일반 윈도우도 올라 갈 수 있습니다. 분할 윈도우에는 다음과 같이 두 가지 종류가 있습니다. ◎ 동적 분할 윈도우 - 프로그램 실행 중 윈도우를 하나로 합치거나 나눌 수 있으며 스크롤바 끝 부분에 분할바가 있습니다. 분할바를 윈도우의 한 쪽 끝까지 움직이면 나누어져있던 윈도우가 합쳐지고 끝 쪽에 있는.. 더보기
마우스 이벤트 관련 함수 정리 마우스 이벤트와 관련된 함수로 아래와 같은 것들이 있습니다. ◎ GetCursorPos 현재 마우스 커서의 위치를 얻어주는 함수이며 원형은 아래와 같습니다. GetCursorPos(LPPOINT lpPoint) CPoint 형으로 변수를 하나 선언하고 그 주소를 인자로 넣어주면 마우스 커서의 x, y 좌표를 변수에 담 아줍니다. ◎ SetCursorPos 마우스 커서를 X, Y의 위치로 이동시키는 함수이며 원형은 아래와 같습니다. SetCursorPos(int X, int Y) 인자로 넣는 x, y 좌표의 위치로 마우스 커서를 이동시켜줍니다. ◎ mouse_event 마우스와 관련된 여러가지 이벤트를 발생시키는 함수입니다. 원형은 아래와 같습니다. mouse_event( DWORD dwFlags, DWO.. 더보기
PreCreateWindow 함수의 재정의... PreCreateWindow는 MFC가 제공하는 가상함수들 중 하나로 사용자가 쉽게 재정의하여 사용이 가능합니다. 이름처럼 윈도우가 생성되기 직전에 호출되며, 생성될 윈도우에 대한 정보가 파라미터로 넘어오게 되고, 이 파라미터가 가지는 값을 이용해서 윈도우가 생성됩니다. 따라서 개발자가 윈도우의 스타일이나 속성을 변경하고 싶을때는 PreCreateWindow가 넘겨받는 파라미터를 변경시켜주면 생성되는 윈도우의 속성도 따라서 변하게 되는것입니다. 함수의 원형은 아래와 같습니다. MDI 형태의 프로젝트 일 경우, CMainFrame과 CChildFrame에서 모두 찾을 수 있습니다. BOOL PreCreateWindow(CREATESTRUCT& cs); 파라미터로 넘어오는 CREATESTRUCT는 아래와 같.. 더보기
사용자 정의 메시지의 사용법 Dialog간의 통신이나 이벤트 발생시에 많이 사용하게 되는 사용자 정의 메세지 사용법. 1. 메세지를 정의한다. - 헤더파일에 다음과 같은 형식으로 정의 #define WM_TEST_MESSAGE WM_USER+10; 2. 메세지를 통해서 호출할 함수의 원형선언 및 구현. - 메세지를 받는 쪽 Dialog의 헤더에 함수원형을 선언한다. 헤더파일의 아래쪽 // Generated message map functions이라고 주석처리된 부분 밑에 아래와 같은 형식으로 선언 afx_msg LRESULT UserMSG(WPARAM wParam, LPARAM lParam); - cpp파일에 함수구현. 3. MESSAGE MAP에 등록. - cpp파일의 메세지 맵에 등록하여 정의된 메세지와 메세지를 통해 호출할 함.. 더보기