The following example hosts an instance of the WebBrowser control and calls the Navigate2 method to load a web page that implements a CCS dock menu. Once loaded, it connects with the events fired by the page to detect which image has been clicked.
The CCS dock menu is the work of Nick La: http://www.ndesign-studio.com/blog/mac/css-dock-menuhttp:/www.ndesign-studio.com/blog/mac/css-dock-menu
I just have modified the .html pages to add identifiers to the anchors.
The attached file contains all you need to run the example. Preserve directory structure when unzipping to the folder of your choice.
' ########################################################################################
' This example demonstrates how to load a web page an detect which element has been clicked.
' ########################################################################################
' CSED_PBWIN - Use the PBWIN compiler
#COMPILE EXE
#DIM ALL
%UNICODE = 1
' // Include files for external files
%USEWEBBROWSER = 1 ' // Use the WebBrowser control
#INCLUDE ONCE "CWindow.inc" ' // CWindow class
%IDC_WEBBROWSER = 101
' ========================================================================================
' Main
' ========================================================================================
FUNCTION WinMain (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS WSTRINGZ PTR, BYVAL nCmdShow AS LONG) AS LONG
' // Set process DPI aware
' SetProcessDPIAware
' // Create an instance of the class
LOCAL pWindow AS IWindow
pWindow = CLASS "CWindow"
IF ISNOTHING(pWindow) THEN EXIT FUNCTION
' // Create the main window
pWindow.CreateWindow(%NULL, "CSS Dock Menu", 0, 0, 0, 0, 0, 0, CODEPTR(WindowProc))
' // Set the client size
pWindow.SetClientSize 650, 350
' // Center the window
pWindow.CenterWindow
' // Add a WebBrowser control
LOCAL hCtl AS DWORD
LOCAL bstrURL AS WSTRING
' // You can pass a URL
bstrURL = EXE.Path$ & "css-dock-top.html"
' // Create an instance of the event class
LOCAL pWBEvents AS DWebBrowserEvents2Impl
pWBEvents = CLASS "CDWebBrowserEvents2"
' // Create the control
hCtl = pWindow.AddWebBrowserControl(pWindow.hwnd, %IDC_WEBBROWSER, bstrURL, pWBEvents, 0, 0, pWindow.ClientWidth, pWindow.ClientHeight)
SetFocus hCtl
' // Default message pump (you can replace it with your own)
pWindow.DoEvents(nCmdShow)
END FUNCTION
' ========================================================================================
' ========================================================================================
' Main Window procedure
' ========================================================================================
FUNCTION WindowProc (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
STATIC pWindow AS IWindow ' // Reference to the IWindow interface
SELECT CASE wMsg
CASE %WM_CREATE
' // Get a reference to the IWindow interface from the CREATESTRUCT structure
pWindow = CWindow_GetObjectFromCreateStruct(lParam)
EXIT FUNCTION
CASE %WM_COMMAND
SELECT CASE LO(WORD, wParam)
CASE %IDCANCEL
IF HI(WORD, wParam) = %BN_CLICKED THEN
SendMessage hWnd, %WM_CLOSE, 0, 0
EXIT FUNCTION
END IF
END SELECT
CASE %WM_SYSCOMMAND
' Capture this message and send a WM_CLOSE message
IF (wParam AND &HFFF0) = %SC_CLOSE THEN
SendMessage hWnd, %WM_CLOSE, 0, 0
EXIT FUNCTION
END IF
CASE %WM_SIZE
' Resizes the control
IF wParam <> %SIZE_MINIMIZED THEN
pWindow.MoveWindow GetDlgItem(hwnd, %IDC_WEBBROWSER), 0, 0, pWindow.ClientWidth, pWindow.ClientHeight, %TRUE
END IF
CASE %WM_DESTROY
PostQuitMessage 0
EXIT FUNCTION
END SELECT
FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)
END FUNCTION
' ========================================================================================
' ########################################################################################
' Class CDWebBrowserEvents2
' Interface name = DWebBrowserEvents2
' IID = {34A715A0-6587-11D0-924A-0020AFC7AC4D}
' Web Browser Control events interface
' Attributes = 4112 [&H1010] [Hidden] [Dispatchable]
' ########################################################################################
CLASS CDWebBrowserEvents2 GUID$("{700B73A2-CCFC-4FE0-B9AC-D5853D71B7B9}") AS EVENT
INSTANCE pIWebBrowser2 AS IWebBrowser2
INSTANCE pHTMLDocumentEvents2 AS HTMLDocumentEvents2Impl
' =====================================================================================
CLASS METHOD Destroy
' Disconnect events
IF ISOBJECT(pHTMLDocumentEvents2) THEN EVENTS END pHTMLDocumentEvents2
END METHOD
' =====================================================================================
' ========================================================================================
' Implementation of the interface
' ========================================================================================
INTERFACE DWebBrowserEvents2Impl GUID$("{34A715A0-6587-11D0-924A-0020AFC7AC4D}") AS EVENT
INHERIT IDispatch
' =====================================================================================
METHOD BeforeNavigate2 <250> ( _
BYVAL pDisp AS IDispatch _ ' __in IDispatch* pDisp
, BYREF vURL AS VARIANT _ ' __in VARIANT* URL
, BYREF vFlags AS VARIANT _ ' __in VARIANT* Flags
, BYREF vTargetFrameName AS VARIANT _ ' __in VARIANT* TargetFrameName
, BYREF vPostData AS VARIANT _ ' __in VARIANT* PostData
, BYREF vHeaders AS VARIANT _ ' __in VARIANT* Headers
, BYREF bCancel AS INTEGER _ ' __in_out VARIANT_BOOL* Cancel
) ' void
' Get a reference to the WebBrowser control
IF ISNOTHING(pIWebBrowser2) THEN pIWebBrowser2 = pDisp
IF ISNOTHING(pIWebBrowser2) THEN EXIT METHOD
' If there was a previous loaded page, disconnect from the events
IF ISOBJECT(pHTMLDocumentEvents2) THEN
EVENTS END pHTMLDocumentEvents2
pHTMLDocumentEvents2 = NOTHING
END IF
END METHOD
' =====================================================================================
' =====================================================================================
METHOD DocumentComplete <259> ( _
BYVAL pDisp AS IDispatch _ ' __in IDispatch* pDisp
, BYREF vURL AS VARIANT _ ' __in VARIANT* URL
) ' void
' Get a reference to the IHTMLDocument2 interface
LOCAL pHTMLDocument2 AS IHTMLDocument2
pHTMLDocument2 = pIWebBrowser2.Document
IF ISNOTHING(pHTMLDocument2) THEN EXIT METHOD
' Connect to the events fired by the page
pHTMLDocumentEvents2 = CLASS "CHTMLDocumentEvents2"
IF ISNOTHING(pHTMLDocumentEvents2) THEN EXIT METHOD
EVENTS FROM pHTMLDocument2 CALL pHTMLDocumentEvents2
END METHOD
' =====================================================================================
END INTERFACE
END CLASS
' ########################################################################################
' ########################################################################################
' Class CHTMLDocumentEvents2
' Interface name = HTMLDocumentEvents2
' IID = {3050F613-98B5-11CF-BB82-00AA00BDCE0B}
' Attributes = 4112 [&H1010] [Hidden] [Dispatchable]
' ########################################################################################
CLASS CHTMLDocumentEvents2 GUID$("{1FFB0071-8BCC-4BBD-BC29-A662FAE87C82}") AS EVENT
INTERFACE HTMLDocumentEvents2Impl GUID$("{3050F613-98B5-11CF-BB82-00AA00BDCE0B}") AS EVENT
INHERIT IDispatch
' =====================================================================================
METHOD onclick <-600> ( _
BYVAL pEvtObj AS IHTMLEventObj _ ' __in IHTMLEventObj* pEvtObj
) ' void
LOCAL pElement AS IHTMLElement ' // Element that has fired the event
LOCAL pHTMLDocument2 AS IHTMLDocument2 ' // Document object
LOCAL bstrId AS WSTRING ' // Identifier of the element that has fired the event
' // Get a reference to the element that has fired the event
IF ISOBJECT(pEvtObj) THEN pElement = pEvtObj.srcElement
IF ISNOTHING(pElement) THEN EXIT METHOD
' // Get a reference to the IHTMLDocument2 interface
pHTMLDocument2 = pElement.document
IF ISNOTHING(pHTMLDocument2) THEN EXIT METHOD
' // Get the identifier of the element that has fired the event
bstrId = pElement.id
SELECT CASE bstrId
CASE "Home", "Contact", "Portfolio", "Music", "Video", "History", "Calendar", "Links", "RSS", "RSS2"
MSGBOX "You have clicked " & bstrId
END SELECT
END METHOD
' =====================================================================================
END INTERFACE
END CLASS
' ########################################################################################
(http://www.jose.it-berater.org/captures/css-dock-menu.png)