임의의 클래스의 포인터 얻기

 

 Visual C++로 프로그램을 작성하고자 할 때, 가장 먼저 막히는 부분 중의 하나가 어떤 클래스 인스턴스의 포인터를 얻는 것이죠. 일반적으로 뷰 클래스를 가장 많이 다루게 되고, 그 다음이 도큐먼트 클래스, 그 다음이 메인 프레임 클래스 순일 것입니다. 그리고 거의 변경할 필요가 없는 애플리케이션 클래스도 있구요.

 물론 사용자가 만든 클래스나 버튼 같은 컨트롤에 관련된 클래스에 접근해야 할 경우도 있는데, 그럴 때 초보자는 막막해 질 수밖에 없습니다. 경험담이기도 하죠.

  여기서는 그러한 경우의 각 클래스의 포인터를 얻는 경우에 관해 알아봅니다.여기서는 프로젝트 이름이 Test라고 가정하죠. 사용자에 따라 프로젝트의 이름이 다르겠죠?

 그리고 중간에 참조되는 모든 클래스의 헤더파일이 인클루드 되어야 하구요. 뷰의 헤더가 인클루드 된다면 반드시 그 앞에 도큐먼트의 헤더가 인클루드 되어야 합니다.

 일반적인 SDI 프로그램에서.  

 

1.애플리케이션 클래스의 포인터를 얻을 때

함수를 사용합니다.

 

2.메인 프레임 클래스의 포인터를 얻을 때

함수를 사용합니다.

 이들 두 함수는 MFC의 전역함수로써 프로그램을 작성하는 도중 어디에서나 사용할 수 있습니다. MFC에서는 Afx~로 시작하는 함수들은 모두 전역함수를 의미합니다.

 물론 타입 캐스팅을 해야 하구요. 사용법은 다음과 같습니다.

이렇게 써준 다음에는 pApp와 pFr은 각각 애플리케이션 클래스와 메인 프레임 클래스의 인스턴스 포인터를 가리키게 됩니다.

 이 외에 뷰 클래스에서 그 뷰를 둘러싸고 있는 프레임 윈도우를 참조할 때는

함수를 사용할 수 있습니다. 물론 뷰 클래스뿐만이 아니라 일반적인 윈도우를 둘러싸는 틀로써 프레임 윈도우가 사용될 수 있기 때문에 GetParentFrame() 함수는 CWnd() 클래스의 멤버함수로 되어있습니다.

 이 함수와 AfxGetMainWnd() 함수는 SDI에서는 같은 기능을 하지만, MDI에서는 메인 프레임 윈도우와 뷰를 둘러싸고 있는 프레임 윈도우가 다르기 때문에 그 각각을 구하는 역할을 합니다.

 

3.도큐먼트 클래스의 포인터를 얻을 때는 몇 가지 경우가 있습니다.

 

4. 뷰 클래스의 포인터를 얻을 경우.

 

        CTestView *pView = (CTestView *)((CMainFrame *)AfxGetMainWnd())->m_wndSplitter.GetPane(0,1);

- the end of this article -