📄 mainwnd.cpp
字号:
GOERROR(pszValue = _pIFavStorage->GetURL(szKey));
wcscpy(szUrl,pszValue);
delete[] pszValue;
return TRUE;
ERR_RET:
if (menuInfo.dwTypeData)
delete(menuInfo.dwTypeData);
_hMenu = NULL;
return FALSE;
} // GetUrlFromID
LPTSTR CMainWnd::GetRegistryKeyString(HKEY hKey, LPCTSTR lptValueName)
{
DWORD size;
DWORD type;
PBYTE pByte;
pByte = NULL;
if (RegQueryValueEx(hKey, lptValueName, NULL, &type, NULL, &size) ==
ERROR_SUCCESS && (type == REG_SZ || type == REG_MULTI_SZ))
{
pByte = (PBYTE) LocalAlloc(LPTR, size);
if (pByte)
{
if((RegQueryValueEx(hKey, lptValueName, NULL, NULL, pByte, &size) != ERROR_SUCCESS) || (pByte[0] == 0))
{
LocalFree(pByte);
pByte = NULL;
}
}
}
return (LPTSTR) pByte;
}
#endif // ndef NO_FAVORITES
//创建一个线程,在线程中创建一个窗口CMainWnd
HRESULT HandleNewWindow2(LPTSTR lpszUrl, DISPPARAMS FAR* pdparams)
{
HANDLE hThread;
CMainWnd *pNewWnd;
IDispatch *pDispatch;
HRESULT hr = S_OK;
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);
//创建一个线程,线程函数 NewWindow ,参数CMainWnd指针 ,指定栈大小
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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -