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

📄 mainwnd.cpp

📁 Windows CE 下的机顶盒应用实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:

				PCOPYDATASTRUCT lpCDS = (PCOPYDATASTRUCT)lParam;
				ASSERT(lpCDS->cbData == 
					(_tcslen((LPTSTR)lpCDS->lpData) + 1) * sizeof(TCHAR));
				cbData += lpCDS->cbData + sizeof(TCHAR);	// extra TCHAR for null term

				// now that we know the size, create the URL
				szNavURL = new TCHAR[cbData/sizeof(TCHAR)];
				ASSERT(szNavURL);
				if (!szNavURL)
				{
					DEBUGMSG(1, (TEXT("Error creating Windows Media ")
								  TEXT("Navigation URL string!\r\n")));
					break;
				}

				cbDummy = cbData;
				lRet = RegQueryValueEx(hKey, REG_WMPVALUE, NULL, NULL,
									   (LPBYTE)szNavURL, &cbDummy);
				ASSERT(ERROR_SUCCESS == lRet);
				RegCloseKey(hKey);
				if (ERROR_SUCCESS != lRet)
				{
					DEBUGMSG(1, (TEXT("Error (%u) getting registry value: ")
								REG_ROOTKEY REG_WMPVALUE, GetLastError()));
					break;
				}

				_tcscat(szNavURL, TEXT("#"));
				_tcscat(szNavURL, (LPTSTR)lpCDS->lpData);
				szNavURL[cbData/sizeof(TCHAR) - 1] = 0;

				HRESULT hr = pMainWnd->_pBrowser->Navigate(szNavURL, 
								NULL, NULL, NULL, NULL);
				ASSERT(S_OK == hr);
				if (FAILED(hr))
				{
					DEBUGMSG(1, (TEXT("IWebBrowser2::Navigate(\"%s\") failed!\r\n"),
								 szNavURL));
				}
				return 1;
			}
			break;

		default:
			break;
		}
	}

	return DefWindowProc(hwnd, message, wParam, lParam);
}

BOOL CMainWnd::PreTranslateMessage(LPMSG pMsg)
{
	// main frame gets first shot
	if (_fUseNewAccels)
	{
		if (::TranslateAccelerator(_hWnd, _hAccelTblNew, pMsg))
			return TRUE;
	}
	else
	{
	    if (::TranslateAccelerator(_hWnd, _hAccelTblDef, pMsg))
	        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);
	}
}

VOID CMainWnd::Close()
{
    RETAILMSG(1,(L"STBIHOST CMainWnd::Close"));

    // Tell the shell to die off
    SendMessage(_hWndBrowser, WM_CLOSE, 0,0);


	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 CMainWnd::EnableSafeArea(BOOL fEnable)
{
	BOOL fRet;

	if (fEnable)
	{
		fRet = SetWindowPos(_hWndBrowser, NULL, _ptSafe.x, _ptSafe.y,
							_lSafeWidth, _lSafeHeight, SWP_NOZORDER);
		if (!fRet)
		{
			ASSERT(FALSE);
			RETAILMSG(1, (TEXT("SetWindowPos(x=%i, y=%i, cx=%i, cy=%i) ")
						  TEXT("failed in CMainWnd::EnableSafeArea()"),
						  _ptSafe.x, _ptSafe.y, _lSafeWidth, _lSafeHeight));
		}
	}
	else
	{
		fRet = SetWindowPos(_hWndBrowser, NULL,
							_rcWnd.left, _rcWnd.top,
							_rcWnd.right - _rcWnd.left,
							_rcWnd.bottom - _rcWnd.top,
							SWP_NOZORDER);
		if (!fRet)
		{
			ASSERT(FALSE);
			RETAILMSG(1, (TEXT("SetWindowPos(x=%i, y=%i, cx=%i, cy=%i) ")
						  TEXT("failed in CMainWnd::EnableSafeArea()"),
						  _rcWnd.left, _rcWnd.top,
						  _rcWnd.right - _rcWnd.left,
						  _rcWnd.bottom - _rcWnd.top));
		}
	}

	if (fRet)
	{
		_fSafeArea = fEnable;
	}

	return fRet;
}


BOOL CMainWnd::AssignAccelerator(ACCEL accel, SHORT nKey)
{
	accel.fVirt = FNOINVERT | FVIRTKEY;
	switch (nKey)
	{
	case RCTL_STOP:
		accel.key = VK_MEDIA_STOP;
		accel.cmd = ID_VIEW_STOP;	
		break;

	case RCTL_PLAY:
		accel.key = VK_PLAY;
		accel.cmd = ID_VIEW_REFRESH;	
		break;

	case RCTL_PREV:
		accel.key = VK_MEDIA_PREV_TRACK;
		accel.cmd = ID_GO_HOME;
		break;

	case RCTL_NEXT:
		accel.key = VK_MEDIA_NEXT_TRACK;
		accel.cmd = ID_GO_SEARCH;
		break;

	case RCTL_BACK:
		accel.key = VK_PRIOR;
		accel.cmd = ID_GO_BACK;
		break;

	case RCTL_FWD:
		accel.key = VK_NEXT;
		accel.cmd = ID_GO_FORWARD;

	case RCTL_VOLUP:
		accel.key = VK_VOLUME_UP;
		accel.cmd = ID_SCROLL_PAGEUP;
		break;

	case RCTL_VOLDN:
		accel.key = VK_VOLUME_DOWN;
		accel.cmd = ID_SCROLL_PAGEDOWN;
		break;

	default:
		ASSERT(FALSE);
		return FALSE;
	}

	return TRUE;
}


// This bitmask defines the keys that StbIHost doesn't
// have in its default accelerator table). We need this
// to insure that StbIHost doesn't suddenly start
// handling these keys when a new table overrides the
// default.
//
// We simply have no use for pause, mute, or menu, and
// SHDOCVW uses left, right, up, down, and select for
// TVLENS tab navigation.
#define RCTLKEYS_BM_DONTCARE  ( RCTL_BM_PAUSE | RCTL_BM_MUTE | RCTL_BM_MENU	\
								| RCTL_BM_LEFT | RCTL_BM_RIGHT | RCTL_BM_UP	\
								| RCTL_BM_DOWN | RCTL_BM_SELECT )

