2025-11-27 16:46:48 +09:00

703 lines
19 KiB
C++

// multipad.cpp : Defines the class behaviors for the Multipad application.
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1997 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 "multipad.h"
#include "CustomizeDlg.h"
#include "WorkspaceDlg.h"
#include <locale.h>
#include "UTSampleAbout.h"
CMultiPadApp NEAR theApp;
static HINSTANCE g_hRichEdDLL=NULL;
BEGIN_MESSAGE_MAP(CMultiPadApp, CWinApp)
//{{AFX_MSG_MAP(CMultiPadApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_VIEW_WORKSPACE, OnViewWorkspace)
//}}AFX_MSG_MAP
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) // file commands...
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
BOOL CMultiPadApp::InitInstance()
{
_tsetlocale(LC_ALL, _T(""));
// Initialize RichEdit control
// for About Dialog
if(g_hRichEdDLL==NULL)
{
g_hRichEdDLL=::LoadLibrary(_T("RICHED32.DLL"));
if(g_hRichEdDLL==NULL)
TRACE(_T("Cannot load library to display RichEditTextControl"));
}
Enable3dControls();
// use registry if you want to save CoolToolBars state
SetRegistryKey(_T("Ultimate Toolbox Samples"));
LoadStdProfileSettings();
AddDocTemplate(new CMultiDocTemplate(IDR_TEXTTYPE,
RUNTIME_CLASS(CPadDoc), RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CMultipadView)));
m_pMainWnd = new CMainFrame;
((CFrameWnd*)m_pMainWnd)->LoadFrame(IDR_MAINFRAME);
m_pMainWnd->ShowWindow(m_nCmdShow);
// enable file manager drag/drop and DDE Execute open
m_pMainWnd->DragAcceptFiles();
EnableShellOpen();
RegisterShellFileTypes(TRUE);
// don't create a new (empty) document, edit
// the !readme.txt file instead.
#ifndef _UNICODE
OpenDocumentFile(_T("Imousereadme.txt"));
#else
OpenDocumentFile(_T("Imousereadmeu.txt"));
#endif
IniAppVars();
// load saved workspace after all bars were created
if(m_bLoadWSOnEnter)
{
((CMainFrame*)m_pMainWnd)->LoadWorkspace();
}
return TRUE;
}
int CMultiPadApp::ExitInstance()
{
// TODO: Add your specialized code here and/or call the base class
// save all application variables in registry
SaveAppVars();
// unload the library
if(g_hRichEdDLL!=NULL)
::FreeLibrary(g_hRichEdDLL);
return CWinApp::ExitInstance();
}
void CMultiPadApp::OnAppAbout()
{
CUTSampleAboutDlg dlgAbout(IDR_MAINFRAME,ID_DESCRIPTION_FILE);
dlgAbout.DoModal();
}
void CMultiPadApp::IniAppVars()
{
m_bLoadWSOnEnter=GetProfileInt(_T("WorkspaceOptions"),_T("LoadOnEnter"),FALSE);
m_bSaveWSOnExit=GetProfileInt(_T("WorkspaceOptions"),_T("SaveOnExit"),FALSE);
}
void CMultiPadApp::SaveAppVars()
{
WriteProfileInt(_T("WorkspaceOptions"),_T("LoadOnEnter"),m_bLoadWSOnEnter);
WriteProfileInt(_T("WorkspaceOptions"),_T("SaveOnExit"),m_bSaveWSOnExit);
}
void CMultiPadApp::OnViewWorkspace()
{
// TODO: Add your command handler code here
CWorkspaceDlg workspaceDlg;
workspaceDlg.m_bLoadOnEnter=m_bLoadWSOnEnter;
workspaceDlg.m_bSaveOnExit=m_bSaveWSOnExit;
if(workspaceDlg.DoModal()==IDOK)
{
m_bLoadWSOnEnter=workspaceDlg.m_bLoadOnEnter;
m_bSaveWSOnExit=workspaceDlg.m_bSaveOnExit;
}
}
/////////////////////////////////////////////////////////////////////////////
// CChildFrame
IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
//{{AFX_MSG_MAP(CChildFrame)
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChildFrame construction/destruction
CChildFrame::CChildFrame()
{
// TODO: add member initialization code here
}
CChildFrame::~CChildFrame()
{
}
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS,NULL,NULL,
AfxGetApp()->LoadIcon(IDR_TEXTTYPE));
ASSERT(cs.lpszClass);
return CMDIChildWnd::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CChildFrame diagnostics
#ifdef _DEBUG
void CChildFrame::AssertValid() const
{
CMDIChildWnd::AssertValid();
}
void CChildFrame::Dump(CDumpContext& dc) const
{
CMDIChildWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CChildFrame message handlers
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_Caption.Attach(this);
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
ASSERT_VALID(pFrame);
COXCaptionPainter parentCaption;
if(::SendMessage(pFrame->m_hWnd,COXCaptionPainter::m_nGetCaptionPainter,0,
(LPARAM)&parentCaption))
{
SendMessage(COXCaptionPainter::m_nSetCaptionPainter,0,(LPARAM)&parentCaption);
}
SendMessage(WM_NCPAINT);
return 0;
}
/////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_CLOSE()
ON_COMMAND(ID_VIEW_CUSTOMIZE, OnViewCustomize)
//}}AFX_MSG_MAP
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_TOOLBAR_FILE, ID_VIEW_TOOLBAR_WINDOW,
OnUpdateViewToolbars)
ON_COMMAND_RANGE(ID_VIEW_TOOLBAR_FILE, ID_VIEW_TOOLBAR_WINDOW,
OnViewToolbars)
ON_NOTIFY(TBN_DROPDOWN, ID_VIEW_TOOLBAR_FILE, OnDropDown)
END_MESSAGE_MAP()
// we need these arrays to make our CoolToolBars customizable
// we use them as parameters in function COXCoolToolBar::SetBitmapIds()
static UINT buttonsFile[] =
{
ID_FILE_NEW,
ID_FILE_OPEN,
ID_FILE_CLOSE,
ID_FILE_SAVE,
ID_FILE_SAVE_AS,
ID_FILE_PRINT,
ID_APP_ABOUT,
};
static UINT buttonsEdit[] =
{
ID_EDIT_CUT,
ID_EDIT_COPY,
ID_EDIT_PASTE,
ID_EDIT_CLEAR,
ID_EDIT_FIND,
ID_EDIT_REPEAT,
};
static UINT buttonsWindow[] =
{
ID_WINDOW_CASCADE,
ID_WINDOW_TILE_HORZ,
ID_WINDOW_ARRANGE,
};
static UINT indicators[] =
{
ID_SEPARATOR,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL
};
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CMDIFrameWnd::OnCreate(lpCreateStruct)==-1)
{
return -1;
}
// create standard statusbar
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE(_T("Failed to create status bar\n"));
return -1; // fail to create
}
// create toolbars
//////////////////////////////
// File ToolBar
// this is an example of simple toolbar without text
// but we add here images to show in hot mode
// Note that process of creation of CoolToolBar almost the same as
// standard CToolBar
if (!m_wndToolBarFile.Create(this, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER,
ID_VIEW_TOOLBAR_FILE) ||
!m_wndToolBarFile.LoadToolBar(IDR_TOOLBAR_FILE))
{
TRACE(_T("Failed to create File toolbar\n"));
return -1; // fail to create
}
// This function specifies the command ID's of the button images in the bitmap.
m_wndToolBarFile.SetBitmapIds(buttonsFile, sizeof(buttonsFile)/sizeof(UINT));
/////////////
// COXCoolToolBar specific functions
m_wndToolBarFile.IniSizes(CSize(16,16));
m_wndToolBarFile.SetList();
m_wndToolBarFile.SetHotImageList(m_wndToolBarFile.AddImageList(IDR_TOOLBAR_FILE_HOT));
m_wndToolBarFile.SetDefaultTextColor(RGB(0,0,128));
m_wndToolBarFile.SetHotTextColor(RGB(0,0,255));
////////////
m_wndToolBarFile.SetButtonStyle(2,m_wndToolBarFile.GetButtonStyle(2)|TBSTYLE_DROPDOWN);
m_wndToolBarFile.SetDropDownArrow(TRUE);
m_wndToolBarFile.UpdateSizes();
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBarFile.SetBarStyle(m_wndToolBarFile.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndToolBarFile.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
//////////////////////////////
//////////////////////////////
// Edit ToolBar
if (!m_wndToolBarEdit.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER,
ID_VIEW_TOOLBAR_EDIT) ||
!m_wndToolBarEdit.LoadToolBar(IDR_TOOLBAR_EDIT))
{
TRACE(_T("Failed to create Edit toolbar\n"));
return -1; // fail to create
}
// This function specifies the command ID's of the button images in the bitmap.
m_wndToolBarEdit.SetBitmapIds(buttonsEdit, sizeof(buttonsEdit)/sizeof(UINT));
/////////////
// COXCoolToolBar specific functions
m_wndToolBarEdit.IniSizes(CSize(16,16));
m_wndToolBarEdit.SetHotImageList(m_wndToolBarEdit.AddImageList(IDR_TOOLBAR_EDIT_HOT));
m_wndToolBarEdit.SetDefaultTextColor(RGB(0,0,128));
m_wndToolBarEdit.SetHotTextColor(RGB(0,0,255));
// we want to use text from string resource in our CoolToolBar
m_wndToolBarEdit.SetButtonsMinMaxWidth(0,70);
m_wndToolBarEdit.SetMaxTextRows(4);
m_wndToolBarEdit.SetButtonTextFromID(COXCoolToolBar::TTID_TOOLTIP);
m_wndToolBarEdit.UpdateSizes();
////////////
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBarEdit.SetBarStyle(m_wndToolBarEdit.GetBarStyle() |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
//////////////////////////////
//////////////////////////////
// Window ToolBar
if (!m_wndToolBarWindow.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER,
ID_VIEW_TOOLBAR_WINDOW) ||
!m_wndToolBarWindow.LoadToolBar(IDR_TOOLBAR_WINDOW))
{
TRACE(_T("Failed to create Window toolbar\n"));
return -1; // fail to create
}
// This function specifies the command ID's of the button images in the bitmap.
m_wndToolBarWindow.SetBitmapIds(buttonsWindow, sizeof(buttonsWindow)/sizeof(UINT));
/////////////
// COXCoolToolBar specific functions
// use CoolToolBar in List mode
m_wndToolBarWindow.IniSizes(CSize(16,16));
m_wndToolBarWindow.SetList();
m_wndToolBarWindow.SetHotImageList(m_wndToolBarWindow.AddImageList(IDR_TOOLBAR_WINDOW_HOT));
m_wndToolBarWindow.SetDefaultTextColor(RGB(0,0,128));
m_wndToolBarWindow.SetHotTextColor(RGB(0,0,255));
// we want to use tooltips text in our CoolToolBar
m_wndToolBarWindow.SetMaxTextRows(1);
m_wndToolBarWindow.SetButtonTextFromID(COXCoolToolBar::TTID_TOOLTIP);
m_wndToolBarWindow.UpdateSizes();
////////////
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBarWindow.SetBarStyle(m_wndToolBarWindow.GetBarStyle() |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndToolBarWindow.EnableDocking(CBRS_ALIGN_ANY);
//////////////////////////////
EnableDocking(CBRS_ALIGN_ANY);
// TODO: Delete these lines if you don't want the toolbar to
// be dockable
DockControlBar(&m_wndToolBarFile);
DockControlBar(&m_wndToolBarWindow);
// Dock Window toolbar to the right side of File toolbar
m_wndToolBarWindow.DockControlBarLeftOf(&m_wndToolBarFile);
// Let the menu organizer fix our menus
Organizer.AttachFrameWnd(this);
// use button from toolbars with corresponding items in menu
Organizer.AutoSetMenuImage();
// Install caption painter
m_Caption.Attach(this);
COXCaptionInfo* pCI=m_Caption.GetCaptionInfo(TRUE);
pCI->SetBackgroundColor(RGB(0xff,0x68,0x20));
pCI=m_Caption.GetCaptionInfo(FALSE);
pCI->SetBackgroundColor(RGB(0xD2,0xB4,0x8C));
SendMessage(WM_NCPAINT);
return 0;
}
void CMainFrame::OnUpdateViewToolbars(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CControlBar* pBar=GetControlBar(pCmdUI->m_nID);
if(pBar!=NULL)
{
pCmdUI->SetCheck((pBar->GetStyle() & WS_VISIBLE) != 0);
return;
}
}
void CMainFrame::OnViewToolbars(UINT nID)
{
// TODO: Add your command handler code here
CControlBar* pBar = GetControlBar(nID);
if (pBar != NULL)
{
ShowControlBar(pBar, (pBar->GetStyle() & WS_VISIBLE) == 0, FALSE);
}
}
void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
// before close save the workspace
if(((CMultiPadApp*)AfxGetApp())->m_bSaveWSOnExit)
{
SaveWorkspace();
}
CMDIFrameWnd::OnClose();
}
void CMainFrame::SaveWorkspace()
{
// save states of all CoolToolBar
m_wndToolBarFile.SaveBarState(_T("CoolToolBars"),_T("File"));
m_wndToolBarEdit.SaveBarState(_T("CoolToolBars"),_T("Edit"));
m_wndToolBarWindow.SaveBarState(_T("CoolToolBars"),_T("Window"));
// save the state of all bars within framework
SaveBarState(_T("FrameworkBarState"));
}
void CMainFrame::LoadWorkspace()
{
LockWindowUpdate();
// load all bars state in framework
LoadBarState(_T("FrameworkBarState"));
// load state of all CoolToolBar
m_wndToolBarFile.LoadBarState(_T("CoolToolBars"),_T("File"));
m_wndToolBarEdit.LoadBarState(_T("CoolToolBars"),_T("Edit"));
m_wndToolBarWindow.LoadBarState(_T("CoolToolBars"),_T("Window"));
UnlockWindowUpdate();
}
void CMainFrame::OnViewCustomize()
{
// TODO: Add your command handler code here
CCustomizeDlg dlgCustomize(this);
dlgCustomize.arrCustomize[0]=GetToolbarProperties(&m_wndToolBarFile);
dlgCustomize.arrCustomize[1]=GetToolbarProperties(&m_wndToolBarEdit);
dlgCustomize.arrCustomize[2]=GetToolbarProperties(&m_wndToolBarWindow);
if(dlgCustomize.DoModal()==IDOK)
{
SetToolbarProperties(&m_wndToolBarFile,dlgCustomize.arrCustomize[0]);
SetToolbarProperties(&m_wndToolBarEdit,dlgCustomize.arrCustomize[1]);
SetToolbarProperties(&m_wndToolBarWindow,dlgCustomize.arrCustomize[2]);
}
}
CustomizeToolbar CMainFrame::GetToolbarProperties(COXCoolToolBar* pBar)
{
// collect information about CoolToolBar to use in Customize Toolbars dialog
CustomizeToolbar ct;
ct.bCustomizable=pBar->IsCustomizable();
ct.bFlat=pBar->IsFlat();
ct.bGripper=pBar->IsGripper();
ct.bList=pBar->IsList();
ct.bSeparator=pBar->IsSeparator();
ct.bText=!pBar->GetButtonText(0).IsEmpty();
ct.nTextType=(int)pBar->GetTextType();
ct.nRows=pBar->GetTextRows();
ct.nWidth=pBar->GetButtonsSize().cx;
ct.nIndent=pBar->GetIndent();
return ct;
}
void CMainFrame::SetToolbarProperties(COXCoolToolBar* pBar, CustomizeToolbar ct)
{
// change styles and properties of CoolToolBar
pBar->SetCustomizable(ct.bCustomizable);
pBar->SetFlat(ct.bFlat);
pBar->SetGripper(ct.bGripper);
pBar->SetList(ct.bList);
pBar->SetSeparator(ct.bSeparator);
pBar->SetIndent(ct.nIndent);
if(ct.bText)
{
pBar->SetButtonTextFromID((COXCoolToolBar::TextTypeFromID)ct.nTextType);
pBar->SetMaxTextRows(ct.nRows);
pBar->SetButtonsMinMaxWidth(0,ct.nWidth);
pBar->UpdateSizes();
}
else
{
// if we don't want to use text in CoolToolBar then
// remove all previously associated text
if(pBar->GetTextType()!=COXCoolToolBar::TTID_NOTSET)
{
pBar->SetButtonTextFromID(COXCoolToolBar::TTID_NONE);
pBar->SetButtonTextFromID(COXCoolToolBar::TTID_NOTSET);
}
pBar->SetMaxTextRows(0);
pBar->SetButtonsMinMaxWidth(0,24);
pBar->IniSizes(CSize(16,16));
}
CSize sizeChild;
sizeChild=pBar->GetButtonsSize();
CRect rect;
pBar->GetWindowRect(&rect);
// resize window
pBar->SetWindowPos(NULL,0,0,rect.Width(),rect.Height(),
SWP_NOMOVE|SWP_NOZORDER|SWP_DRAWFRAME|SWP_FRAMECHANGED);
// it is up to framework to reallocate all other control bars
CFrameWnd* pFrameWnd=pBar->GetDockingFrame();
if(pFrameWnd!=NULL)
{
pFrameWnd->RecalcLayout();
}
}
void CMainFrame::OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult)
{
// this function handles the dropdown menus from the toolbar
NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNotifyStruct;
CRect rect;
// translate the current toolbar item rectangle into screen coordinates
// so that we'll know where to pop up the menu
m_wndToolBarFile.GetItemRect(m_wndToolBarFile.CommandToIndex(pNMToolBar->iItem), &rect);
rect.top = rect.bottom;
::ClientToScreen(pNMToolBar->hdr.hwndFrom, &rect.TopLeft());
if(pNMToolBar->iItem == ID_FILE_OPEN)
{
CMenu menu;
CMenu* pPopup;
// the font popup is stored in a resource
menu.LoadMenu(IDR_MAINFRAME);
pPopup = menu.GetSubMenu(0);
pPopup->RemoveMenu(ID_FILE_NEW,MF_BYCOMMAND);
pPopup->RemoveMenu(ID_SEPARATOR,MF_BYCOMMAND);
pPopup->RemoveMenu(ID_FILE_PRINT_SETUP,MF_BYCOMMAND);
pPopup->RemoveMenu(ID_APP_EXIT,MF_BYCOMMAND);
pPopup->RemoveMenu(pPopup->GetMenuItemCount()-1,MF_BYPOSITION);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, rect.left,
rect.top + 1, AfxGetMainWnd());
}
*pResult = TBDDRET_DEFAULT;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CMultipadView
IMPLEMENT_DYNCREATE(CMultipadView, CEditView)
BEGIN_MESSAGE_MAP(CMultipadView, CEditView)
//{{AFX_MSG_MAP(CMultipadView)
ON_WM_CREATE()
ON_UPDATE_COMMAND_UI(ID_VIEW_IMSEVENT_LEFTBTN, OnUpdateViewIMSEventLeftbtn)
ON_UPDATE_COMMAND_UI(ID_VIEW_IMSEVENT_MIDDLEBTN, OnUpdateViewIMSEventMiddlebtn)
ON_COMMAND(ID_VIEW_IMSEVENT_SHIFT, OnViewShift)
ON_UPDATE_COMMAND_UI(ID_VIEW_IMSEVENT_SHIFT, OnUpdateViewShift)
ON_COMMAND(ID_VIEW_IMSEVENT_LEFTBTN, OnViewIMSEventLeftbtn)
ON_COMMAND(ID_VIEW_IMSEVENT_MIDDLEBTN, OnViewIMSEventMiddlebtn)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMultipadView message handlers
int CMultipadView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CEditView::OnCreate(lpCreateStruct) == -1)
return -1;
m_bLeft=TRUE;
m_bMiddle=FALSE;
m_bShift=FALSE;
// TODO: Add your specialized creation code here
m_IntelliMouse.Attach(this,WM_LBUTTONDOWN);
return 0;
}
void CMultipadView::OnViewIMSEventLeftbtn()
{
// TODO: Add your command handler code here
m_bLeft=TRUE;
m_bMiddle=FALSE;
SetStartEventID();
}
void CMultipadView::OnUpdateViewIMSEventLeftbtn(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetRadio(m_bLeft ? TRUE : FALSE);
}
void CMultipadView::OnViewIMSEventMiddlebtn()
{
// TODO: Add your command handler code here
m_bLeft=FALSE;
m_bMiddle=TRUE;
SetStartEventID();
}
void CMultipadView::OnUpdateViewIMSEventMiddlebtn(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetRadio(m_bMiddle ? TRUE : FALSE);
}
void CMultipadView::OnViewShift()
{
// TODO: Add your command handler code here
m_bShift=!m_bShift;
SetStartEventID();
}
void CMultipadView::OnUpdateViewShift(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_bShift ? TRUE : FALSE);
}
void CMultipadView::SetStartEventID()
{
if(m_bLeft)
m_IntelliMouse.SetStartEventID(WM_LBUTTONDOWN,
m_bShift ? KEYPRESSED_SHIFT : 0);
else if(m_bMiddle)
m_IntelliMouse.SetStartEventID(WM_MBUTTONDOWN,
m_bShift ? KEYPRESSED_SHIFT : 0);
else
ASSERT(FALSE);
}
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CPadDoc, CDocument)
BEGIN_MESSAGE_MAP(CPadDoc, CDocument)
//{{AFX_MSG_MAP(CPadDoc)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CPadDoc::Serialize(CArchive& ar)
{
((CMultipadView*)m_viewList.GetHead())->SerializeRaw(ar);
}
/////////////////////////////////////////////////////////////////////////////