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

📄 mainwnd.cpp

📁 wince下面IE工程原代码精简功能版,比较不错的工程,可以直接修改成实际的应用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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_ZOOMUP:                         /////放大
		_wZoom++;
		if(_wZoom > 4)
			_wZoom = 4;
		ChangeFontSize(FALSE);
		return 0;		
	case ID_ZOOMDOWN:                       /////缩小
		_wZoom--;
		if(_wZoom < 0)
			_wZoom = 0;
		ChangeFontSize(FALSE);
		return 0;
	case ID_CLOSE:                          /////关闭
		_pBrowser->ExecWB(OLECMDID_CLOSE, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
		return 0;
	case ID_FOCUS_URL:
	case ID_OPEN:                           /////“打开”对话框 ,键入URL
		{
			WCHAR *szURL = new TCHAR[MAX_URL];
			if(szURL)
			{
				int nRet = 0;                
				BSTR bstrUrl = NULL;
				_pBrowser->get_LocationURL(&bstrUrl);  //////得到当前窗口显示的网页的URL
				StringCchCopy(szURL, MAX_URL, (LPCTSTR)bstrUrl);
				SysFreeString(bstrUrl);
				//////创建对话框
				nRet =  DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_OPEN_DIALOG), _hWnd, OpenURLDlgProc, (long)szURL);
				if(nRet == 1)   ///////在原有窗口中打开网页
				{
					_pBrowser->Navigate(szURL, NULL, NULL, NULL, NULL);
				}
				else if(nRet == 2)  //////在新窗口中打开网页
				{
					HandleNewWindow2(szURL, NULL);
				}
				delete[] szURL;
			}
        }
		return 0;
	case ID_FULLSCREEN:       ////////主窗口满屏显示
        {
            DWORD dwStyle = GetWindowLong(_hWnd, GWL_STYLE);
            if(_fFullScreen)
            {
                dwStyle |= (WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME);
                SetWindowLong(_hWnd, GWL_STYLE, dwStyle);
                SetWindowPos(_hWnd,NULL,  _rcWnd.left, _rcWnd.top, _rcWnd.right-_rcWnd.left, 
					         _rcWnd.bottom-_rcWnd.top, SWP_NOZORDER);
                _fFullScreen = FALSE;
            }
            else
            {
                RECT rcWorkArea;
                
                SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
                _fFullScreen = TRUE;
                dwStyle &= ~(WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME);
                
                SetWindowLong(_hWnd, GWL_STYLE, dwStyle);
                SetWindowPos(_hWnd,NULL,  rcWorkArea.left, rcWorkArea.top, rcWorkArea.right-rcWorkArea.left,
					         rcWorkArea.bottom-rcWorkArea.top, SWP_NOZORDER);		
            }
		}
		return 0;
    }
    return 0;
}

EXTERN_C const GUID CGID_ShellDocView;

