[펌] SDI, MDI 시 각종 포인터 얻기
| SDI, MDI 시 각종 포인터 얻기 |
|
| Window Programming | 2006/07/10 (월) 19:08 |
| |||
|
[ 뷰클래스의 포인터 받기 ]
1) SDI의 경우 CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd(); CTempView *pView = (CTempView *)pMainFrame->GetActiveView(); 2) MDI의 경우 CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd(); CChildFrame *pChild = (CChildFrame *)pMainFrame->GetActiveFrame(); CTempView *pView = (CTempView *)pChild->GetActiveView(); --------------------------------------------------------------------------- 결국 출발점은 AfxGetMainWnd()함수입니다. 그런데, AfxGetMainWnd() 함수는 메인 스레드가 아닌 곳에서 호출하면 메인 프레임의 포인터를 리턴하지는 않습니다. 다른 스레드에서 메인 프레임에 접근해야 한다면 인자로 잘 넘기거나 AfxGetApp()->m_pMainWnd 를 사용해야 합니다. 다시 정리하면.. == SDI의 경우 === 어플리케이션 클래스 1) CXXXXApp *pAPP = (CXXXXApp *)AfxGetApp(); 메인플레임 클래스 얻기 1) CMainFrame *pMainFrame =(CMainFrame*) AfxGetApp()->m_pMainWnd; View클래스 얻기 1) 메인플레임 클래스를 먼저 얻음. 2) CXXXXView *pView = (CXXXXView *)pMainFrame->GetActiveView(); Document 클래스 얻기 1) 메인플레임 클래스를 먼저 얻음. 2) CXXXXDoc *pDoc = (CXXXXDoc *)pMainFrame->GetActiveDocument(); == MDI의 경우 === 차일드플레임 클래스 얻기 1) 메인플레임 클래스를 먼저 얻음. 2) CChildFrame *pChild = (CChildFrame *)pMainFrame->GetActiveFrame(); View클래스 얻기 1) 메인플레임 클래스를 먼저 얻음. 2) 차일드프래임 클래스를 얻음 3) CXXXXView *pView = (CXXXXView *)pChild->GetActiveView(); Document 클래스 얻기 1) 메인플레임 클래스를 먼저 얻음. 2) 차일드프래임 클래스를 얻음 3) CXXXXDoc *pDoc = (CXXXXDoc *)pChild->GetActiveDocument(); MDI Class별 참조 방법
CWinApp 참조 CMyProgMdiApp *pApp = (CMyProgMdiApp *) AfxGetApp( );
CMainFrame 참조 CMainFrame *pFrame = (CMainFrame *) AfxGetMainWnd( );
View에서 다른 Class 참조 // View가 포함된 도큐먼트 참조
CDocument *pDoc = (CDocument*) GetDocument(); // View가 포함된 자식 프레임 참조 CFrameWnd *pFrame = (CFrameWnd*)GetParentFrame(); Document에 포함된 View 참조 // GetFirstViewPosition() & GetNextView(pos) 이용
POSITION pos = GetFirstViewPosition(); Cview *pView = GetNextView(pos); // CDocment의 멤버 변수 m_viewList 이용 // M_viewList : CDocment Class의 View 포인터를 저장하는 멤버 변수 CView *pView = m_viewList.GetHead(); Document가 포함된 Frame 참조 // 단일 원도우 경우 AfxGetMainFrame()를사용하면 되지만 다중 도큐먼트일
// 경우는 뷰를 먼저 얻고 다시 뷰가 포함된 프레임을 참조 해야한다. CFrameWnd *pFrame = (CFrameWnd*) GetNextView(pos)->GetParentFrame(); Frame 원도우에 포함된 Active View 참조 CView *pView = GetActiveView();
Frame 원도우에 포함된 Active Document 참조 CDocument *pDoc = GetActiveDocument();
프레임 원도우 참조 // 다큐먼트 템플릿 참조(CWinApp)
POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate *pDoctemplate = GetNextTemplate(pos); // 도규먼트 참조(CDocTemplate) POSITION pos = GetFirstDocPosition(); CDocument *pDoc = GetNextDoc(pos); // 뷰 참조(CDocument) POSITION pos = GetFirstViewPosition(); CDocument *pView = GetNextView(pos); 프로그램 예 CWinApp *pApp =AfxGetApp(); POSITION posTemplate =pApp->GetFirstTemplatePosition(); While(posTemplate) { CDocTemplate *pTemplate = pApp->GetFirstDocTemplate (posTemplate); POSITION posDoc = pTemplate->GetFirstDocPosition(); while(posDoc) { Cdocument *pDoc = pTemplate->GetNextDoc(posDoc); POSTION posView = pDoc->GetFirstViewPosition(); while(posView) { Cview *pView = pDoc->GetNextView(posView); pView->Invalidate(); } } } |
"Programming" 분류의 다른 글
| [PHP] php 내부에서 외부 html(http 이용) 파일 불러오기 | 2008/11/06 |
| [iPhone] SNUH Food v1.0 | 2010/05/09 |
| [HTML] Div 속성 | 2008/03/28 |
| [C#] UserControl Toolbar 등록 문제 | 2009/04/23 |
| [C#/ASP.NET] 실행 도메인 설정 / 403 에러 | 2009/04/27 |
Programming
2009/02/24 08:40




댓글을 달아 주세요