Implemented ShowContextMenu so that CBrowse can display custom popup menus in response to right mouse clicks

This commit is contained in:
locka%iol.ie 1999-10-19 21:39:42 +00:00
parent 8be27000b1
commit f96f1cbb98
9 changed files with 100 additions and 12 deletions

View File

@ -57,6 +57,8 @@ CBrowseDlg::CBrowseDlg(CWnd* pParent /*=NULL*/)
m_pBrowseDlg = this;
m_pControlSite = NULL;
m_clsid = CLSID_NULL;
m_bUseCustomPopupMenu = FALSE;
m_bUseCustomDropTarget = FALSE;
}
void CBrowseDlg::DoDataExchange(CDataExchange* pDX)
@ -306,6 +308,8 @@ HRESULT CBrowseDlg::CreateWebBrowser()
PropertyList pl;
m_pControlSite->AddRef();
m_pControlSite->m_bUseCustomPopupMenu = m_bUseCustomPopupMenu;
m_pControlSite->m_bUseCustomDropTarget = m_bUseCustomDropTarget;
m_pControlSite->Create(m_clsid, pl);
hr = m_pControlSite->Attach(GetSafeHwnd(), rcMarker, NULL);
if (hr != S_OK)

View File

@ -21,6 +21,8 @@ class CBrowseDlg : public CDialog
public:
CBrowserCtlSiteInstance *m_pControlSite;
CLSID m_clsid;
BOOL m_bUseCustomPopupMenu;
BOOL m_bUseCustomDropTarget;
CBrowseDlg(CWnd* pParent = NULL); // standard constructor

View File

@ -3,15 +3,87 @@
#include "Cbrowse.h"
#include "CBrowserCtlSite.h"
#include <tchar.h>
#include <string.h>
/////////////////////////////////////////////////////////////////////////////
// CBrowserCtlSite
CBrowserCtlSite::CBrowserCtlSite()
{
m_bUseCustomPopupMenu = TRUE;
m_bUseCustomDropTarget = FALSE;
}
void _InsertMenuItem(HMENU hmenu, int nPos, int nID, const TCHAR *szItemText)
{
MENUITEMINFO mii;
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.fType = MFT_STRING;
mii.fState = MFS_ENABLED;
mii.dwTypeData = (LPTSTR) szItemText;
mii.cch = _tcslen(szItemText);
InsertMenuItem(hmenu, nPos, TRUE, &mii);
}
void _InsertMenuSeperator(HMENU hmenu, int nPos)
{
MENUITEMINFO mii;
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
mii.fType = MFT_SEPARATOR;
mii.fState = MFS_ENABLED;
InsertMenuItem(hmenu, nPos, TRUE, &mii);
}
/////////////////////////////////////////////////////////////////////////////
// IDocHostUIHandler
HRESULT STDMETHODCALLTYPE CBrowserCtlSite::ShowContextMenu(/* [in] */ DWORD dwID, /* [in] */ POINT __RPC_FAR *ppt, /* [in] */ IUnknown __RPC_FAR *pcmdtReserved, /* [in] */ IDispatch __RPC_FAR *pdispReserved)
{
return E_NOTIMPL;
if (m_bUseCustomPopupMenu)
{
tstring szMenuText(_T("Unknown context"));
HMENU hmenu = CreatePopupMenu();
_InsertMenuItem(hmenu, 0, 1, _T("CBrowse context popup"));
_InsertMenuSeperator(hmenu, 1);
switch (dwID)
{
case CONTEXT_MENU_DEFAULT:
szMenuText = _T("Default context");
break;
case CONTEXT_MENU_IMAGE:
szMenuText = _T("Image context");
break;
case CONTEXT_MENU_CONTROL:
szMenuText = _T("Control context");
break;
case CONTEXT_MENU_TABLE:
szMenuText = _T("Table context");
break;
case CONTEXT_MENU_TEXTSELECT:
szMenuText = _T("TextSelect context");
break;
case CONTEXT_MENU_ANCHOR:
szMenuText = _T("Anchor context");
break;
case CONTEXT_MENU_UNKNOWN:
szMenuText = _T("Unknown context");
break;
}
_InsertMenuItem(hmenu, 2, 2, szMenuText.c_str());
POINT pt;
GetCursorPos(&pt);
TrackPopupMenu(hmenu, TPM_RETURNCMD, pt.x, pt.y, 0, AfxGetMainWnd()->GetSafeHwnd(), NULL);
DestroyMenu(hmenu);
return S_OK;
}
return S_FALSE;
}
HRESULT STDMETHODCALLTYPE CBrowserCtlSite::GetHostInfo(/* [out][in] */ DOCHOSTUIINFO __RPC_FAR *pInfo)

View File

