mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
Implemented ShowContextMenu so that CBrowse can display custom popup menus in response to right mouse clicks
This commit is contained in:
parent
8be27000b1
commit
f96f1cbb98
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@ public:
|
||||
CString m_szTestCGI;
|
||||
BOOL m_bDebugging;
|
||||
CString m_sDebugFlags;
|
||||
BOOL m_bUseCustom;
|
||||
//}}AFX_DATA
|
||||
|
||||
CLSID m_clsid;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user