123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #pragma once
- #include "ChildFrm.h"
- typedef struct _TabView_ {
- // 窗口名称;
- TCHAR szName[MAX_PATH] = { 0 };
- // 窗口句柄;
- CWnd* pViewWnd = NULL;
- // 下一个窗口;
- _TabView_* pNextTab = NULL;
- }TABVIEW, * pTABVIEW;
- class CChildFrameList
- {
- // Template创建的Doc;
- static CDocument* m_pCurrentDoc;
- // MainFrame对象;
- static CFrameWnd* m_pCurrentFrame;
- public:
- CChildFrameList() { };
- virtual ~CChildFrameList() {};
- // 队列头指针;
- static TABVIEW* m_pChildViewHead;
- public:
- // 初始化;
- inline static void Init(CFrameWnd* pCurrentFrame, CDocument* pDoc) { m_pCurrentFrame = pCurrentFrame;m_pCurrentDoc = pDoc; };
- // 获取视图名称;
- static TCHAR* GetViewName(const CWnd* pViewWnd)
- {
- if (!pViewWnd || !m_pChildViewHead)
- return NULL;
- TABVIEW* pTabView = m_pChildViewHead;
- do
- {
- if (pViewWnd == pTabView->pViewWnd)
- return pTabView->szName;
- pTabView = pTabView->pNextTab;
- } while (pTabView);
- return NULL;
- }
- // 获取视图窗口句柄;
- static CWnd* GetViewWnd(const TCHAR* pViewName)
- {
- if (!pViewName || !m_pChildViewHead)
- return NULL;
- TABVIEW* pTabView = m_pChildViewHead;
- do
- {
- // 注意如果是中文比较,该函数是否会有问题;
- if (_tcsicmp(pViewName, pTabView->szName) == 0)
- return pTabView->pViewWnd;
- pTabView = pTabView->pNextTab;
- } while (pTabView);
- return NULL;
- }
- // 添加新的视图窗口;
- static void AppendView(const TCHAR* pszViewName, CRuntimeClass* pNewViewClass, UINT nIcon, UINT nID)
- {
- CChildFrame* pViewWnd = (CChildFrame*)GetViewWnd(pszViewName);
- // 已存在;
- if (pViewWnd) {
- pViewWnd->MDIActivate();
- return;
- }
- pViewWnd = new CChildFrame();
- if (pViewWnd)
- {
- TABVIEW* pNewView = new TABVIEW();
- if (pNewView == NULL) {
- delete pViewWnd;
- return;
- }
- // 视图窗口;
- CCreateContext context;
- context.m_pLastView = NULL;
- context.m_pCurrentFrame = m_pCurrentFrame;
- context.m_pCurrentDoc = m_pCurrentDoc;
- context.m_pNewViewClass = pNewViewClass;
- context.m_pNewDocTemplate = m_pCurrentDoc->GetDocTemplate();
- if (!pViewWnd->LoadFrame(nID, WS_MAXIMIZEBOX | WS_CHILDWINDOW, m_pCurrentFrame, &context)) {
- delete pViewWnd;
- return;
- }
- pNewView->pViewWnd = (CWnd*)pViewWnd;
- memcpy(pNewView->szName, pszViewName, MAX_PATH);
- pNewView->pNextTab = (TABVIEW*)m_pChildViewHead;
- m_pChildViewHead = pNewView;
- pViewWnd->InitialUpdateFrame(NULL, true); //真正创建
- //pViewWnd->ShowWindow(SW_MAXIMIZE);
- //pViewWnd->MDIMaximize();
- }
- }
- static void CloseView(const TCHAR* pszViewName)
- {
- if (!pszViewName || !m_pChildViewHead)
- return;
- // 查找视图;
- TABVIEW* pLastTab = NULL, * pTabView = m_pChildViewHead;
- do
- {
- if (_tcsicmp(pTabView->szName, pszViewName) == 0) {
- pTabView->pViewWnd->SendMessage(WM_CLOSE);
- if (pLastTab == NULL)
- m_pChildViewHead = pTabView->pNextTab;
- else
- pLastTab->pNextTab = pTabView->pNextTab;
- // 删除对象;
- delete pTabView; pTabView = NULL;
- break;
- }
- pLastTab = pTabView;
- pTabView = pTabView->pNextTab;
- } while (pTabView);
- }
- static void CloseView(CWnd* pViewWnd)
- {
- if (!pViewWnd || !m_pChildViewHead)
- return;
- // 查找视图;
- TABVIEW* pLastTab = NULL, * pTabView = m_pChildViewHead;
- do
- {
- if (pTabView->pViewWnd == pViewWnd) {
- pTabView->pViewWnd->SendMessage(WM_CLOSE);
- if (pLastTab == NULL)
- m_pChildViewHead = pTabView->pNextTab;
- else
- pLastTab->pNextTab = pTabView->pNextTab;
- // 删除对象;
- delete pTabView; pTabView = NULL;
- break;
- }
- pLastTab = pTabView;
- pTabView = pTabView->pNextTab;
- } while (pTabView);
- }
- static void CloseAllView()
- {
- if (!m_pChildViewHead)
- return;
- TABVIEW* pLastTab = NULL, * pTabView = m_pChildViewHead;
- do
- {
- pLastTab = pTabView;
- pTabView->pViewWnd->SendMessage(WM_CLOSE);
- m_pChildViewHead = pTabView->pNextTab;
- pTabView = pTabView->pNextTab;
- // 删除对象;
- delete pLastTab; pLastTab = NULL;
- } while (pTabView);
- }
- static BOOL SwitchView(const TCHAR* pszViewName)
- {
- if (!pszViewName || !m_pChildViewHead)
- return FALSE;
- CWnd* pActiveWnd = m_pCurrentFrame->GetActiveFrame();
- // 是否已存在该视图;
- CChildFrame* pViewWnd = (CChildFrame*)GetViewWnd(pszViewName);
- if (pActiveWnd == pViewWnd)
- return TRUE;
- // 已存在;
- if (pViewWnd) {
- // 隐藏上一个活动视图;
- if (pActiveWnd)
- pActiveWnd->ShowWindow(SW_HIDE);
- pViewWnd->ShowWindow(SW_MAXIMIZE);
- pViewWnd->MDIActivate();
- return TRUE;
- }
- return FALSE;
- }
- };
|