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