⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myie.cpp

📁 wince42 开发的IE, 640X480, xscale平台,没有实现flash插件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    
    _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 + -