172 lines
4.9 KiB
C++
172 lines
4.9 KiB
C++
// MTabWnd.cpp : implementation file
|
||
//
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// Derive your mainframe window from this class to get support for the
|
||
// MDI tabs. Also adds support for next/previous MDI window selection.
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// Copyright ?1998 Written by Dieter Fauth
|
||
// mailto:fauthd@zvw.de
|
||
//
|
||
// This code may be used in compiled form in any way you desire. This
|
||
// file may be redistributed unmodified by any means PROVIDING it is
|
||
// not sold for profit without the authors written consent, and
|
||
// providing that this notice and the authors name and all copyright
|
||
// notices remains intact. If the source code in this file is used in
|
||
// any commercial application then a statement along the lines of
|
||
// "Portions Copyright ?1999 Dieter Fauth" must be included in
|
||
// the startup banner, "About" box or printed documentation. An email
|
||
// letting me know that you are using it would be nice as well. That's
|
||
// not much to ask considering the amount of work that went into this.
|
||
//
|
||
// This file is provided "as is" with no expressed or implied warranty.
|
||
// The author accepts no liability for any damage/loss of business that
|
||
// this product may cause.
|
||
//
|
||
// ==========================================================================
|
||
// HISTORY:
|
||
// ==========================================================================
|
||
// 1.00 08 May 1999 - Initial release.
|
||
// ==========================================================================
|
||
//
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
#include "stdafx.h"
|
||
#include <afxpriv.h>
|
||
#include "Sys.h"
|
||
#include "MTabWnd.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CMDITabFrameWnd
|
||
|
||
IMPLEMENT_DYNCREATE(CMDITabFrameWnd, CMDIFrameWnd)
|
||
|
||
CMDITabFrameWnd::CMDITabFrameWnd()
|
||
{
|
||
}
|
||
|
||
CMDITabFrameWnd::~CMDITabFrameWnd()
|
||
{
|
||
}
|
||
|
||
BEGIN_MESSAGE_MAP(CMDITabFrameWnd, CMDIFrameWnd)
|
||
ON_WM_INITMENU()
|
||
//{{AFX_MSG_MAP(CMDITabFrameWnd)
|
||
ON_COMMAND(ID_WINDOW_NEXT_PANE, OnWindowNextPane)
|
||
ON_COMMAND(ID_WINDOW_PREV_PANE, OnWindowPrevPane)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
|
||
BOOL CMDITabFrameWnd::CreateTabs(void)
|
||
{
|
||
// m_wndTabs<62><73>CControlBar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (!m_wndTabs.Create(this,WS_VISIBLE|WS_CHILD|CBRS_TOP|WS_EX_WINDOWEDGE, IDC_MDI_TAB_CTRL_BAR))
|
||
{
|
||
TRACE("Failed to create test status bar\n");
|
||
return -1; // fail to create
|
||
}
|
||
|
||
m_wndMdiClient.m_pWndTabs = &m_wndTabs;
|
||
|
||
ASSERT(m_hWndMDIClient != NULL);
|
||
|
||
|
||
// ͨ<><CDA8>ע<EFBFBD><D7A2>m_hWndMDIClient<6E><74><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>ȥTAB<41>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||
if (!m_wndMdiClient.SubclassWindow(m_hWndMDIClient) )
|
||
{
|
||
TRACE("Failed to subclass MDI client\n");
|
||
return -1; // fail to create
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CMDITabFrameWnd message handlers
|
||
//
|
||
|
||
void CMDITabFrameWnd::OnWindowNextPane()
|
||
{
|
||
MDINext();
|
||
}
|
||
|
||
void CMDITabFrameWnd::OnWindowPrevPane()
|
||
{
|
||
ASSERT(::IsWindow(m_hWnd));
|
||
::SendMessage(m_hWndMDIClient, WM_MDINEXT, 0, 1);
|
||
}
|
||
|
||
|
||
|
||
void CMDITabFrameWnd::OnInitMenu(CMenu* pMenu)
|
||
{
|
||
CMDIFrameWnd::OnInitMenu(pMenu);
|
||
|
||
// CG: This block added by 'Tip of the Day' component.
|
||
{
|
||
// TODO: This code adds the "Tip of the Day" menu item
|
||
// on the fly. It may be removed after adding the menu
|
||
// item to all applicable menu items using the resource
|
||
// editor.
|
||
|
||
// Add Tip of the Day menu item on the fly!
|
||
static CMenu* pSubMenu = NULL;
|
||
|
||
CString strHelp; strHelp.LoadString(CG_IDS_TIPOFTHEDAYHELP);
|
||
CString strMenu;
|
||
int nMenuCount = pMenu->GetMenuItemCount();
|
||
BOOL bFound = FALSE;
|
||
for (int i=0; i < nMenuCount; i++)
|
||
{
|
||
pMenu->GetMenuString(i, strMenu, MF_BYPOSITION);
|
||
if (strMenu == strHelp)
|
||
{
|
||
pSubMenu = pMenu->GetSubMenu(i);
|
||
bFound = TRUE;
|
||
ASSERT(pSubMenu != NULL);
|
||
}
|
||
}
|
||
|
||
CString strTipMenu;
|
||
strTipMenu.LoadString(CG_IDS_TIPOFTHEDAYMENU);
|
||
if (!bFound)
|
||
{
|
||
// Help menu is not available. Please add it!
|
||
if (pSubMenu == NULL)
|
||
{
|
||
// The same pop-up menu is shared between mainfrm and frame
|
||
// with the doc.
|
||
static CMenu popUpMenu;
|
||
pSubMenu = &popUpMenu;
|
||
pSubMenu->CreatePopupMenu();
|
||
pSubMenu->InsertMenu(0, MF_STRING|MF_BYPOSITION,
|
||
CG_IDS_TIPOFTHEDAY, strTipMenu);
|
||
}
|
||
pMenu->AppendMenu(MF_STRING|MF_BYPOSITION|MF_ENABLED|MF_POPUP,
|
||
(UINT)pSubMenu->m_hMenu, strHelp);
|
||
DrawMenuBar();
|
||
}
|
||
else
|
||
{
|
||
// Check to see if the Tip of the Day menu has already been added.
|
||
pSubMenu->GetMenuString(0, strMenu, MF_BYPOSITION);
|
||
|
||
if (strMenu != strTipMenu)
|
||
{
|
||
// Tip of the Day submenu has not been added to the
|
||
// first position, so add it.
|
||
pSubMenu->InsertMenu(0, MF_BYPOSITION); // Separator
|
||
pSubMenu->InsertMenu(0, MF_STRING|MF_BYPOSITION,
|
||
CG_IDS_TIPOFTHEDAY, strTipMenu);
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|