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

📄 mainwnd.cpp

📁 wince IE浏览器的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

        pNewWnd = new CMainWnd;

        if (!pNewWnd)
        {
            return E_OUTOFMEMORY;
        }

        pNewWnd->_lpszUrl = lpszUrl;
        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); // the thread is on its own	

        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::Invoke (
                              DISPID dispidMember,
                              REFIID riid,
                              LCID lcid,
                              WORD wFlags,
                              DISPPARAMS FAR* pdparams,
                              VARIANT FAR* pvarResult,
                              EXCEPINFO FAR* pexcepinfo,
                              UINT FAR* puArgErr
                              )
{
    switch (dispidMember)
    {
#if 0
    case DISPID_FILEDOWNLOAD:
	{
		RETAILMSG(1,(L"FILEDOWNLOAD\r\n"));
	}
	break;
#endif
#ifndef NOSTATUSBAR
    case DISPID_STATUSTEXTCHANGE:
        {
            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:
        if(pdparams && pdparams->rgvarg[0].vt == VT_I4)
        {
                TCHAR szFakeIcon[4];
                if(pdparams->rgvarg[0].lVal != 0)
                {
                    wcscpy(szFakeIcon, L"S");
                }
                else
                {
                    wcscpy(szFakeIcon, L" ");
                }
                SendMessage(_hWndStatus, SB_SETTEXT, 2, (LPARAM)szFakeIcon);
        }
        break;

    case DISPID_PROGRESSCHANGE:
        {
            LONG lProgMax = pdparams->rgvarg[0].lVal;
            LONG lProg = pdparams->rgvarg[1].lVal;
            UINT nPercent = (lProg == -1) ? 0 : (lProgMax) ? lProg*100/lProgMax : 0;
            SendMessage(_hWndProgress, PBM_SETPOS, nPercent, 0);
        }
        break;
#endif	//NOSTATUSBAR
    
#if 0
    // notification for file download
    case DISPID_FILEDOWNLOAD:
	break;
#endif

    case DISPID_NAVIGATECOMPLETE2:
#ifndef NOSTATUSBAR
#ifdef ZONEDISPLAY
		UpdateZonePane();
#endif //ZONEDISPLAY
#endif //NOSTATUSBAR
#ifndef NOCOMMANDBAR
        if (_bTyped)
        {
            UpdateUrlList(pdparams->rgvarg[0].pvarVal->bstrVal);
            _bTyped = FALSE;
        }
        else
        {
            BSTR bstrUrl = NULL;
            _pBrowser->get_LocationURL(&bstrUrl);
#if 0            
            UpdateUrlList((LPCTSTR)bstrUrl);
#endif            
            SendMessage(_hWndAddressCombo, WM_SETTEXT, 0, (LPARAM)bstrUrl);
            SysFreeString(bstrUrl);        
        }
#endif
        break;

#ifndef NOCOMMANDBAR
    case DISPID_COMMANDSTATECHANGE:
    {
        DWORD dwState;
        DWORD dwId = -1;
        
        switch ((LONG)pdparams->rgvarg[1].lVal) {
        case CSC_NAVIGATEFORWARD :
            dwId = ID_GO_FORWARD;
            break;
        case CSC_NAVIGATEBACK :
            dwId = ID_GO_BACK;
            break;
        }

        if (dwId != -1) {
            dwState = SendMessage (_hWndToolBar, TB_GETSTATE, dwId, 0);
            if ((BOOL)pdparams->rgvarg[0].boolVal) {
                dwState |= TBSTATE_ENABLED;
            } else {
                dwState &= ~(TBSTATE_ENABLED);
            }
            SendMessage (_hWndToolBar, TB_SETSTATE, dwId, dwState);
        }
        break;
    }
#endif	//NOCOMMANDBAR

    case DISPID_TITLECHANGE:
        {
            if (pdparams && pdparams->rgvarg[0].vt == VT_BSTR)
            {
            
                TCHAR *szTitle = new TCHAR[MAXLEN*2];
                if(!szTitle)
                    break;
                    
                _tcsncpy(_szTitle, pdparams->rgvarg[0].bstrVal, MAXLEN);
                _tcsncpy(szTitle, pdparams->rgvarg[0].bstrVal, MAXLEN);
                _tcscat(szTitle, LOADSTRING(IDS_HYPHEN));
                _tcscat(szTitle, LOADSTRING(IDS_IE));

                SetWindowText(_hWnd, szTitle);
                delete[] szTitle;
            }
            break;
        }

    case DISPID_ONQUIT:
        PostMessage(_hWnd, WM_CLOSE, 0, 0L);
        break;

#ifndef NOCOMMANDBAR
    case DISPID_DOWNLOADBEGIN:
        _pthrdAnimation->StartAnimation();
        break;
    case DISPID_DOWNLOADCOMPLETE:
    case DISPID_DOCUMENTCOMPLETE:
        _pthrdAnimation->StopAnimation();
        SendMessage(_hWndProgress, PBM_SETPOS, 0, 0);
		
		// Make sure that the current fontsize is checked.
		ChangeFontSize(0);
        break;
#endif	//NOCOMMANDBAR

    case DISPID_NEWWINDOW2:
        return HandleNewWindow2(NULL, pdparams);
        break;

    case DISPID_PROPERTYCHANGE:
    case DISPID_BEFORENAVIGATE2:
        break;
    default:
        return DISP_E_MEMBERNOTFOUND;
    }
    return S_OK;
}

#ifndef NOCOMMANDBAR
EXTERN_C const GUID CGID_MSHTML;
LRESULT CMainWnd::HandleCommand(WPARAM wParam, LPARAM lParam)
{
    UINT nID = LOWORD(wParam);
    switch (nID)
    {
    case ID_ADDRESSBAR:
        if (HIWORD(wParam) == CBN_SELENDOK)
        {
            SelChange();
            return 0;
        }
        break;
#ifndef NOFIND
    case ID_FILE_FIND:
        {
            FindString();
            return 0;
        }
#endif	//NOFIND

#ifndef NOPRINT
    case ID_FILE_PRINT:
        {
			_pBrowser->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);	
            return 0;
        }
    case ID_FILE_PAGESETUP:
        {
                    HandlePageSetup(_hWnd);
                    return 0;
        }
#endif	//NOPRINT

#ifndef NOOFFLINE
	case ID_FILE_OFFLINE:
		{
			INTERNET_CONNECTED_INFO ci;
            DWORD dwBufferLength;

			memset(&ci, 0, sizeof(ci));
            dwBufferLength = sizeof(ci);
			InternetQueryOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &ci, &dwBufferLength);
            ci.dwConnectedState = (ci.dwConnectedState & INTERNET_STATE_DISCONNECTED_BY_USER) ? INTERNET_STATE_CONNECTED : INTERNET_STATE_DISCONNECTED_BY_USER;
			InternetSetOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &ci, sizeof(ci));
			return 0;
		}