///////CMainWnd的消息处理函数
LRESULT CALLBACK CMainWnd::MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    CMainWnd *pMainWnd = (CMainWnd*)GetWindowLong(hwnd, GWL_USERDATA);

    if (pMainWnd)
    {
        switch (message)
        {
        
        case WM_CLOSE:
        case WM_DESTROY:
            if(pMainWnd)
                pMainWnd->Close();
            SetWindowLong(hwnd, GWL_USERDATA, (DWORD)0);
            ::PostQuitMessage(0);         /////发送 WM_QUIT 消息
            break;
	case WM_SETFOCUS:             /////获得焦点
		if (pMainWnd->_pIPActiveObj)
		{
			pMainWnd->_pIPActiveObj->OnFrameWindowActivate(LOWORD(wParam) != WA_INACTIVE);
		}
		return 0;
        case WM_SIZE:
            {
                RECT rcWnd;
                GetClientRect(hwnd, &rcWnd);
                SetWindowPos(pMainWnd->_hWndBrowser,  
					                            NULL,
					                            0,
					                            0,
					                            rcWnd.right-rcWnd.left, 
					                            rcWnd.bottom - rcWnd.top, 
					                            SWP_NOZORDER);		
            }
            // FALL THROUGH
        case  WM_MOVE:
                  if(!pMainWnd->_fFullScreen)  
		        GetWindowRect(hwnd, &pMainWnd->_rcWnd);			                                       
            break;
        case WM_COMMAND:         /////得到命令,执行HandleCommand
            return pMainWnd->HandleCommand(wParam, lParam);
            break;

        case WM_NOTIFY:
	    break;

        case WM_INITMENUPOPUP:
            break;

        case WM_SETTINGCHANGE:   /////这个消息由OS发送到所有顶层窗口,当系统有改变时
            if(wParam == SPI_SETWORKAREA)
            {
                if(pMainWnd->_fFullScreen)  //////全屏
                {
                    RECT rcWorkArea;
                    // no need to change the window style here, just adjust for the new work-area.
                    SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
                    SetWindowPos(pMainWnd->_hWnd,NULL,  rcWorkArea.left, rcWorkArea.top, rcWorkArea.right-rcWorkArea.left, rcWorkArea.bottom-rcWorkArea.top, SWP_NOZORDER);
                }
            }
            break;
        default:
            break;
        }
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

//////翻译消息前的处理
BOOL CMainWnd::PreTranslateMessage(LPMSG pMsg)
{
    if (::TranslateAccelerator(_hWnd, _hAccelTbl, pMsg))  //first shot to the main frame
        return TRUE;

    //then to mshtml
    if (_pIPActiveObj && pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
    {
        HRESULT hr = _pIPActiveObj->TranslateAccelerator(pMsg);
        return (hr != S_FALSE);
    }
    return FALSE;
}

//////改变字体大小
VOID CMainWnd::ChangeFontSize(BOOL fInit)
{
        VARIANT vaSize;
        vaSize.vt = VT_I4;

	if (fInit) {
		// Setting initial value
		vaSize.vt = 0;
		HRESULT hr = _pBrowser->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
									   NULL, &vaSize);
		_wZoom = vaSize.lVal;
	} else {
		vaSize.lVal = _wZoom;
		HRESULT hr = _pBrowser->ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,
									   &vaSize, NULL);
	}
}

//////关闭CMainWnd
VOID CMainWnd::Close()
{
    RETAILMSG(1,(L"IESIMPLE CMainWnd::Close"));

    // Tell the shell to die off
    SendMessage(_hWndBrowser, WM_CLOSE, 0,0);     ///发送CLOSE消息到Browser窗口

	if(_pIPActiveObj)
	{
		_pIPActiveObj->Release();
	}
    _pIPActiveObj = NULL;
	if(_pCP)
	{
		_pCP->Unadvise(_dwEventCookie);
		_pCP->Release();
	}
    _pCP = NULL;
	if(_pObject)
	{
		_pObject->Close(FALSE);
		_pObject->Release();
	}
    _pObject = NULL;
	if(_pBrowser)
	    _pBrowser->Release();
    _pBrowser = NULL;

}

////////查找字符串
HRESULT CMainWnd::FindString()
{
    LPDISPATCH pDisp = NULL;
    LPOLECOMMANDTARGET pCmdTarg = NULL;
    HRESULT sts = S_OK;
    VARIANTARG var;

#define GOERROR_S(bNotCond)  {if (!(bNotCond)) goto errorS; }

    if (!_pBrowser)
        return S_OK;
    sts = _pBrowser->get_Document(&pDisp);
    GOERROR_S(pDisp);
    sts = pDisp->QueryInterface(IID_IOleCommandTarget, (LPVOID*)&pCmdTarg);
    GOERROR_S(pCmdTarg);

    var.vt   = VT_I4;
    var.lVal = 0;
    sts = pCmdTarg->Exec(
                        NULL,
                        OLECMDID_FIND,
                        MSOCMDEXECOPT_PROMPTUSER,
                        NULL,
                        &var);

    errorS:
    if (pCmdTarg)
        pCmdTarg->Release(); // release document's command target
    if (pDisp)
        pDisp->Release();    // release document's dispatch interface
    return sts;
}

