[원문] http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=60&MAEULNo=23&no=234&ref=234
구현 내용은 다이얼로그바에서 버튼을 틀릭 하면 뷰가 변경되는 기능을 구현 하엿으며,
뷰 스위칭 하는 소스는 데브피아에서 참고 하여 작성 하엿습니다..
프로젝트는 CE MFC(exe)의 뷰의 Base Class를 CFormView기반으로 시작 하엿습니다..
나중에 뷰 스위칭을
위해서요..^^
1. CDialogBar를 상속 받은 파생 클래스를 제작 합니다. 클래스명은 CDlgBar이고요..^^
---클래스 생성시
위져드에 보면 CDialogBar 가 Base class 에 포함 되어 있지 않기 때문에
CDialog
를 상속 받아 클래스를 만든 다음 부모 클래스를 CDialogBar로 바꾸어 주어야 합니다..
그리고 리소스에서 다이얼로그 의 스타일을 Child로 바꾸어 줍니다..
- 생성된 클래스에 Create 함수를 두개 구현 합니다..
필요한거 하나만 구현 하여 사용 하셔도 됩니다..^^
2. 다이얼로그바 활성화 시키기
--
다이얼로그바 클래스를 만들고 MainFrame에서 바로 생성 하여 사용 할려면 버튼이
활성화 되지 않는 현상이 생기게 됩니다..
해서
ON_UPDATE_COMMAND_UI 메시지 핸들러 함수를 설치하셔야 합니다..
이녀석 또한 위져드에서 보이지가 않더군요...
메시지 맵에 직접 추가해 주었습니다..
메시지 핸들러 함수는
afx_msg void OnUpDateCmdUi(CCmdUI *pCmdUI );
BEGIN_MESSAGE_MAP에는
ON_UPDATE_COMMAND_UI(IDC_DLGBAR_BTN1, OnUpDateCmdUi)
핸들러 함수 구현은
void CDlgBar::OnUpDateCmdUi(CCmdUI *pCmdUI )
{
pCmdUI->Enable(TRUE);
}
이와 같이 등록 하여 줍니다..
이 ON_UPDATE_COMMAND_UI매크로를 이용하여 COMMAND ID 와 메시지 핸들러 함수를 연결해 두면
그 COMMAND ID를 갖는 사용자 인터페이스가 갱신되어야 할 필요가 있을때마다
그 함수가 호출됩니다.
- 이렇게 하여 다이얼로그바의 컨트롤을 (예제에서는 버튼) 을 활성화 하게 됩니다.
3. 다이얼로그바 생성
CDlgBar를 MainFrame의 멤버 변수로 선언 하고 ,
MainFrame의 OnCreate함수 에서 아래와 같이 다이얼로그바를 생성해 줍니다..
이렇게
하면 다이얼 로그바가 생성 됩니다..
다이얼로그바의
버튼 클릭시 하고 싶은 행동은 다이얼로그바의 클래스에서 해주시면 되겟죠..??^^
------------------ 이렇게 해서 다이얼로그바는 생성을 마쳤습니다... ----------------------
그럼
다이얼 로그바의 버튼을 클릭 할때 버튼 마다 다른 뷰를 보여 주는 기능을 구현 해
보도록 하죠..
데브피아에서 찿은 CE에서 뷰 스위칭 하는 소스를 가지고 사용 하엿습니다..^^;
1. 일단 메인뷰가 아닌 교체될 뷰를 생성 해야 겠죠??
제가
만든 예제에서는 두개를 생성 햇습니다..
- 먼저 리소스에서
다이얼로그를 하나 insert합니다.
- 그다음 속성에서 style과 border를 각각 Child와 None으로 줍니다.
- 그런 다음 Ctrl+W로 위져드를 열면 클래스를 생성할것이냐고 뭍습니다..그럼 OK하고 ,
- 클래스 이름을 넣어 주시고 , Base Class 를 다이얼로그가 아닌 CFormView로 하여
클래스를 생성 합니다.
- 그럼 뷰 클래스 하나가 생성 되엇습니다..
- 만든 뷰에서 어떤 작업을 하고 싶으면 만들어진 클래스에서 작업 하시면 됩니다..^^
2.
교체되어질 뷰가 만들어 졌으니 이제 교체를 해보겟습니다..
-
먼저 뷰를 담을 배열을 하나 선언 합니다..
CView* m_pViewArray[MAX_VIEW_CNT];
CView * 타입의 변수 입니다.. MAX_VIEW_CNT는 define된 배열의 개수 이고요
이녀석을 생성자에서 초기화 해줍니다..
- 그담에 MainFrame에 멤버 함수를 추가 합니다.
뷰를 인덱스로 관리 하여 해당 뷰의 인덱스를 인자로 받아 현재 보이고 잇는 뷰를 사라지게 하고,
바꾸어질 뷰를 보여 주는 함수 입니다..
이 함수를 다이얼로그바의 버튼에서 호출 하면 버튼마다 보여주고 싶은 뷰를 보이도록 할 수
있습니다..
설명이
제대로 됐는지 모르겠습니다..
아까 오전에 올린거는 설명이 넘 허접 하게 올려서
추후에 다시 수정 하겠습니다..
일하는중에 올리다 보니 정신이 없네요..^^; 남에세
설명 하는것도 처음이고요.....^^;
허접한 팁이었습니다..
소스첨부 하였습니다....
----- 즐거운 하루들 보내세요..^^ -----
'1.소프트웨어 이야기 > 01.MFC(Visual Studio)' 카테고리의 다른 글
MFC 자주 쓰이는 녀석들 (0) | 2008.09.05 |
---|---|
클래스간 포인터 얻기 (0) | 2007.12.06 |
임의의 클래스의 포인터 얻기 (0) | 2007.12.06 |