📄 myie.cpp
字号:
{
// 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;
case WM_LBUTTONUP:
//printf("WM_LBUTTONUP,x=%d,y=%d\n",LOWORD(lParam),HIWORD(lParam));
{
if( 0 == pMainWnd->m_nURLType )
break;
WORD xPos = LOWORD(lParam); // horizontal position of cursor
WORD yPos = HIWORD(lParam); // vertical position of cursor
short id = pMainWnd->m_draw.GetClickObjID(xPos,yPos);
//if( m_draw.m_dt == OTHER_TOOLBAR && id == 0 )
if( id == 0 )
::SendMessage(pMainWnd->GetWindow(),WM_CLOSE,0,0);
else if( id == 1 )
pMainWnd->GetVersonInfo();
}
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);
}
}
VOID CMainWnd::Close()
{
SaveUrlList();
RETAILMSG(1,(L"IESIMPLE 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;
if(_hWndCmdband)
{
DestroyWindow(_hWndCmdband);
}
if(_hWndAddressCombo)
{
DestroyWindow(_hWndAddressCombo);
}
if( _hWndProgress )
{
DestroyWindow(_hWndProgress);
}
if(_hWndStatus)
{
DestroyWindow(_hWndStatus);
}
}
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);???
SetWindowText(GetDlgItem(hDlg,IDC_URL_EDIT),szURL);
}
}
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
{
// GetDlgItemText(hDlg, IDC_URL_EDIT, szURL, MAX_URL-1); ???
GetWindowText(GetDlgItem(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);???
SetWindowText(GetDlgItem(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;
}
CHtmlAnalyze::CHtmlAnalyze()
{
pDis = NULL;
}
CHtmlAnalyze::~CHtmlAnalyze()
{
if( pDis )
{
pDis->Release();
pDis = NULL;
}
}
IHTMLDocument2* CHtmlAnalyze::GetDocument()
{
// return m_html.GetDocument();
if( pDis != NULL )
{
IHTMLDocument2* pDoc;
pDis->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
return pDoc;
}
return NULL;
}
IHTMLElement* CHtmlAnalyze::GetElement(const char *id,const GUID iid,BOOL bImg)
{
if( id == NULL ) return NULL;
IHTMLDocument2 *doc = GetDocument();
if( doc == NULL ) return NULL;
IHTMLElement* ret = NULL;
IHTMLElementCollection* doc_all;
HRESULT hr;
if( bImg == 1 )
hr = doc->get_images(&doc_all); // this is like doing document.all
else
hr = doc->get_all(&doc_all); // this is like doing document.all
if( hr == S_OK )
{
VARIANT vid;
vid.vt=VT_BSTR;
unsigned int len = strlen(id);
wchar_t ws[20] ={0}; //??
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,id,-1,ws,len+1);
vid.bstrVal = ws;
VARIANT v0;
VariantInit(&v0);
IDispatch* disp;
hr = doc_all->item(vid,v0,&disp); // this is like doing document.all["messages"]
if( (hr == S_OK) && (disp != NULL) )
{
hr = disp->QueryInterface(iid,(void**)&ret);
// it's the caller's responsibility to release it
if( hr != S_OK )
{
//
}
disp->Release();
}
doc_all->Release();
}
doc->Release();
return ret;
}
IHTMLElement* CHtmlAnalyze::GetElement1(const char *id,const GUID iid,BOOL bImg)
{
return NULL;
}
IHTMLInputHiddenElement* CHtmlAnalyze::QueryInputHidden(const char* id)
{
HRESULT hr;
IHTMLElement* spElem;
spElem = GetElement(id,IID_IHTMLInputHiddenElement);
if( spElem == NULL )
return NULL;
IHTMLInputHiddenElement* spRes;
hr = spElem->QueryInterface(IID_IHTMLInputHiddenElement, (void **)&spRes);
spElem->Release();
return spRes;
}
IHTMLInputTextElement* CHtmlAnalyze::QueryInputText(const char* id)
{
HRESULT hr;
IHTMLElement* spElem;
spElem = GetElement(id,IID_IHTMLInputTextElement,TRUE);
if( spElem == NULL )
return NULL;
IHTMLInputTextElement* spRes;
hr = spElem->QueryInterface(IID_IHTMLInputTextElement,(void **)&spRes);
spElem->Release();
return spRes;
}
IHTMLImgElement* CHtmlAnalyze::QueryImage(const char* id)
{
HRESULT hr;
IHTMLElement* spElem;
spElem = GetElement(id,IID_IHTMLImgElement,TRUE);
if( spElem == NULL )
return NULL;
IHTMLImgElement* spRes;
hr = spElem->QueryInterface(IID_IHTMLImgElement, (void **)&spRes);
spElem->Release();
return spRes;
}
IHTMLTable* CHtmlAnalyze::QueryTable(const char* id)
{
HRESULT hr;
IHTMLElement* spElem;
spElem = GetElement(id,IID_IHTMLTable,TRUE);
if( spElem == NULL )
return NULL;
IHTMLTable* spRes;
hr = spElem->QueryInterface(IID_IHTMLTable,(void **)&spRes);
spElem->Release();
return spRes;
}
IHTMLButtonElement* CHtmlAnalyze::QueryButton(const char* id)
{
HRESULT hr;
IHTMLElement* spElem;
spElem = GetElement(id,IID_IHTMLButtonElement);
if( spElem == NULL )
return NULL;
IHTMLButtonElement* spRes;
hr = spElem->QueryInterface(IID_IHTMLButtonElement,(void **)&spRes);
spElem->Release();
return spRes;
}
IHTMLInputButtonElement* CHtmlAnalyze::QueryInputButton(const char* id)
{
HRESULT hr;
IHTMLElement* spElem;
spElem = GetElement(id,IID_IHTMLInputButtonElement);
if( spElem == NULL )
return NULL;
IHTMLInputButtonElement* spRes;
hr = spElem->QueryInterface(IID_IHTMLInputButtonElement,(void **)&spRes);
spElem->Release();
return spRes;
}
IHTMLFormElement* CHtmlAnalyze::QueryForm(const char* id)
{
HRESULT hr;
IHTMLElement* spElem;
spElem = GetElement(id,IID_IHTMLFormElement);
if( spElem == NULL )
return NULL;
IHTMLFormElement* spRes;
hr = spElem->QueryInterface(IID_IHTMLFormElement,(void **)&spRes);
spElem->Release();
return spRes;
}
void CHtmlAnalyze::SetDocument(IDispatch*pdis)
{
if( pDis )
{
pDis->Release();
pDis = NULL;
}
pDis = pdis;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -