home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
mfc
/
src
/
oleui2.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-16
|
4KB
|
158 lines
// 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"
#ifdef AFX_OLE2_SEG
#pragma code_seg(AFX_OLE2_SEG)
#endif
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define new DEBUG_NEW
/////////////////////////////////////////////////////////////////////////////
// more User interface for COleClientItem
/////////////////////////////////////////////////////////////////////////////
// OLE Object Verb Menu helpers
// simple wrapper for OleUIAddVerbMenu API
void AFXAPI AfxOleSetEditMenu(COleClientItem* pItem, CMenu* pMenu,
UINT iMenuItem, UINT nIDVerbMin, UINT nIDVerbMax, UINT nIDConvert)
{
ASSERT_VALID(pMenu);
if (pItem != NULL)
ASSERT_VALID(pItem);
HMENU hmenuDummy;
if (!::OleUIAddVerbMenu(pItem != NULL ? pItem->m_lpObject : NULL,
NULL, pMenu->GetSafeHmenu(), iMenuItem,
nIDVerbMin, nIDVerbMax, nIDConvert != 0, nIDConvert, &hmenuDummy))
{
// turn gray popup into gray disabled normal menu item
TCHAR szBuffer[256];
pMenu->GetMenuString(iMenuItem, szBuffer, sizeof szBuffer, MF_BYPOSITION);
pMenu->DeleteMenu(iMenuItem, MF_BYPOSITION);
pMenu->InsertMenu(
iMenuItem, MF_BYPOSITION|MF_STRING|MF_GRAYED|MF_DISABLED,
nIDVerbMin, szBuffer);
}
}
/////////////////////////////////////////////////////////////////////////////
// UI message handlers
void COleDocument::OnUpdatePasteMenu(CCmdUI* pCmdUI)
{
pCmdUI->Enable(COleClientItem::CanPaste());
}
void COleDocument::OnUpdatePasteLinkMenu(CCmdUI* pCmdUI)
{
pCmdUI->Enable(COleClientItem::CanPasteLink());
}
void COleDocument::OnUpdateEditLinksMenu(CCmdUI* pCmdUI)
{
POSITION pos = GetStartPosition();
COleClientItem* pItem;
while ((pItem = GetNextClientItem(pos)) != NULL)
{
if (pItem->GetType() == OT_LINK)
{
// we found a link!
pCmdUI->Enable(TRUE);
return;
}
}
pCmdUI->Enable(FALSE); // no links today
}
void COleDocument::OnEditLinks()
{
ASSERT_VALID(this);
COleLinksDialog dlg(this, GetRoutingView_());
dlg.DoModal();
}
void COleDocument::OnEditConvert()
{
ASSERT_VALID(this);
// get selected item
COleClientItem* pItem = GetPrimarySelectedItem(GetRoutingView_());
if (pItem == NULL)
return;
// do conversion dialog & convert for that item
COleConvertDialog dlg(pItem);
if (dlg.DoModal() == IDOK)
dlg.DoConvert(pItem);
}
void COleDocument::OnUpdateEditChangeIcon(CCmdUI* pCmdUI)
{
ASSERT_VALID(this);
pCmdUI->Enable(GetPrimarySelectedItem(GetRoutingView_()) != NULL);
}
void COleDocument::OnEditChangeIcon()
{
ASSERT_VALID(this);
// get selected item
COleClientItem* pItem = GetPrimarySelectedItem(GetRoutingView_());
if (pItem == NULL)
return;
// do conversion dialog & convert for that item
COleChangeIconDialog dlg(pItem);
if (dlg.DoModal() == IDOK)
dlg.DoChangeIcon(pItem);
}
void COleDocument::OnUpdateObjectVerbMenu(CCmdUI* pCmdUI)
{
if (pCmdUI->m_pMenu == NULL || pCmdUI->m_pParentMenu == NULL)
{
// not a menu or is on sub-menu (don't recurse)
pCmdUI->ContinueRouting();
return;
}
// check for single selection
COleClientItem* pItem = GetPrimarySelectedItem(GetRoutingView_());
if (pItem == NULL || pItem->GetType() == OT_STATIC)
{
// no selection, or is 'static' item
pCmdUI->Enable(FALSE);
}
// only include Convert... if there is a handler for ID_OLE_EDIT_CONVERT
UINT nConvertID = ID_OLE_EDIT_CONVERT;
AFX_CMDHANDLERINFO info;
if (!OnCmdMsg(ID_OLE_EDIT_CONVERT, CN_COMMAND, NULL, &info))
nConvertID = 0;
// update the menu
AfxOleSetEditMenu(GetPrimarySelectedItem(GetRoutingView_()),
pCmdUI->m_pMenu, pCmdUI->m_nIndex,
ID_OLE_VERB_FIRST, ID_OLE_VERB_LAST, nConvertID);
}
/////////////////////////////////////////////////////////////////////////////