BOOL CMainWnd::CreateAccelTbl(ULONG bmKeys)
{
	// if this ASSERT fails, then the datatype
	// for bmKeys needs to be larger
	ASSERT(RCTL_NUMKEYS < sizeof(bmKeys) * 8);

	_fUseNewAccels = TRUE;

	// all the bit fields in bmKeys with value=1 are
	// the ones the current web page wants to use, so
	// we care about the left-overs--the bitfields with
	// value=0
	bmKeys = (~bmKeys & ~RCTLKEYS_BM_DONTCARE & ((1 << RCTL_NUMKEYS) - 1));

	if (!bmKeys)
		return TRUE;

	ULONG bmKeysTmp = bmKeys;

	// determine length of new accelerator table
	_cNewAccels = 0;
	while (0 != bmKeysTmp)
	{
		if (bmKeysTmp & 1)
			_cNewAccels++;
		bmKeysTmp >>= 1;
	}

	// create table
	if (_rgNewAccels)
		delete [] _rgNewAccels;

	_rgNewAccels = new ACCEL[_cNewAccels];
	if (!_rgNewAccels)
	{
		_cNewAccels = 0;
		_fUseNewAccels = FALSE;
		return FALSE;
	}

	SHORT nKeys = 0, nBit = 0;
	while (0 != bmKeys)
	{
		if (bmKeys & 1)
		{
			if (!AssignAccelerator(_rgNewAccels[nKeys], nBit))
			{
				_cNewAccels = 0;
				delete [] _rgNewAccels;
				_fUseNewAccels = FALSE;
				return FALSE;
			}
			nKeys++;
		}

		bmKeys >>= 1;
		nBit++;
	}

	// finally, register new table
	if (_hAccelTblNew)
		DestroyAcceleratorTable(_hAccelTblNew);
		
	_hAccelTblNew = CreateAcceleratorTable(_rgNewAccels, _cNewAccels);
	if (!_hAccelTblNew)
	{
		ASSERT(FALSE);
		_cNewAccels = 0;
		delete [] _rgNewAccels;
		_fUseNewAccels = FALSE;
		return FALSE;
	}
	
	return TRUE;
}


BOOL CMainWnd::DestroyAccelTbl()
{
	if (_rgNewAccels)
	{
		delete [] _rgNewAccels;
		_rgNewAccels = NULL;
	}

	if (_hAccelTblNew)
	{
		DestroyAcceleratorTable(_hAccelTblNew);
		_hAccelTblNew = NULL;
	}

	_cNewAccels = 0;
	_fUseNewAccels = FALSE;

	return TRUE;
}


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);    
                    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 + -