📄 myie.cpp
字号:
_hWndCmdband = CommandBands_Create(g_hInstance, _hWnd, (UINT)ID_COMMANDBAND,
RBS_SMARTLABELS|RBS_BANDBORDERS , NULL);//|RBS_AUTOSIZE_himlCmdBand);
REBARBANDINFO rbbi;
memset(&rbbi, 0, sizeof(REBARBANDINFO));
// Menubar
rbbi.cbSize = sizeof(REBARBANDINFO);
rbbi.fMask = RBBIM_ID|RBBIM_IMAGE|RBBIM_STYLE;
rbbi.fStyle = RBBS_NOGRIPPER;
// rbbi[0].cx = 245; // want to be able to size this automatically
rbbi.wID = ID_BAND_CMD;
rbbi.iImage = 1;
if (!CommandBands_AddBands(_hWndCmdband, g_hInstance, 1, &rbbi))
return FALSE;
// _hWndMenuBar = CommandBands_GetCommandBar(_hWndCmdband, 0);
// if (!CommandBar_InsertMenubar(_hWndMenuBar, g_hInstance, (UINT)idMenu, 0))
// return FALSE;
// HWND hwndMenu = CommandBar_GetItemWindow(_hWndMenuBar, 0);
// GetClientRect(hwndMenu, &rc);
// rbbi.cx = 5;
// rbbi.fMask = RBBIM_SIZE;
// SendMessage(_hWndCmdband, RB_SETBANDINFO, 0, (LPARAM)&rbbi);
// Address
WCHAR szAddressLabel[40];
RECT rcComboBox;
GetWindowRect(_hWndAddressCombo, &rcComboBox);
LoadString(g_hInstance, IDS_ADDRESS, szAddressLabel, 40);
rbbi.cbSize = sizeof(REBARBANDINFO);
// rbbi.fMask = RBBIM_CHILD | RBBIM_TEXT | RBBIM_ID | RBBIM_STYLE |
// RBBIM_CHILDSIZE | RBBIM_IMAGE;
rbbi.wID = ID_BAND_ADDR;
//rbbi.fStyle = RBBS_BREAK;
rbbi.cxMinChild = 0;
rbbi.cyMinChild = rcComboBox.bottom - rcComboBox.top;
rbbi.fMask = RBBIM_CHILD| RBBIM_TEXT|RBBIM_ID|RBBIM_IMAGE|RBBIM_SIZE|RBBIM_CHILDSIZE;
rbbi.iImage = 2;
rbbi.hwndChild = _hWndAddressCombo;
rbbi.lpText = (LPWSTR)szAddressLabel;
GetClientRect(_hWnd, &rc);
rbbi.cx = rc.right - 252;//rbbi.cx;
if (!CommandBands_AddBands(_hWndCmdband, g_hInstance, 1, &rbbi))
return FALSE;
// Toolbar
rbbi.cbSize = sizeof(REBARBANDINFO);
rbbi.fMask = RBBIM_ID|RBBIM_IMAGE|RBBIM_SIZE;
rbbi.wID = ID_BAND_TOOL;
rbbi.iImage = 0;
GetClientRect(_hWnd, &rc);
rbbi.cx = 252;//rc.right - rbbi.cx;
if (!CommandBands_AddBands(_hWndCmdband, g_hInstance, 1, &rbbi))
return FALSE;
_hWndToolBar = CommandBands_GetCommandBar(_hWndCmdband, 2);
if ((CommandBar_AddBitmap(_hWndToolBar, g_hInstance, IDB_TBBITMAP,
9, 16, 16)) < 0)
return FALSE;
if (!CommandBar_AddButtons(_hWndToolBar, numButtons, tbBtns))
return FALSE;
return TRUE;
}
HWND CMainWnd::CreateBrowser()
{
HRESULT hr;
IUnknown *pUnk = NULL;
IOleObject *pObject = NULL;
if (!_pBrowser)
{
GetProxyOption();
hr = CoCreateInstance(CLSID_WebBrowser, NULL,
CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
IID_IUnknown, (LPVOID *)(&pUnk));
if (hr)
return FALSE;
hr = pUnk->QueryInterface(IID_IOleObject, (LPVOID *)(&pObject));
if (hr)
goto Cleanup;
DWORD dwFlags;
hr = pObject->GetMiscStatus(DVASPECT_CONTENT, &dwFlags);
if (hr)
goto Cleanup;
if (dwFlags & OLEMISC_SETCLIENTSITEFIRST)
{
IOleClientSite *pClientSite;
hr = QueryInterface(IID_IOleClientSite, (LPVOID *)(&pClientSite));
if (hr)
goto Cleanup;
hr = pObject->SetClientSite(pClientSite);
pClientSite->Release();
if (hr)
goto Cleanup;
}
hr = Activate(pObject);
if (hr)
goto Cleanup;
hr = _pObject->QueryInterface(IID_IWebBrowser2, (void **)&_pBrowser);
if (hr)
goto Cleanup;
// See if there might be a url in lpszUrl
hr = pUnk->QueryInterface(IID_IOleInPlaceActiveObject, (LPVOID *)(&_pIPActiveObj));
if (S_OK!=hr)
_pIPActiveObj = NULL;
hr = S_FALSE;
if (_fEmpty)
{
if (_lpszUrl)
{
LPTSTR lpszUrlAlpha = _lpszUrl;
while (hr == S_FALSE && *lpszUrlAlpha != _T('\0'))
{
if (_istalpha(*lpszUrlAlpha))
hr = S_OK;
lpszUrlAlpha++;
}
}
//////////////mod by ljf 4
if (hr == S_OK)
{
_pBrowser->Navigate(_lpszUrl, NULL, NULL, NULL, NULL);
}else
{
//printf("here,m_nURLType=%d\n",m_nURLType);
if( 0 == m_nURLType )
{
_pBrowser->GoHome();
//_pBrowser->Navigate(_T("about:blank"), NULL, NULL, NULL, NULL);
}
else if( 38 == m_nURLType || 40 == m_nURLType )
{
// wprintf(g_url);
_pBrowser->Navigate(g_url, NULL, NULL, NULL, NULL);
//m_nURLType = 0;
} else
{
DoNavigate();
}
//_pBrowser->Navigate(_T("www.163.com"), NULL, NULL, NULL, NULL);
//_pBrowser->GoHome();*///???
}
}
hr = InitEvents();
}
Cleanup:
if (pUnk)
pUnk->Release();
if (pObject)
pObject->Release();
IOleWindow *pWnd = NULL;
HWND hwndBrowser = NULL;
if (_pBrowser)
{
hr = _pBrowser->QueryInterface(IID_IOleWindow, (LPVOID *)(&pWnd));
if (hr)
return NULL;
}
if (pWnd)
{
hr = pWnd->GetWindow(&hwndBrowser);
pWnd->Release();
}
return hwndBrowser;
}
HRESULT CMainWnd::Activate(IOleObject *pObject)
{
_pObject = pObject;
_pObject->AddRef();
RECT rc;
::GetClientRect(_hWnd, &rc);
HRESULT hr;
hr = _pObject->DoVerb( OLEIVERB_UIACTIVATE, NULL, this, 0, _hWnd, &rc);
if (hr)
goto Cleanup;
Cleanup:
return hr;
}
HRESULT CMainWnd::InitEvents()
{
HRESULT hr;
IConnectionPointContainer *pCPCont = NULL;
DWebBrowserEvents *pEvents = NULL;
if (!_pBrowser)
return S_FALSE;
hr = _pBrowser->QueryInterface(IID_IConnectionPointContainer, (LPVOID *)&pCPCont);
if (hr)
return S_FALSE;
hr = pCPCont->FindConnectionPoint(DIID_DWebBrowserEvents2, &_pCP);
if (hr)
{
_pCP = NULL;
goto Cleanup;
}
hr = QueryInterface(DIID_DWebBrowserEvents2, (LPVOID *)(&pEvents));
if (hr)
goto Cleanup;
hr = _pCP->Advise(pEvents, &(_dwEventCookie));
if (hr)
goto Cleanup;
Cleanup:
if (pCPCont)
pCPCont->Release();
if (pEvents)
pEvents->Release();
return hr;
}
HRESULT HandleNewWindow2(LPTSTR lpszUrl, DISPPARAMS FAR* pdparams,CString szTitle,int nType,short nShouldAuth)
{
HANDLE hThread;
CMainWnd *pNewWnd;
IDispatch *pDispatch;
HRESULT hr = S_OK;
pNewWnd = new CMainWnd;
if (!pNewWnd)
{
return E_OUTOFMEMORY;
}
pNewWnd->m_szTitle = szTitle;
pNewWnd->m_nURLType = nType;
pNewWnd->_lpszUrl = lpszUrl;
pNewWnd->bShouldAuthor = nShouldAuth;
if(!pdparams)
pNewWnd->_fEmpty = TRUE;
pNewWnd->hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!pNewWnd->hEvent)
{
}
InterlockedIncrement(&glThreadCount);
hThread = CreateThread(NULL, g_dwMainWindowStackSize, NewWindow, (LPVOID)pNewWnd, STACK_SIZE_PARAM_IS_A_RESERVATION, NULL);
if (!hThread)
{
delete pNewWnd;
InterlockedDecrement(&glThreadCount);
return E_OUTOFMEMORY;
}
WaitForSingleObject(pNewWnd->hEvent, INFINITE);
CloseHandle(hThread);
if(pdparams)
{
if (pNewWnd->_pBrowser)
{
hr = pNewWnd->_pBrowser->QueryInterface(IID_IDispatch, (LPVOID *)(&pDispatch));
}
else
{
hr = E_FAIL;
pDispatch = NULL;
}
*(pdparams->rgvarg[0].pboolVal) = 0;
*(pdparams->rgvarg[1].ppdispVal) = pDispatch;
}
return hr;
}
STDMETHODIMP CMainWnd::GetHostInfo(DOCHOSTUIINFO *pInfo)
{
pInfo->cbSize = sizeof(DOCHOSTUIINFO);
//if( 0 != m_nURLType && 38 != m_nURLType )
{
// pInfo->dwFlags |= DOCHOSTUIFLAG_NO3DBORDER|
// DOCHOSTUIFLAG_FLAT_SCROLLBAR;
//pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_SCROLL_NO;
//pInfo->dwFlags |= DOCHOSTUIFLAG_SCROLL_NO;
}
return S_OK;
}
STDMETHODIMP CMainWnd::Invoke (
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS FAR* pdparams,
VARIANT FAR* pvarResult,
EXCEPINFO FAR* pexcepinfo,
UINT FAR* puArgErr
)
{
switch (dispidMember)
{
case DISPID_AMBIENT_DLCONTROL:
if(pvarResult)
{
V_VT(pvarResult) = VT_I4;
// always set these three unless they should be disabled
pvarResult->lVal = DLCTL_DLIMAGES|DLCTL_VIDEOS|DLCTL_BGSOUNDS;
// put the browser in download only mode
//pvarResult->lVal |= DLCTL_NO_FRAMEDOWNLOAD;
}
break;
case DISPID_STATUSTEXTCHANGE:
if(_hWndStatus && _fShowStatusBar)
{
if (pdparams && pdparams->rgvarg[0].vt == VT_BSTR)
{
// NULL terminate the string
TCHAR szStatusText[128];
wcsncpy(szStatusText, pdparams->rgvarg[0].bstrVal, 128);
szStatusText[128 - 1] = 0;
SendMessage(_hWndStatus, SB_SETTEXT, 0, (LPARAM)szStatusText);
}
}
break;
case DISPID_SETSECURELOCKICON:
{
}
break;
case DISPID_PROGRESSCHANGE:
{
if( _hWndProgress )
{
LONG lProgMax = pdparams->rgvarg[0].lVal;
LONG lProg = pdparams->rgvarg[1].lVal;
UINT nPos = (lProg == -1) ? 999 : ((lProg-1)%1000);
SendMessage(_hWndProgress, PBM_SETPOS, nPos, 0);
}
}
break;
// notification for file download
case DISPID_FILEDOWNLOAD:
break;
case DISPID_NAVIGATECOMPLETE2:
if (_bTyped)
{
UpdateUrlList(pdparams->rgvarg[0].pvarVal->bstrVal);
_bTyped = FALSE;
}
else
{
if( _hWndAddressCombo )
{
BSTR bstrUrl = NULL;
_pBrowser->get_LocationName(&bstrUrl);
if( bstrUrl )
{
wchar_t* pres = _T("res:");
if( wcsncmp(bstrUrl,pres,wcslen(pres)) != 0 )
SendMessage(_hWndAddressCombo, WM_SETTEXT, 0, (LPARAM)bstrUrl);
} else
SendMessage(_hWndAddressCombo, WM_SETTEXT, 0, (LPARAM)bstrUrl);
if(bstrUrl)
SysFreeString(bstrUrl);
}
}
break;
case DISPID_COMMANDSTATECHANGE:
break;
case DISPID_TITLECHANGE:
if (pdparams && pdparams->rgvarg[0].vt == VT_BSTR)
{
TCHAR szTitle[200];
if( 0 == m_nURLType )//|| 38 == m_nURLType )
{
int len = wcslen(pdparams->rgvarg[0].bstrVal);
_tcsncpy(_szTitle, pdparams->rgvarg[0].bstrVal, MAX_URL-1);
_tcsncpy(szTitle, pdparams->rgvarg[0].bstrVal, 100);
if(len > 100)
_tcscat(szTitle, L"...");
wchar_t* pres = _T("res:");
if( wcsncmp(szTitle,pres,wcslen(pres)) == 0 )
wsprintf(szTitle,L" - ");
else
_tcscat(szTitle, L" - ");
_tcscat(szTitle, m_szTitle);
} else
{
_tcscpy(szTitle, m_szTitle);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -