home *** CD-ROM | disk | FTP | other *** search
- // mainfrm.cpp : implementation of the CMainFrame class
- //
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
- #include "ctrlbars.h"
-
- #include "mainfrm.h"
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // CMainFrame
-
- BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
- //{{AFX_MSG_MAP(CMainFrame)
- ON_WM_CREATE()
- ON_COMMAND(ID_VIEW_DLGBARTOP, OnViewDlgbarTop)
- ON_UPDATE_COMMAND_UI(ID_VIEW_DLGBARTOP, OnUpdateViewDlgbartop)
- ON_COMMAND(ID_VIEW_SHORT, OnViewShort)
- ON_COMMAND(ID_VIEW_LONG, OnViewLong)
- ON_COMMAND(ID_TOGGLE_INSERT, OnToggleInsert)
- ON_UPDATE_COMMAND_UI(ID_INDICATOR_OVR, OnUpdateInsert)
- ON_COMMAND_EX(IDW_STYLES, OnViewBar)
- ON_UPDATE_COMMAND_UI(IDW_STYLES, OnUpdateBarMenu)
- ON_COMMAND(IDM_VIEWPALETTE, OnViewPalette)
- ON_UPDATE_COMMAND_UI(IDM_VIEWPALETTE, OnUpdatePaletteMenu)
- ON_COMMAND(IDM_PALETTE_2COLUMN, OnPalette2column)
- ON_COMMAND(IDM_PALETTE_3COLUMN, OnPalette3column)
- ON_UPDATE_COMMAND_UI(IDM_PALETTE_3COLUMN, OnUpdatePalette3column)
- ON_UPDATE_COMMAND_UI(IDM_PALETTE_2COLUMN, OnUpdatePalette2column)
- ON_CBN_SELCHANGE(IDC_PALETTE, OnSelChangePalette)
- //}}AFX_MSG_MAP
- ON_COMMAND_RANGE(ID_STYLE_LEFT, ID_STYLE_JUSTIFIED, OnChangeStyle)
- ON_UPDATE_COMMAND_UI_RANGE(ID_STYLE_LEFT, ID_STYLE_JUSTIFIED, OnUpdateStyle)
- ON_COMMAND_RANGE(ID_PALETTEERASE, ID_PALETTEOVAL, OnPalette)
- ON_UPDATE_COMMAND_UI_RANGE(ID_PALETTEERASE, ID_PALETTEOVAL, OnUpdatePalette)
- END_MESSAGE_MAP()
-
- /////////////////////////////////////////////////////////////////////////////
- // arrays of IDs used to initialize control bars
-
- static UINT BASED_CODE styles[] =
- {
- // same order as in the bitmap 'styles.bmp'
- ID_SEPARATOR, // for combo box (placeholder)
- ID_SEPARATOR,
- ID_STYLE_LEFT,
- ID_STYLE_CENTERED,
- ID_STYLE_RIGHT,
- ID_STYLE_JUSTIFIED,
- };
-
- static UINT BASED_CODE palette[] =
- {
- // same order as in the bitmap 'palette.bmp'
- ID_PALETTEERASE,
- ID_PALETTEPEN,
- ID_PALETTESELECT,
- ID_PALETTEBRUSH,
- ID_PALETTESPRAY,
- ID_PALETTEPAINT,
- ID_PALETTELINE,
- ID_PALETTEEYEDROP,
- ID_PALETTEMAG,
- ID_PALETTERECT,
- ID_PALETTEROUND,
- ID_PALETTEOVAL
- };
-
- static UINT BASED_CODE indicators[] =
- {
- ID_SEPARATOR, // status line indicator
- ID_INDICATOR_OVR,
- ID_INDICATOR_CAPS,
- ID_INDICATOR_NUM
- };
-
- /////////////////////////////////////////////////////////////////////////////
- // CMainFrame construction/destruction
-
- CMainFrame::CMainFrame()
- {
- m_bInsert = FALSE; // default to over-strke mode
- m_bDialogTop = FALSE;
- m_nPaletteCol = 3;
- }
-
- CMainFrame::~CMainFrame()
- {
- }
-
- // We override PreCreateWindow to specify a different window class (WNDCLASS),
- // one with a different background and without the CS_VREDRAW/CS_HREDRAW
- // style so all the frame window's control bars will not be repainted
- // when the window is resized.
- BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
- {
- cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS,
- AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)(COLOR_WINDOW+1),
- AfxGetApp()->LoadIcon(IDR_MAINFRAME));
-
- return TRUE;
- }
-
- int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
- return -1;
-
- EnableDocking(CBRS_ALIGN_ANY);
-
- if (!CreateToolBar())
- return -1;
- if (!CreateStyleBar())
- return -1;
- if (!CreatePaletteBar())
- return -1;
- if (!CreateStatusBar())
- return -1;
-
- if (!m_wndDlgBar.Create(this, IDD_VIEWSELECT,
- CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_VIEWSELECT))
- {
- TRACE0("Failed to create DlgBar\n");
- return -1; // fail to create
- }
-
- return 0;
- }
-
- BOOL CMainFrame::CreateToolBar()
- {
- if (!m_wndToolBar.Create(this,
- CBRS_TOP|CBRS_TOOLTIPS|CBRS_FLYBY|WS_VISIBLE) ||
- !m_wndToolBar.LoadBitmap(IDR_MAINFRAME))
- {
- TRACE0("Failed to create toolbar\n");
- return FALSE; // fail to create
- }
-
- OnViewShort();
- return TRUE;
- }
-
- BOOL CMainFrame::CreatePaletteBar()
- {
- if (!m_wndPaletteBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_SIZE_FIXED |
- CBRS_TOP | CBRS_TOOLTIPS, ID_PALETTEBAR) ||
- !m_wndPaletteBar.LoadBitmap(IDB_PALETTE) ||
- !m_wndPaletteBar.SetButtons(palette,
- sizeof(palette)/sizeof(UINT)))
- {
- TRACE0("Failed to create toolbar\n");
- return FALSE; // fail to create
- }
-
- m_wndPaletteBar.SetWindowText(_T("Palette"));
- m_wndPaletteBar.EnableDocking(0);
-
- // Create the Palette. We are using hardcoded numbers for ease here
- // normally the location would be read in from an ini file.
- CPoint pt(GetSystemMetrics(SM_CXSCREEN) - 100,
- GetSystemMetrics(SM_CYSCREEN) / 3);
-
- m_wndPaletteBar.SetColumns(3);
- FloatControlBar(&m_wndPaletteBar, pt);
-
- return TRUE;
- }
-
- BOOL CMainFrame::CreateStyleBar()
- {
- const int nDropHeight = 100;
-
- if (!m_wndStyleBar.Create(this, WS_CHILD|WS_VISIBLE|CBRS_TOP|
- CBRS_TOOLTIPS|CBRS_FLYBY, IDW_STYLES) ||
- !m_wndStyleBar.LoadBitmap(IDB_STYLES) ||
- !m_wndStyleBar.SetButtons(styles, sizeof(styles)/sizeof(UINT)))
- {
- TRACE0("Failed to create stylebar\n");
- return FALSE; // fail to create
- }
-
- // Create the combo box
- m_wndStyleBar.SetButtonInfo(0, IDW_COMBO, TBBS_SEPARATOR, 100);
-
- // Design guide advises 12 pixel gap between combos and buttons
- m_wndStyleBar.SetButtonInfo(1, ID_SEPARATOR, TBBS_SEPARATOR, 12);
- CRect rect;
- m_wndStyleBar.GetItemRect(0, &rect);
- rect.top = 3;
- rect.bottom = rect.top + nDropHeight;
- if (!m_wndStyleBar.m_comboBox.Create(
- CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP,
- rect, &m_wndStyleBar, IDW_COMBO))
- {
- TRACE0("Failed to create combo-box\n");
- return FALSE;
- }
-
- // Fill the combo box
- CString szStyle;
- if (szStyle.LoadString(IDS_LEFT))
- m_wndStyleBar.m_comboBox.AddString((LPCTSTR)szStyle);
- if (szStyle.LoadString(IDS_CENTERED))
- m_wndStyleBar.m_comboBox.AddString((LPCTSTR)szStyle);
- if (szStyle.LoadString(IDS_RIGHT))
- m_wndStyleBar.m_comboBox.AddString((LPCTSTR)szStyle);
- if (szStyle.LoadString(IDS_JUSTIFIED))
- m_wndStyleBar.m_comboBox.AddString((LPCTSTR)szStyle);
-
- // Create a font for the combobox
- LOGFONT logFont;
- memset(&logFont, 0, sizeof(logFont));
-
- if (!::GetSystemMetrics(SM_DBCSENABLED))
- {
- // Since design guide says toolbars are fixed height so is the font.
- logFont.lfHeight = -12;
- logFont.lfWeight = FW_BOLD;
- logFont.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
- CString strDefaultFont;
- strDefaultFont.LoadString(IDS_DEFAULT_FONT);
- lstrcpy(logFont.lfFaceName, strDefaultFont);
- if (!m_wndStyleBar.m_font.CreateFontIndirect(&logFont))
- TRACE0("Could Not create font for combo\n");
- else
- m_wndStyleBar.m_comboBox.SetFont(&m_wndStyleBar.m_font);
- }
- else
- {
- m_wndStyleBar.m_font.Attach(::GetStockObject(SYSTEM_FONT));
- m_wndStyleBar.m_comboBox.SetFont(&m_wndStyleBar.m_font);
- }
-
- return TRUE;
- }
-
- BOOL CMainFrame::CreateStatusBar()
- {
- if (!m_wndStatusBar.Create(this) ||
- !m_wndStatusBar.SetIndicators(indicators,
- sizeof(indicators)/sizeof(UINT)))
- {
- TRACE0("Failed to create status bar\n");
- return FALSE; // fail to create
- }
-
- UINT nID, nStyle;
- int cxWidth;
-
- m_wndStatusBar.GetPaneInfo( 0, nID, nStyle, cxWidth);
- m_wndStatusBar.SetPaneInfo( 0, nID, SBPS_STRETCH|SBPS_NORMAL, cxWidth);
- return TRUE;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CMainFrame diagnostics
-
- #ifdef _DEBUG
- void CMainFrame::AssertValid() const
- {
- CFrameWnd::AssertValid();
- }
-
- void CMainFrame::Dump(CDumpContext& dc) const
- {
- CFrameWnd::Dump(dc);
- }
-
- #endif //_DEBUG
-
- /////////////////////////////////////////////////////////////////////////////
- // CMainFrame message handlers
-
- void CMainFrame::OnViewShort()
- {
- // Set the toolbar to show only partial commmand list
- m_wndToolBar.SetButtons(NULL, 7);
- m_wndToolBar.SetButtonInfo(0, ID_VIEW_LONG,TBBS_BUTTON, 10);
- m_wndToolBar.SetButtonInfo(1, ID_SEPARATOR,TBBS_SEPARATOR, 6);
- m_wndToolBar.SetButtonInfo(2, ID_FILE_OPEN,TBBS_BUTTON, 1);
- m_wndToolBar.SetButtonInfo(3, ID_FILE_NEW,TBBS_BUTTON, 0);
- m_wndToolBar.SetButtonInfo(4, ID_FILE_SAVE,TBBS_BUTTON, 2);
- m_wndToolBar.SetButtonInfo(5, ID_SEPARATOR,TBBS_SEPARATOR, 6);
- m_wndToolBar.SetButtonInfo(6, ID_APP_ABOUT,TBBS_BUTTON, 7);
-
- // invalidate the call update handlers before painting
- m_wndToolBar.Invalidate();
- AfxGetApp()->OnIdle(-1);
- }
-
- void CMainFrame::OnViewLong()
- {
- // Set the toolbar to show all commmands
- m_wndToolBar.SetButtons(NULL, 13);
- m_wndToolBar.SetButtonInfo(0, ID_VIEW_SHORT,TBBS_BUTTON, 9);
- m_wndToolBar.SetButtonInfo(1, ID_SEPARATOR,TBBS_SEPARATOR, 6);
- m_wndToolBar.SetButtonInfo(2, ID_FILE_OPEN,TBBS_BUTTON, 1);
- m_wndToolBar.SetButtonInfo(3, ID_FILE_NEW,TBBS_BUTTON, 0);
- m_wndToolBar.SetButtonInfo(4, ID_FILE_SAVE,TBBS_BUTTON, 2);
- m_wndToolBar.SetButtonInfo(5, ID_SEPARATOR,TBBS_SEPARATOR, 6);
- m_wndToolBar.SetButtonInfo(6, ID_APP_ABOUT,TBBS_BUTTON, 7);
- m_wndToolBar.SetButtonInfo(7, ID_SEPARATOR,TBBS_SEPARATOR, 6);
- m_wndToolBar.SetButtonInfo(8, ID_EDIT_CUT,TBBS_BUTTON, 3);
- m_wndToolBar.SetButtonInfo(9, ID_EDIT_COPY,TBBS_BUTTON, 4);
- m_wndToolBar.SetButtonInfo(10, ID_EDIT_PASTE,TBBS_BUTTON, 5);
- m_wndToolBar.SetButtonInfo(11, ID_FILE_PRINT,TBBS_BUTTON, 6);
- m_wndToolBar.SetButtonInfo(12, ID_CONTEXT_HELP,TBBS_BUTTON, 8);
-
- // invalidate then call update handlers before painting
- m_wndToolBar.Invalidate();
- AfxGetApp()->OnIdle(-1);
- }
-
- void CMainFrame::OnViewDlgbarTop()
- {
- if (m_bDialogTop)
- m_wndDlgBar.SetWindowPos(&m_wndStatusBar, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
- else
- m_wndDlgBar.SetWindowPos(&wndTop, 0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
-
- RecalcLayout();
- m_bDialogTop = !m_bDialogTop;
- }
-
- void CMainFrame::OnUpdateViewDlgbartop(CCmdUI* pCmdUI)
- {
- pCmdUI->SetCheck(m_bDialogTop);
- }
-
- BOOL CMainFrame::OnViewBar(UINT nID)
- {
- CWnd* pBar;
- if ((pBar = GetDlgItem(nID)) == NULL)
- return FALSE; // not for us
- // toggle visible state
- pBar->ShowWindow((pBar->GetStyle() & WS_VISIBLE) == 0);
- RecalcLayout();
- return TRUE;
- }
-
- void CMainFrame::OnUpdateBarMenu(CCmdUI* pCmdUI)
- {
- CWnd* pBar;
- if ((pBar = GetDlgItem(pCmdUI->m_nID)) == NULL)
- {
- pCmdUI->ContinueRouting();
- return; // not for us
- }
- pCmdUI->SetCheck((pBar->GetStyle() & WS_VISIBLE) != 0);
- }
-
- void CMainFrame::OnViewPalette()
- {
- BOOL bVisible = ((m_wndPaletteBar.GetStyle() & WS_VISIBLE) != 0);
-
- ShowControlBar(&m_wndPaletteBar, !bVisible, FALSE);
- RecalcLayout();
- }
-
- void CMainFrame::OnUpdatePaletteMenu(CCmdUI* pCmdUI)
- {
- BOOL bVisible = ((m_wndPaletteBar.GetStyle() & WS_VISIBLE) != 0);
- pCmdUI->SetCheck(bVisible);
- }
-
- void CMainFrame::OnChangeStyle(UINT nID)
- {
- m_wndStyleBar.m_comboBox.SetCurSel((int)(nID-ID_STYLE_BASE));
- }
-
- void CMainFrame::OnUpdateStyle(CCmdUI* pCmdUI)
- {
- UINT nIndex = m_wndStyleBar.m_comboBox.GetCurSel();
- pCmdUI->SetCheck((UINT)(ID_STYLE_BASE+nIndex) == pCmdUI->m_nID);
- }
-
- void CMainFrame::OnUpdateInsert(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(!m_bInsert);
- }
-
- void CMainFrame::OnToggleInsert()
- {
- m_bInsert = !m_bInsert;
- }
-
- void CMainFrame::OnUpdatePalette(CCmdUI* pCmdUI)
- {
- CComboBox* pCBox = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_PALETTE);
- UINT nIndex = pCBox->GetCurSel();
- pCmdUI->SetCheck((UINT)(ID_PALETTE_BASE + nIndex) == pCmdUI->m_nID);
- }
-
- void CMainFrame::OnPalette(UINT nID)
- {
- CComboBox* pCBox = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_PALETTE);
- pCBox->SetCurSel((int)(nID - ID_PALETTE_BASE));
- OnSelChangePalette();
- }
-
- void CMainFrame::OnSelChangePalette()
- {
- CString strText;
- CString strItem;
- CComboBox* pCBox = (CComboBox*)m_wndDlgBar.GetDlgItem(IDC_PALETTE);
- int nIndex = pCBox->GetCurSel();
- if (nIndex == CB_ERR)
- return;
- pCBox->GetLBText(nIndex, strItem);
- AfxFormatString1(strText, IDS_SELECTED_PROMPT, (LPCTSTR)strItem);
- SetMessageText(strText);
- }
-
- void CMainFrame::OnPalette2column()
- {
- m_nPaletteCol = 2;
- m_wndPaletteBar.SetColumns(m_nPaletteCol);
- }
-
- void CMainFrame::OnPalette3column()
- {
- m_nPaletteCol = 3;
- m_wndPaletteBar.SetColumns(m_nPaletteCol);
- }
-
- void CMainFrame::OnUpdatePalette2column(CCmdUI* pCmdUI)
- {
- pCmdUI->SetCheck(m_nPaletteCol == 2);
- }
-
- void CMainFrame::OnUpdatePalette3column(CCmdUI* pCmdUI)
- {
- pCmdUI->SetCheck(m_nPaletteCol == 3);
- }
-