#endif //NOOFLINE

    case ID_FILE_OPEN:
          {
			_pBrowser->ExecWB(OLECMDID_OPEN, OLECMDEXECOPT_DODEFAULT, NULL, NULL);	
                    return 0;
          }
          break;

    case ID_FILE_SAVEAS:
          {
                     VARIANT vTitle;
                     BSTR bstrTitle = SysAllocString(_szTitle);
                    if(bstrTitle)
                    {
                        WCHAR *pch = bstrTitle;
                        // Strip dots. Perhaps find a more locale friendly way of doing this?
                        while(*pch)
                        {
                                if(*pch == L'.')  
                                       *pch = L'_';
                                pch++;
                         }
                         vTitle.vt = VT_BSTR;
                         vTitle.bstrVal = bstrTitle;
    			    _pBrowser->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT, &vTitle, NULL);	
    			    SysFreeString(bstrTitle);
    		      }
                    return 0;
          }

	case ID_FILE_CLOSE:
		_pBrowser->ExecWB(OLECMDID_CLOSE, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
		// PostMessage(_hWndBrowser, WM_CLOSE, 0, 0L);
		return 0;

    case ID_EDIT_CUT:
		if (GetFocus()== _hWndAddressEdit)
			SendMessage(_hWndAddressEdit, WM_CUT, WPARAM(0), LPARAM(0));
		else
			_pBrowser->ExecWB(OLECMDID_CUT, OLECMDEXECOPT_DONTPROMPTUSER,
                          NULL, NULL);
        return 0;

    case ID_EDIT_COPY:
		if (GetFocus()== _hWndAddressEdit)
			SendMessage(_hWndAddressEdit, WM_COPY, WPARAM(0), LPARAM(0));
		else
    	    _pBrowser->ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER,
                          NULL, NULL);
        return 0;
    case ID_EDIT_PASTE:
		if (GetFocus() == _hWndAddressEdit)
			SendMessage(_hWndAddressEdit, WM_PASTE, WPARAM(0), LPARAM(0));
		else
	        _pBrowser->ExecWB(OLECMDID_PASTE, OLECMDEXECOPT_DONTPROMPTUSER,
                          NULL, NULL);
        return 0;



    case ID_VIEW_FONTSLARGEST:
    case ID_VIEW_FONTSLARGER:
    case ID_VIEW_FONTSMEDIUM:
    case ID_VIEW_FONTSSMALLER:
    case ID_VIEW_FONTSSMALLEST:
        ChangeFontSize(LOWORD(wParam));
        return 0;

