'sdi'에 해당되는 글 1건

  1. 2008.08.07 [펌] DialogBar 구현
S/W 개발/MicroSoft2008.08.07 16:09

[원문] 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에 멤버 함수를 추가 합니다.

        뷰를 인덱스로 관리 하여 해당 뷰의 인덱스를 인자로 받아 현재 보이고 잇는 뷰를 사라지게 하고,

        바꾸어질 뷰를 보여 주는 함수 입니다..

        이 함수를 다이얼로그바의 버튼에서 호출 하면 버튼마다 보여주고 싶은 뷰를 보이도록 할 수

        있습니다..

       

설명이 제대로 됐는지 모르겠습니다..
아까 오전에 올린거는 설명이 넘 허접 하게 올려서 추후에 다시 수정 하겠습니다..
일하는중에 올리다 보니 정신이 없네요..^^; 남에세 설명 하는것도 처음이고요.....^^;

허접한 팁이었습니다..

 

소스첨부 하였습니다....

 

-----      즐거운 하루들 보내세요..^^     -----

'S/W 개발 > MicroSoft' 카테고리의 다른 글

MFC 자주 쓰이는 녀석들  (0) 2008.09.05
[펌] DialogBar 구현  (0) 2008.08.07
클래스간 포인터 얻기  (0) 2007.12.06
임의의 클래스의 포인터 얻기  (0) 2007.12.06
Posted by 가희나희아빠 희자매(가희나희)아빠
TAG , ,

티스토리 툴바