BOOL HandleBrowse(HWND hwndOwner, WCHAR *szURL);
 
///////“打开”对话框的消息处理函数      
extern "C" BOOL APIENTRY OpenURLDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam)
{
    WCHAR *szURL = (WCHAR *)GetWindowLong(hDlg,DWL_USER); 
    int         nRet = 4;
    
    switch(message)
    {		
	case WM_INITDIALOG:
		{
			if(!lParam)
			{
				EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);  
				EnableWindow(GetDlgItem(hDlg, IDC_BROWSE), FALSE);
			}
			else
			{
				szURL = (WCHAR *)lParam;
				SetWindowLong(hDlg, DWL_USER, (LONG)szURL);
				SendMessage(GetDlgItem(hDlg, IDC_URL_EDIT), EM_LIMITTEXT, MAX_URL-1, 0);
				if(szURL[0])
				{                            
					SetDlgItemText(hDlg, IDC_URL_EDIT, szURL);
				}
			}
			
		}
		return TRUE;
		
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{			
		case IDOK:
			{
				GetDlgItemText(hDlg, IDC_URL_EDIT, szURL, MAX_URL-1);  //////得到用户输入的szURL   
				BOOL bNewWnd = SendMessage(GetDlgItem(hDlg, IDC_NEWWINDOW), BM_GETCHECK, 0L, 0L);
				nRet = (bNewWnd) ? 2 : 1;   /////是否打开新窗口
			}
		case IDCANCEL:
			EndDialog(hDlg, nRet);
			return TRUE;
			
			
		case IDC_BROWSE:
			if(HandleBrowse(hDlg, szURL))    ////文件打开对话框
			{
				SetDlgItemText(hDlg, IDC_URL_EDIT, szURL);
			}       
			
		default:
			return (TRUE);
		}
		break;
		
        case WM_DESTROY:
            SetWindowLong(hDlg, DWL_USER, 0);
            break;
			
    }
    return (FALSE);

}

////文件打开对话框
extern HINSTANCE   g_hInstance;
BOOL HandleBrowse(HWND hwndOwner, WCHAR *szURL)
{

    OPENFILENAME    ofn;
    WCHAR           wchFilter[MAX_PATH];
    WCHAR           wchFile[MAX_PATH+8]; 
    int             cbLen;
 
     // Initialize ofn struct
    memset(&ofn, 0, sizeof(ofn));
    ofn.lStructSize     = sizeof(ofn);
    ofn.hwndOwner       = hwndOwner;
    ofn.Flags           = OFN_FILEMUSTEXIST |
                            OFN_PATHMUSTEXIST   |
                            OFN_OVERWRITEPROMPT |
                            OFN_HIDEREADONLY;

   cbLen = LoadString(g_hInstance, IDS_BROWSEFILTER,
                       wchFilter, MAX_PATH-2);

    if (cbLen>0)
    {
        for (; cbLen >= 0; cbLen--)
        {
            if (wchFilter[cbLen]== L'@')
            {
                wchFilter[cbLen] = 0;
            }
        }
    }
    else
    {
        return FALSE;
    }
    
    ofn.lpstrFilter = wchFilter;
    ofn.nFilterIndex = 1;
    wcscpy(wchFile, L"file://");
    
    ofn.lpstrFile = wchFile+wcslen(wchFile);  // prefix the string with "file://"
    ofn.nMaxFile = MAX_PATH;
    if (GetOpenFileName(&ofn))
    {
        wcsncpy(szURL, wchFile, MAX_URL-1);
        return TRUE;
    }
    return FALSE;
}


⌨️ 快捷键说明

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