#ifndef NO_FAVORITES
	case ID_FAV_ADD:
		AddToFavorites();
		return 0;

	case ID_FAV_ORG:
		OrganizeFavorites();
		return 0;
#endif

#ifndef NOOPTIONS
    case ID_VIEW_OPTIONS:
    {
       SHELLEXECUTEINFO sei;
       sei.cbSize = sizeof(sei);
       sei.fMask = SEE_MASK_FLAG_NO_UI;
       sei.hwnd = _hWnd;
       sei.lpVerb = NULL;
       sei.lpFile = L"ctlpnl";
       sei.lpParameters = L"inetcpl.cpl";
       sei.lpDirectory = NULL;
       sei.nShow = SW_SHOWNORMAL;

       ShellExecuteEx(&sei);

    }
     //  DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_OPTIONS), _hWnd, (DLGPROC)OptionsDlgProc);
        return 0;
#endif	//NOOPTIONS

    case ID_GO_BACK:
        _pBrowser->GoBack();
        return 0;
    case ID_GO_FORWARD:
        _pBrowser->GoForward();
        return 0;
    case ID_GO_HOME:
        _pBrowser->GoHome();
        return 0;
    case ID_GO_SEARCH:
        _pBrowser->GoSearch();
        return 0;
    case ID_VIEW_REFRESH:
        _pBrowser->Refresh();
        return 0;
    case ID_VIEW_STOP:
        _pBrowser->Stop();
        return 0;
    case ID_FOCUS_URL:
        if (_hWndAddressEdit)
        {
            SetFocus(_hWndAddressEdit);
        }
        return 0;
    default:

#ifndef NO_FAVORITES
    		// handle favorite menu items
	if (nID >= ID_FAVORITE_FIRST && nID <= ID_FAVORITE_LAST)
	{
			TCHAR szUrl[MAX_URL] = {0};

			if (GetUrlFromID(nID, szUrl, MAX_URL))
				_pBrowser->Navigate(szUrl, NULL, NULL, NULL, NULL); 

	  } 
#endif

        // if this is from the encoding popup
        if (IDM_MIMECSET__FIRST__ <= nID && IDM_MIMECSET__LAST__ >= nID)
        {
		    if (_pBrowser)
            {
                IOleCommandTarget* pcmdt;
	            if (SUCCEEDED(_pBrowser->QueryInterface(IID_IOleCommandTarget, (LPVOID*) &pcmdt)))
	            {
                    pcmdt->Exec(&CGID_MSHTML, nID, 0, NULL, NULL);
	                pcmdt->Release();
                }
            }
        }
        return 0;
    }
    return TRUE;
}

VOID CMainWnd::ChangeFontSize(WORD wSize)
{
    VARIANT vaSize;
    vaSize.vt = VT_I4;
	if (0 == wSize) {
		// Setting initial value
		vaSize.vt = 0;
		HRESULT hr = _pBrowser->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
									   NULL, &vaSize);
		wSize = ID_VIEW_FONTSSMALLEST + (WORD)vaSize.lVal;
	} else {
		vaSize.lVal = wSize - ID_VIEW_FONTSSMALLEST;
		HRESULT hr = _pBrowser->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
									   &vaSize, NULL);
	}
    HMENU hMenu = CommandBar_GetMenu(_hWndMenuBar, 0);
    BOOL bRet = CheckMenuRadioItem(hMenu, ID_VIEW_FONTSSMALLEST ,ID_VIEW_FONTSLARGEST, wSize, MF_BYCOMMAND);
    CommandBar_DrawMenuBar(_hWndMenuBar, 0);
}
#endif	//NOCOMMANDBAR




#ifndef NOCOMMANDBAR
LRESULT CALLBACK CMainWnd::AddressEditProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{


    CMainWnd *pMainWnd = (CMainWnd*)GetWindowLong(hwnd, GWL_USERDATA);

    if (!pMainWnd)
    {
        return 0;
    }

    if ((message == WM_CHAR) && (wParam == VK_RETURN))
    {
        int iSpaces = 0;
        TCHAR *szString = new TCHAR[MAXLEN];
        if(!szString)
            goto Leave;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -