📄 myie.cpp
字号:
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 + -