@ -13,9 +13,7 @@ class ATL_NO_VTABLE CBrowserCtlSite :
public IDocHostShowUI
{
public:
CBrowserCtlSite()
{
}
CBrowserCtlSite();
DECLARE_REGISTRY_RESOURCEID(IDR_CBROWSERCTLSITE)
@ -27,6 +25,9 @@ BEGIN_COM_MAP(CBrowserCtlSite)
COM_INTERFACE_ENTRY(IDocHostShowUI)
END_COM_MAP()
BOOL m_bUseCustomPopupMenu;
BOOL m_bUseCustomDropTarget;
public:
// IDocHostUIHandler
virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(/* [in] */ DWORD dwID, /* [in] */ POINT __RPC_FAR *ppt, /* [in] */ IUnknown __RPC_FAR *pcmdtReserved, /* [in] */ IDispatch __RPC_FAR *pdispReserved);

View File

@ -47,6 +47,7 @@ CPickerDlg::CPickerDlg(CWnd* pParent /*=NULL*/)
m_szTestCGI = _T("");
m_bDebugging = FALSE;
m_sDebugFlags = _T("");
m_bUseCustom = FALSE;
//}}AFX_DATA_INIT
m_clsid = CLSID_NULL;
@ -65,6 +66,7 @@ void CPickerDlg::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX, IDC_TESTCGI, m_szTestCGI);
DDX_Check(pDX, IDC_CHECK1, m_bDebugging);
DDX_Text(pDX, IDC_EDIT1, m_sDebugFlags);
DDX_Check(pDX, IDC_OVERRIDE, m_bUseCustom);
//}}AFX_DATA_MAP
}

View File

@ -24,6 +24,7 @@ public:
CString m_szTestCGI;
BOOL m_bDebugging;
CString m_sDebugFlags;
BOOL m_bUseCustom;
//}}AFX_DATA
CLSID m_clsid;

View File

@ -82,6 +82,8 @@ BOOL CBrowseApp::InitInstance()
m_pDlg = new CBrowseDlg;
m_pDlg->m_clsid = pickerDlg.m_clsid;
m_pDlg->m_bUseCustomDropTarget = pickerDlg.m_bUseCustom;
m_pDlg->m_bUseCustomPopupMenu = pickerDlg.m_bUseCustom;
m_pDlg->Create(IDD_CBROWSE_DIALOG);
m_pMainWnd = m_pDlg;

View File

@ -101,7 +101,7 @@ IDD_CBROWSE_DIALOG DIALOGEX 0, 0, 293, 320
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "CBrowse"
FONT 8, "MS Sans Serif"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
CONTROL "",IDC_TAB_MARKER,"Static",SS_BLACKFRAME,7,223,279,89
RTEXT "&URL:",IDC_STATIC,7,13,18,8
@ -218,7 +218,7 @@ IDI_TEST ICON DISCARDABLE "res\\test.ico"
// Dialog
//
IDD_PICKBROWSER DIALOG DISCARDABLE 0, 0, 284, 223
IDD_PICKBROWSER DIALOG DISCARDABLE 0, 0, 284, 232
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Welcome to CBrowse!"
FONT 8, "MS Sans Serif"
@ -233,15 +233,18 @@ BEGIN
LTEXT "Some of the tests require a test URL. You may change the default one if you want. Ensure that the URL is valid otherwise the tests might fail!",
IDC_STATIC,7,108,213,25
EDITTEXT IDC_TESTURL,7,136,213,13,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,227,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,227,24,50,14
LTEXT "Some tests also need a CGI URL, enter that here:",
IDC_STATIC,7,154,157,8
EDITTEXT IDC_TESTCGI,7,167,213,13,ES_AUTOHSCROLL
CONTROL "Override default drop target and popup menus",
IDC_OVERRIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,186,
207,10
CONTROL "Turn on Mozilla debugging (creates a mozilla.log file)",
IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,187,
IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,198,
172,10
EDITTEXT IDC_EDIT1,7,202,213,14,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT1,7,211,213,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,227,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,227,24,50,14
END
IDD_TAB_MESSAGES DIALOG DISCARDABLE 0, 0, 275, 75
@ -291,7 +294,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 277
TOPMARGIN, 7
BOTTOMMARGIN, 216
BOTTOMMARGIN, 225
END
IDD_TAB_MESSAGES, DIALOG

View File

@ -43,6 +43,7 @@
#define IDC_EDIT1 1022
#define IDC_EDITMODE 1023
#define IDC_EDITBAR_MARKER 1025
#define IDC_OVERRIDE 1026
#define IDB_BOLD 32771
#define IDB_ITALIC 32772
#define IDB_UNDERLINE 32773
@ -58,7 +59,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 141
#define _APS_NEXT_COMMAND_VALUE 32779
#define _APS_NEXT_CONTROL_VALUE 1026
#define _APS_NEXT_CONTROL_VALUE 1027
#define _APS_NEXT_SYMED_VALUE 107
#endif
#endif