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

📄 myie.cpp

📁 wince42 开发的IE, 640X480, xscale平台,没有实现flash插件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                SetWindowText(_hWnd, szTitle);
            }
            break;

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

    case DISPID_DOWNLOADBEGIN:		
//		printf("DISPID_DOWNLOADBEGIN......\n");
		_wDLCCounter++;
		if( _hWndProgress )
			SetWindowPos(_hWndProgress, HWND_TOP, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
        break;
    case DISPID_DOWNLOADCOMPLETE:
		_wDLCCounter--;
		if(_wDLCCounter <= 0)
		{
			SetWindowPos(_hWndProgress,NULL, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
			ChangeFontSize(TRUE);
			_wDLCCounter = 0;
		}
        break;
    case DISPID_DOCUMENTCOMPLETE:
//		printf("DISPID_DOCUMENTCOMPLETE......\n");
		_wDLCCounter--;
		if(_wDLCCounter <= 0)
		{
			if( _hWndProgress )
				SetWindowPos(_hWndProgress,NULL, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
			ChangeFontSize(TRUE);
			_wDLCCounter = 0;
		}
		if( bShouldAuthor && bFirstTime )
		{
			IDispatch* pDoc;	
			_pBrowser->get_Document(&pDoc);
			if( pDoc )
			{		
				DoJump(pDoc);
				//pDoc->Release();		//???
			}
			bFirstTime = false;
		}
        break;
		
    case DISPID_NEWWINDOW2:
		{
			//设置是否允许弹出窗口
			READYSTATE m_ReadyState;
			_pBrowser->get_ReadyState(&m_ReadyState);
			if ( m_ReadyState != READYSTATE_COMPLETE )
			{
				*pdparams->rgvarg[0].pboolVal = TRUE;
				return S_OK;
			}
			else
			{
				return HandleNewWindow2(NULL, pdparams,m_szTitle,m_nURLType);
				//*pDispParams->rgvarg[0].pboolVal = FALSE;
				//return S_OK;
			}
        //pdparams->rgvarg[1].boolVal = VARIANT_TRUE;
        //break;                
            break;
		}

    case DISPID_PROPERTYCHANGE:		
    case DISPID_BEFORENAVIGATE2:
		//printf("DISPID_BEFORENAVIGATE2.......\n");		
        break;
    default:
        return DISP_E_MEMBERNOTFOUND;
    }
    return S_OK;
}

void CMainWnd::DoNavigate()
{	
	//printf("DoNavigate,");
	wchar_t path[100]={0};
	GetModuleFileName(NULL,path,sizeof(path));
	wchar_t ss[100]={0};
	wsprintf(ss,L"res://%s/IDR_HTML1",path);
	_pBrowser->Navigate(ss,0,0,0,0);	
	//_pBrowser->Navigate(L"\\html1.htm",0,0,0,0);	
}

void CMainWnd::DoJump(IDispatch* pdoc)
{	
	CHtmlAnalyze m_ha;	
	m_ha.SetDocument(pdoc);
	//////////////设置用户名
	IHTMLInputHiddenElement* ptext;	
	BSTR bb;
	ptext = m_ha.QueryInputHidden("txt_cc_id");	
	if( ptext )
	{
		GetUserID(&bb);			
//		printf("set id=");wprintf(bb);
		ptext->put_value(bb);
		SysFreeString(bb);
		ptext->Release();
	}
	///////////////设置密码
	ptext = m_ha.QueryInputHidden("txt_password");	
	if( ptext )
	{
		GetUserPwd(&bb);			
//		printf("\nset password=");wprintf(bb);
		ptext->put_value(bb);
		SysFreeString(bb);
		ptext->Release();
	}
	///////////////设置目标URL
	ptext = m_ha.QueryInputHidden("url");	
	if( ptext )
	{
		bb = SysAllocString(g_url);			
//		printf("\nset dest url=");wprintf(bb);
		ptext->put_value(bb);
		SysFreeString(bb);
		ptext->Release();
	}
	/////////获得提交表单
	IHTMLFormElement* pForm;
	pForm = m_ha.QueryForm("MainForm");
	if( pForm )
	{			
		////////////////////
		bb = SysAllocString(g_urlForLogin);
		pForm->put_action(bb);
//		printf("\nset dest=");wprintf(bb);
		SysFreeString(bb);
		HRESULT hr = pForm->submit();			
//		if( hr == 0 )
//			printf("jump ok");
//		else
//			printf("jump fail..%x",hr);
		pForm->Release();
	}		
}


STDMETHODIMP CMainWnd::moveTo( LONG x, LONG y)
{
    SetWindowPos(_hWnd, NULL, x, y, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
    return S_OK;
}

STDMETHODIMP CMainWnd::moveBy( LONG x, LONG y) 
{
    RECT rcWindow;

    GetWindowRect(_hWnd, &rcWindow);

    SetWindowPos(_hWnd, NULL, rcWindow.left + x, rcWindow.top + y, 0, 0,
                               SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
    return S_OK;
}


STDMETHODIMP CMainWnd::resizeTo( LONG x, LONG y) 
{
                // We do not want the size to be less then 100 for top level windows in browser
    if (x < 100)
        x = 100;

    if (y < 100)
        y = 100;

    SetWindowPos(_hWnd, HWND_TOP, 0, 0, x, y, 0);
	//printf("resizeto ...%d,%d\n",x,y);

    return S_OK;             
}

STDMETHODIMP CMainWnd::resizeBy( LONG x, LONG y) 
{
    RECT rcWindow;
    long w, h;

    GetWindowRect(_hWnd, &rcWindow);

    w = rcWindow.right - rcWindow.left + x;
    h = rcWindow.bottom - rcWindow.top + y;

    if (w < 100)
        w = 100;

    if (h < 100)
        h = 100;

    SetWindowPos(_hWnd, NULL, 0, 0, w, h, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
    return S_OK;
}


EXTERN_C const GUID CGID_MSHTML;
extern "C" BOOL APIENTRY OpenURLDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam);
/////////////////mod by ljf
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;
	case ID_INTERNET_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); 
	 }
	   break;
	case ID_FIND:
		//FindString();
		_pBrowser->GoSearch();
		break;
	case ID_GO_BACK:
		_pBrowser->GoBack();
		return 0;
	case ID_GO_FORWARD:
		_pBrowser->GoForward();
		return 0;
        case ID_GO_HOME:
			{
	SIPINFO si;
	memset(&si,0,sizeof(si));
	si.cbSize = sizeof(si);
	if(  SHSipInfo(SPI_GETSIPINFO,0,&si,0) )
	{
		if( (si.fdwFlags & SIPF_ON) != SIPF_ON )
			si.fdwFlags |= SIPF_ON;
		else
			si.fdwFlags = SIPF_OFF;
		SHSipInfo(SPI_SETSIPINFO,0,&si,0);
	}
            //_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:
			{
				int iSpaces = 0;
				if( _hWndAddressCombo )
				{
					TCHAR *szString = new TCHAR[MAX_URL];
					if(szString)
					{     
	 
				        GetWindowText(_hWndAddressCombo, szString, MAX_URL);
						// Remove preceding spaces.
						for (iSpaces=0; szString[iSpaces] == _T(' '); iSpaces++);
						_pBrowser->Navigate(&szString[iSpaces], NULL, NULL, NULL, NULL);
						_bTyped = TRUE;
						delete[] szString;
					}
				}
			}
			return 0;
        case ID_OPEN:
            {
				/*
                WCHAR *szURL = new TCHAR[MAX_URL];
		if(szURL)
		{
                	int nRet = 0;                
                	BSTR bstrUrl = NULL;
                	_pBrowser->get_LocationURL(&bstrUrl);
				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;

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);
            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,
					                            50,
					                            rcWnd.right-rcWnd.left, 
					                            rcWnd.bottom - rcWnd.top, 
					                            SWP_NOZORDER);		*/
				break;
            }
            // FALL THROUGH
        case  WM_MOVE:
			{				
				int xPos = (int)(short) LOWORD(lParam);    // horizontal position 
				int yPos = (int)(short) HIWORD(lParam);    // vertical position 
//				printf("WM_MOVE,%d,%d\n",xPos,yPos);
//				static int ncount = 0;
//				if( ncount++ > 10  )
//					break;				
				int iWidth = GetSystemMetrics(SM_CXSCREEN);
				int iHeight = GetSystemMetrics(SM_CYSCREEN)-32;
				RECT rcArea={0,0,iWidth,iHeight};
				if( pMainWnd && (2 < xPos || 30 < yPos) )
				{					
					pMainWnd->resizeTo(iWidth,iHeight);
				}
				//                  if(!pMainWnd->_fFullScreen)  
				//		        GetWindowRect(hwnd, &pMainWnd->_rcWnd);			                                       
				break;
			}
        case WM_COMMAND:
            return pMainWnd->HandleCommand(wParam, lParam);
            break;

        case WM_NOTIFY:
	    break;
		case WM_PAINT:
			{		
				if( 0 == pMainWnd->m_nURLType )
					break;
			RECT rc;
			::GetClientRect(pMainWnd->GetWindow(),&rc);
			rc.bottom = 32;
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(pMainWnd->GetWindow(), &ps);
			//printf("paint,%x,rc=%d,%d,%d,%d\n",hdc,rc.left,rc.right,rc.top,rc.bottom);
			pMainWnd->m_draw.OnMyDraw(hdc,rc);
//			MoveToEx(hdc,0,10,0);
//			LineTo(hdc,100,10);
			EndPaint(pMainWnd->GetWindow(), &ps);
			}
			break;

        case WM_INITMENUPOPUP:
            break;

        case WM_SETTINGCHANGE:
//            if(wParam == SPI_SETWORKAREA)

⌨️ 快捷键说明

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