- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Link
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[API/MFC] MFC 분할 윈도우(3) - 정적 분할 윈도우 만들기 본문
SDI기반에서 정적 분할 윈도우를 만드는 방법에 대한 간단한 예제입니다.
[출처] http://frog3147.tistory.com/entry/MFC-분할-윈도우3-정적-분할-윈도우
정적 분할 윈도우를 만드는 방법은 기본적으로 동적 분할 윈도우와 비슷합니다.
◎ 새로운 View 생성
정적 분할 윈도우는 하나의 Document에 연결된 서로 다른 뷰를 사용하기 위해 사용하는 것입니다.
다시 말해서 같은 데이터를 다른 방식으로 보여주기 위함이라고 볼 수 있겠지요.
그래서 다른 View를 하나 더 생성해야 합니다. 필요에 따라 CView나 FormView 같은 클래스의 상속을 받
아서 생성하면 되겠죠. 저는 FormView에서 상속을 받아 만들었습니다. FormView의 스타일은 Child이어야 합니다. View를 생성한 후에는 MainFrame 클래스에 Doc의 헤더파일과 생성된 뷰의 헤더파일을 인클루드 합니다. Doc의 헤더파일이 View의 헤더파일보다 위에 있어야 합니다.
#include "Splitter_StaticDoc.h"
#include "Splitter_StaticView.h"
#include "RightView.h"
◎ CSplitterWnd 클래스의 인스턴스 선언
다음은 분할 윈도우가 가지는 여러가지 기능을 담당하는 CSplitterWnd 클래스의 인스턴스를 선언합니다.
동적 분할 윈도우와 똑같은 과정입니다.
CMainFrame의 멤버 변수로 아래와 같이 선언합니다.
CSplitterWnd m_wndSplitter;
CMainFrame의 멤버 변수로 아래와 같이 선언합니다.
CSplitterWnd m_wndSplitter;
◎ OnCreateClient 함수의 재정의
프로그램 상에서 분할 윈도우의 위치는 프레임 윈도우와 뷰 윈도우의 사이가 됩니다. 따라서 프레임 윈도우의 위에 분할 윈도우가 위치해서 영역을 나누고 각각의 영역에 뷰 윈도우를 생성하여 올려지는 형태가 됩니다. OnCreateClient 함수는 클라이언트 영역이 생성될 때 호출되는 함수이며, OnCreateClient 함수를 재정의하여 영역을 분할합니다. 이 부분 역시 동적 분할과 똑같습니다만 동적 분할의 경우에는
프로그램 상에서 분할 윈도우의 위치는 프레임 윈도우와 뷰 윈도우의 사이가 됩니다. 따라서 프레임 윈도우의 위에 분할 윈도우가 위치해서 영역을 나누고 각각의 영역에 뷰 윈도우를 생성하여 올려지는 형태가 됩니다. OnCreateClient 함수는 클라이언트 영역이 생성될 때 호출되는 함수이며, OnCreateClient 함수를 재정의하여 영역을 분할합니다. 이 부분 역시 동적 분할과 똑같습니다만 동적 분할의 경우에는
CSplitterWnd 클래스의 Create함수를 이용하는 반면에 정적 분할에서는 CreateStatic함수를 이용하여
분할 윈도우를 생성하고 CreateView함수를 이용해서 분할된 각각의 영역에 사용자가 원하는 View를
할당합니다.
아래 그림과 같이 Ctrl + w로 클래스 위저드를 열고 OnCreateClient 함수를 추가합니다.
아래 그림과 같이 Ctrl + w로 클래스 위저드를 열고 OnCreateClient 함수를 추가합니다.
추가된 OnCreateClient함수에 아래와 같이 소스를 추가하고 return을 TRUE로 바꿔줍니다.
if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
TRACE0("Fail to create splitter.\n");
return FALSE;
}
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSplitter_StaticView), CSize(300, 300), pContext);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightView), CSize(300, 300), pContext);
return TRUE;
컴파일 후 실행하면 아래의 그림과 같이 정적 분할로 생성된 윈도우가 나타납니다.
CreateStatic함수의 원형은 아래와 같습니다.
BOOL CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST );
pParentWnd와 nRows, nCols만 넘겨주면 됩니다.
CreateView함수의 원형은 아래와 같으며,
virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext );
row와 col의 값에 주의해서 사용하면 됩니다.
아래는 예제 소스입니다.
[출처] http://frog3147.tistory.com/entry/MFC-분할-윈도우3-정적-분할-윈도우
'★─Programing > ☆─API | MFC' 카테고리의 다른 글
[API/MFC] GetSafeHwnd() (0) | 2011.11.03 |
---|---|
[API/MFC] CMap (0) | 2011.11.03 |
[API/MFC] MFC 분할 윈도우(2) - 동적 분할 윈도우 만들기 (0) | 2011.11.03 |
[API/MFC] MFC 분할 윈도우(1) (0) | 2011.11.03 |
[API/MFC] DestroyWindow와 PostQuitMessage (0) | 2011.11.01 |
Comments