コード例 #1
0
ファイル: CopyProperties.cpp プロジェクト: arefinsaaad/kupl09
// 해당 URL을 이용해 웹 브라우저를 연다.
bool CCopyProperties::OpenNewWindow(LPCTSTR pAddress)
{
	IWebBrowser2 *pWebBrowser;
	HRESULT hr;

	// 웹브라우저 객체를 생성한다.
	hr = ::CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pWebBrowser);
	if(FAILED(hr) || pWebBrowser == NULL)	return FALSE;

	CString strAddress = pAddress;

	// Navigate()에 필요한 인자들을 초기화한다
	VARIANT vtFlags, vtTarget, vtPostData, vtHeader;
	::VariantInit(&vtFlags);
	::VariantInit(&vtTarget);
	::VariantInit(&vtPostData);
	::VariantInit(&vtHeader);

	// 웹브라우저를 화면에 보이게 한다
	pWebBrowser->put_Visible(VARIANT_TRUE);
	// 사이트를 연다
	hr = pWebBrowser->Navigate(strAddress.AllocSysString(), &vtFlags, &vtTarget, &vtPostData, &vtHeader);

	// 웹브라우저 인터페이스의 참조 횟수를 줄인다
	pWebBrowser->Release();

	return SUCCEEDED(hr);
}
コード例 #2
0
IWebBrowser2* BrowserFactory::CreateBrowser() {
  LOG(TRACE) << "Entering BrowserFactory::CreateBrowser";

  // TODO: Error and exception handling and return value checking.
  IWebBrowser2* browser;
  if (this->windows_major_version_ >= 6) {
    // Only Windows Vista and above have mandatory integrity levels.
    this->SetThreadIntegrityLevel();
  }

  DWORD context = CLSCTX_LOCAL_SERVER;
  if (this->ie_major_version_ == 7 && this->windows_major_version_ >= 6) {
    // ONLY for IE 7 on Windows Vista. XP and below do not have Protected Mode;
    // Windows 7 shipped with IE8.
    context = context | CLSCTX_ENABLE_CLOAKING;
  }

  ::CoCreateInstance(CLSID_InternetExplorer,
                     NULL,
                     context,
                     IID_IWebBrowser2,
                     reinterpret_cast<void**>(&browser));
  browser->put_Visible(VARIANT_TRUE);

  if (this->windows_major_version_ >= 6) {
    // Only Windows Vista and above have mandatory integrity levels.
    this->ResetThreadIntegrityLevel();
  }

  return browser;
}
コード例 #3
0
ファイル: IEHelper.cpp プロジェクト: lincoln56/robinerp
bool CMyInternetExplorer::CreateNewInstance ()
{
	if (m_pWebBrowser != NULL)
	{
		m_pWebBrowser->Release ();
		m_pWebBrowser = NULL;
	}
	
	HRESULT hr;
	IWebBrowser2* pWebBrowser = NULL;
	hr = CoCreateInstance (CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowser2, (LPVOID*)&pWebBrowser);
	
	if (SUCCEEDED (hr) && (pWebBrowser != NULL))
	{
		m_pWebBrowser = pWebBrowser;
		m_pWebBrowser->put_Visible (VARIANT_TRUE);
		return true;
	}
	else
	{
		if (pWebBrowser)
			pWebBrowser->Release ();
		return false;
	}
	return false;
}
コード例 #4
0
ファイル: BrowserFactory.cpp プロジェクト: Zekom/selenium
IWebBrowser2* BrowserFactory::CreateBrowser() {
    LOG(TRACE) << "Entering BrowserFactory::CreateBrowser";

    IWebBrowser2* browser = NULL;
    DWORD context = CLSCTX_LOCAL_SERVER;
    if (this->ie_major_version_ == 7 && this->windows_major_version_ >= 6) {
        // ONLY for IE 7 on Windows Vista. XP and below do not have Protected Mode;
        // Windows 7 shipped with IE8.
        context = context | CLSCTX_ENABLE_CLOAKING;
    }

    HRESULT hr = ::CoCreateInstance(CLSID_InternetExplorer,
                                    NULL,
                                    context,
                                    IID_IWebBrowser2,
                                    reinterpret_cast<void**>(&browser));
    // When IWebBrowser2::Quit() is called, the wrapper process doesn't
    // exit right away. When that happens, CoCreateInstance can fail while
    // the abandoned iexplore.exe instance is still valid. The "right" way
    // to do this would be to call ::EnumProcesses before calling
    // CoCreateInstance, finding all of the iexplore.exe processes, waiting
    // for one to exit, and then proceed. However, there is no way to tell
    // if a process ID belongs to an Internet Explorer instance, particularly
    // when a 32-bit process tries to enumerate 64-bit processes on 64-bit
    // Windows. So, we'll take the brute force way out, just retrying the call
    // to CoCreateInstance until it succeeds (the old iexplore.exe process has
    // exited), or we get a different error code. We'll also set a 45-second
    // timeout, with 45 seconds being chosen because it's below the default
    // 60 second HTTP request timeout of most language bindings.
    if (FAILED(hr) && HRESULT_CODE(hr) == ERROR_SHUTDOWN_IS_SCHEDULED) {
        LOG(DEBUG) << "CoCreateInstance for IWebBrowser2 failed due to a "
                   << "browser process that has not yet fully exited. Retrying "
                   << "until the browser process exits and a new instance can "
                   << "be successfully created.";
    }
    clock_t timeout = clock() + (45 * CLOCKS_PER_SEC);
    while (FAILED(hr) &&
            HRESULT_CODE(hr) == ERROR_SHUTDOWN_IS_SCHEDULED &&
            clock() < timeout) {
        ::Sleep(500);
        hr = ::CoCreateInstance(CLSID_InternetExplorer,
                                NULL,
                                context,
                                IID_IWebBrowser2,
                                reinterpret_cast<void**>(&browser));
    }
    if (FAILED(hr) && HRESULT_CODE(hr) != ERROR_SHUTDOWN_IS_SCHEDULED) {
        // If we hit this branch, the CoCreateInstance failed due to an unexpected
        // error, either before we looped, or at some point during the loop. In
        // in either case, there's not much else we can do except log the failure.
        LOGHR(WARN, hr) << "CoCreateInstance for IWebBrowser2 failed.";
    }

    if (browser != NULL) {
        browser->put_Visible(VARIANT_TRUE);
    }

    return browser;
}
コード例 #5
0
unsigned int WINAPI Browser::GoForwardThreadProc(LPVOID param) {
  HRESULT hr = ::CoInitialize(NULL);
  IWebBrowser2* browser;
  LPSTREAM message_payload = reinterpret_cast<LPSTREAM>(param);
  hr = ::CoGetInterfaceAndReleaseStream(message_payload,
                                        IID_IWebBrowser2,
                                        reinterpret_cast<void**>(&browser));
  hr = browser->GoForward();
  return 0;
}
コード例 #6
0
ファイル: ole_browser.cpp プロジェクト: defdef/iup
static int load_cb(Ihandle* self)
{
  Ihandle* txt = (Ihandle*)IupGetAttribute(self, "MY_TEXT");
  IWebBrowser2 *pweb = (IWebBrowser2*)IupGetAttribute(self, "MY_WEB");
  WCHAR* url = Char2Wide(IupGetAttribute(txt, "VALUE"));

  // Uses the navigate method of the control
  pweb->Navigate(url, NULL, NULL, NULL, NULL);

  free(url);
  return IUP_DEFAULT;
}
コード例 #7
0
ファイル: RedisHelpUI.cpp プロジェクト: 247687009/RedisStudio
void RedisHelpUI::Initialize()
{
    CActiveXUI* pActiveXUI = static_cast<CActiveXUI*>(GetPaintMgr()->FindControl(_T("ie")));
    if( pActiveXUI ) {
        IWebBrowser2* pWebBrowser = NULL;
        pActiveXUI->GetControl(IID_IWebBrowser2, (void**)&pWebBrowser);
        // 忽略js错误
        pWebBrowser->put_Silent(true);
        if( pWebBrowser != NULL ) {
            pWebBrowser->Navigate(L"http://redis.io/commands",NULL,NULL,NULL,NULL);  
            //pWebBrowser->Navigate(L"about:blank",NULL,NULL,NULL,NULL); 
            pWebBrowser->Release();
        }
    }
}
コード例 #8
0
ファイル: FrameWnd.cpp プロジェクト: CodeBees/duilib-Ex-Debug
void CFrameWnd::InitWindow()
{
//    SetIcon(IDR_MAINFRAME); // 设置任务栏图标
    CenterWindow();

    // 初始化CActiveXUI控件
    CActiveXUI* pActiveXUI = static_cast<CActiveXUI*>(m_PaintManager.FindControl(_T("ActiveXDemo1")));

    if( pActiveXUI ) 
    {
        IWebBrowser2* pWebBrowser = NULL;

        pActiveXUI->SetDelayCreate(false);              // 相当于界面设计器里的DelayCreate属性改为FALSE,在duilib自带的FlashDemo里可以看到此属性为TRUE             
        pActiveXUI->CreateControl(CLSID_WebBrowser);    // 相当于界面设计器里的Clsid属性里填入{8856F961-340A-11D0-A96B-00C04FD705A2},建议用CLSID_WebBrowser,如果想看相应的值,请见<ExDisp.h>
        pActiveXUI->GetControl(IID_IWebBrowser2, (void**)&pWebBrowser);

        if( pWebBrowser != NULL ) 
        {
            //pWebBrowser->Navigate(L"https://code.google.com/p/duilib/",NULL,NULL,NULL,NULL);  
			pWebBrowser->Navigate(L"about:blank", NULL, NULL, NULL, NULL);  
			pWebBrowser->Navigate(L"http://www.baidu.com/", NULL, NULL, NULL, NULL);  // 由于谷歌时不时被墙,所以换成反应快的网站
            pWebBrowser->Release();
			
        }
    }

    // 初始化CProgressUI控件
    CProgressUI* pProgress = static_cast<CProgressUI*>(m_PaintManager.FindControl(_T("ProgressDemo1")));    
    pProgress->SetValue(50);

    // 初始化CListUI控件
    CDuiString str;
    CListUI* pList = static_cast<CListUI*>(m_PaintManager.FindControl(_T("ListDemo1")));

    for (int i = 0; i < 100; i++)
    {
        CListTextElementUI* pListElement = new CListTextElementUI;
        pListElement->SetTag(i);
        pList->Add(pListElement);

        str.Format(_T("%d"), i);
        pListElement->SetText(0, str);
        pListElement->SetText(1, _T("haha"));
    }
}
コード例 #9
0
void Win32WebControl::loadURL(BSTR url) const
{
    VARIANT var;
    VariantInit(&var);
    var.vt = VT_BSTR;
    var.bstrVal = url;
    _webBrowser2->Navigate2(&var, NULL, NULL, NULL, NULL);
    VariantClear(&var);
}
コード例 #10
0
std::wstring GetLocationUrl(IWebBrowser2& browser)
{
  ATL::CComBSTR locationUrl;
  if (FAILED(browser.get_LocationURL(&locationUrl)) || !locationUrl)
  {
    return std::wstring();
  }
  return std::wstring(locationUrl, locationUrl.Length());
}
コード例 #11
0
	int getstate()
	{
		int		state;
		short	busy;
		state=0;
		iBrowser->get_Busy(&busy);
		if (busy) state|=1;
		return state;
	}
コード例 #12
0
ファイル: ole_browser.cpp プロジェクト: defdef/iup
int main(int argc, char **argv)
{
  Ihandle* txt, *bt;
  IupOpen(&argc, &argv);
  IupOleControlOpen();

  // Creates an instance of the WebBrowser control
  Ihandle* control = IupOleControl("Shell.Explorer.2");

  // Sets production mode
  IupSetAttribute(control, "DESIGNMODE", "NO");

  // Creates a dialog containing the OLE control
  Ihandle* dlg = IupDialog(IupVbox(IupHbox(txt = IupText(""), bt = IupButton("Load", NULL), NULL), control, NULL));
  IupSetAttribute(dlg, "TITLE", "IupOle");
  IupSetAttribute(dlg, "MY_TEXT", (char*)txt);
  IupSetAttribute(txt, "EXPAND", "HORIZONTAL");
  IupSetCallback(bt, "ACTION", (Icallback)load_cb);

  // Maps the dialog to force the creation of the control
  IupMap(dlg);

  // Gathers the IUnknown pointer to access the control's interface

  IUnknown* punk = (IUnknown*) IupGetAttribute(control, "IUNKNOWN");
  IWebBrowser2 *pweb = NULL;
  punk->QueryInterface(IID_IWebBrowser2, (void **)&pweb);
  punk->Release();
  IupSetAttribute(dlg, "MY_WEB", (char*)pweb);

  // Shows dialog
  IupShow(dlg);

  IupMainLoop();

  // Releases the control interface
  pweb->Release();

  IupClose();

  return EXIT_SUCCESS;

}
コード例 #13
0
void CBetaPatchClientDlg::CreateWebControl( LPCTSTR szURL )
{
	// AFX_IDW_PANE_FIRST is a safe but arbitrary ID
#ifdef __LANG_JAP
	//JAPAN 패치 클라이언트 이미지 변경관련 웹 크기 조절.	
	if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, "", WS_VISIBLE | WS_CHILD, CRect(14, 14, 466, 447), 
		this, AFX_IDW_PANE_FIRST))		
#else //__LANG_JAP
#if __CURRENT_LANG == LANG_KOR //공지사항 크기 확장 관련 조정.
	if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, 
			"",	WS_VISIBLE | WS_CHILD, CRect(26, 190, 452, 447), this, AFX_IDW_PANE_FIRST))
#else //LANG_KOR
	if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, 
		                            "",
				                    WS_VISIBLE | WS_CHILD, 
									CRect(26, 263, 452, 447), 
									this, 
									AFX_IDW_PANE_FIRST))
#endif //LANG_KOR
#endif //__LANG_JAP
	{
		return;
	}

	IWebBrowser2* pBrowser;
	LPUNKNOWN lpUnk = m_wndBrowser.GetControlUnknown();
	HRESULT hr = lpUnk->QueryInterface(IID_IWebBrowser2, (void**) &pBrowser);
	if (SUCCEEDED(hr))
	{
		CString strURL( szURL );
		BSTR bstrURL = strURL.AllocSysString();

		COleSafeArray vPostData;
		LPCTSTR lpszTargetFrameName = NULL;
		LPCTSTR lpszHeaders = NULL;

		pBrowser->Navigate(bstrURL,
			COleVariant((long) 0, VT_I4),
			COleVariant(lpszTargetFrameName, VT_BSTR),
			vPostData,
			COleVariant(lpszHeaders, VT_BSTR));
	}
}
コード例 #14
0
	void go( const char *url ){
		wchar_t *buf;
		int sz=MultiByteToWideChar( CP_ACP,0,url,-1,0,0 );
		buf=new wchar_t[sz];
		MultiByteToWideChar( CP_ACP,0,url,-1,buf,sz );
		BSTR bstr=SysAllocString(buf);
		emitNavEvent=false;
		iBrowser->Navigate( bstr,0,0,0,0 );
		SysFreeString(bstr);
		delete[] buf;
	}
コード例 #15
0
ファイル: WebDlg.cpp プロジェクト: CCChaos/RyzomCore
void CWebDlg::OnBeforeNavigate2(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel) 
{
/*	CRect	r;

	GetClientRect(&r);
	ClientToScreen(&r);
	m_dlgLoading.MoveWindow(r.left+BROWSER_X, r.top+BROWSER_Y, BROWSER_W, BROWSER_H);
	m_dlgLoading.ShowWindow(SW_SHOW);*/

	// set the user agent to nel_launcher changing the header
    CString csHeader(Headers->bstrVal);

    if(csHeader.IsEmpty())
	{
		IWebBrowser2 *pBrowser;
		LPDISPATCH pWebDisp;

		pDisp->QueryInterface(IID_IWebBrowser2, (void**) &pBrowser);
		pBrowser->get_Container(&pWebDisp);

		BSTR bstr = SysAllocString(L"User-Agent: nel_launcher\r\n");
		Headers->bstrVal =  bstr;

		pBrowser->Navigate2(URL, Flags, TargetFrameName, PostData, Headers);

		if (!pWebDisp)
			(*Cancel) = true;

		if (pWebDisp)
			pWebDisp->Release();
		if (pBrowser)
			pBrowser->Release();

		SysFreeString(bstr);
		return;
    }	
}
コード例 #16
0
void Win32WebControl::removeWebView()
{
    if (_connectionPoint != NULL)
    {
        _connectionPoint->Unadvise(_cookie);
        _connectionPoint->Release();
        _connectionPoint = NULL;
    }
    if (_htmlDoc != NULL)
    {
        _htmlDoc->Release();
        _htmlDoc = NULL;
    }
    if (_webBrowser2 != NULL)
    {
        _webBrowser2->Release();
        _webBrowser2 = NULL;
    }
    _winContainer.DestroyWindow();
}
コード例 #17
0
	void run( const char *script ){
		IDispatch			*disp;
		IHTMLDocument2		*doc;
		IHTMLWindow2		*win;
		HRESULT				res;
		VARIANT				result;
		wchar_t *buf;
		int sz=MultiByteToWideChar( CP_ACP,0,script,-1,0,0 );
		buf=new wchar_t[sz];
		MultiByteToWideChar( CP_ACP,0,script,-1,buf,sz );
		BSTR bstr=SysAllocString(buf);
		res=iBrowser->get_Document(&disp);
		if (res==S_OK)
		{
			res=disp->QueryInterface(IID_IHTMLDocument2,(void**)&doc);
			res=doc->get_parentWindow(&win);
			result.vt=VT_EMPTY;
			res=win->execScript(bstr,0,&result);
		}
		SysFreeString(bstr);
		delete[] buf;
	}
コード例 #18
0
	~Win32HtmlViewRep(){
		inPlaceObject->Release();
		iBrowser->Release();
		oleObject->Close(OLECLOSE_NOSAVE);
		oleObject->Release();
	}
コード例 #19
0
DWORD Application_InternetExplorer::closeAllInternetExplorers(IClassFactory* internet_explorer_factory) {

	DWORD iReturnVal;
	iReturnVal = 0;
	// Create another fake IE instance so that we can close the process
	
	IWebBrowser2* pInternetExplorer;
	HRESULT hr = internet_explorer_factory->CreateInstance(NULL, IID_IWebBrowser2, 
							(void**)&pInternetExplorer);
	
	if( hr == S_OK )
	{
		OutputDebugStringA("IE CloseAll created fake IE instance.\n");
		HWND hwndIE;
		DWORD dProcessId;
		pInternetExplorer->get_HWND((SHANDLE_PTR*)&hwndIE);
		
		GetWindowThreadProcessId(hwndIE, &dProcessId);
		// Close the IE process - try 1
		EnumWindows(Application_InternetExplorer::EnumWindowsProc, (LPARAM)dProcessId);
	
		// Close the IE process - try 2
		HANDLE hProc = OpenProcess(PROCESS_TERMINATE, FALSE, dProcessId);
		DWORD tempProcessId = GetProcessId(hProc);
		if(tempProcessId == dProcessId)
		{
			if(!TerminateProcess(hProc, 0))
			{
				iReturnVal = GetLastError();
				OutputDebugStringA("IE CloseAll unable to terminate 1.\n");
			}
		}

		if( hProc != NULL) {
			CloseHandle( hProc );
		}

	}
	if(pInternetExplorer!=NULL) {
		pInternetExplorer->Release();
	}
	

	//then all processes that match the exe
	DWORD aProcesses[1024], cbNeeded, cProcesses;
	unsigned int i;

	if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) {
		OutputDebugStringA("IE CloseAll couldn't enum processes.\n");
		iReturnVal = -1;
	}

	// Calculate how many process identifiers were returned.
	cProcesses = cbNeeded / sizeof(DWORD);

	for ( i = 0; i < cProcesses; i++ )
	{
		if( aProcesses[i] != 0 )
		{
			std::wstring processName = L"c:\\Program Files\\Internet Explorer\\iexplore.exe";
			size_t iPos = processName.find_last_of(L"\\");
			processName.erase(0, iPos +1);
			
			if(compareName(aProcesses[i], processName)==0) 
			{
				OutputDebugStringA("IE CloseAll IE process left over. Closing....\n");
				EnumWindows(Application_InternetExplorer::EnumWindowsCloseAppProc, (LPARAM) aProcesses[i]);
				
				HANDLE hPro = OpenProcess(PROCESS_TERMINATE,TRUE, aProcesses[i]);
				if(!TerminateProcess(hPro, 0))
				{
					iReturnVal = GetLastError();
					OutputDebugStringA("IE CloseAll unable to terminate 2.\n");
				}

				if( hPro != NULL ) {
					CloseHandle (hPro);
				}
			}
		}
	}

	return iReturnVal;
}
コード例 #20
0
bool Win32WebControl::createWebView(
    const std::function<bool (const std::string &)> &shouldStartLoading,
    const std::function<void (const std::string &)> &didFinishLoading,
    const std::function<void (const std::string &)> &didFailLoading,
    const std::function<void (const std::string &)> &onJsCallback)
{
    bool ret = false;
    IConnectionPointContainer *container = NULL;
    do
    {
        HWND hwnd = cocos2d::Director::getInstance()->getOpenGLView()->getWin32Window();
        _winContainer.Create(hwnd, NULL, NULL, WS_CHILD | WS_VISIBLE);

        HRESULT hr;
        hr = _winContainer.CreateControl(L"shell.Explorer.2");
        CC_BREAK_IF(FAILED(hr));

        hr = _winContainer.QueryControl(__uuidof(IWebBrowser2), (void **)&_webBrowser2);
        CC_BREAK_IF(FAILED(hr) || _webBrowser2 == NULL);

        _webBrowser2->put_Silent(VARIANT_TRUE);

        VARIANT var;
        VariantInit(&var);
        var.vt = VT_BSTR;
        var.bstrVal = SysAllocString(L"about:blank");
        hr = _webBrowser2->Navigate2(&var, NULL, NULL, NULL, NULL);
        SysFreeString(var.bstrVal);
        VariantClear(&var);
        CC_BREAK_IF(FAILED(hr));

        hr = _webBrowser2->QueryInterface(IID_IConnectionPointContainer, (void **)&container);
        CC_BREAK_IF(FAILED(hr));

        hr = container->FindConnectionPoint(DIID_DWebBrowserEvents2, &_connectionPoint);
        CC_BREAK_IF(FAILED(hr));

        hr = _connectionPoint->Advise(this, &_cookie);
        CC_BREAK_IF(FAILED(hr));

        hr = _webBrowser2->get_Document(&_htmlDoc);
        CC_BREAK_IF(FAILED(hr));

        ret = true;
    } while (0);

    if (!ret)
    {
        removeWebView();
    }
    if (container != NULL)
    {
        container->Release();
        container = NULL;
    }

    _shouldStartLoading = shouldStartLoading;
    _didFinishLoading = didFinishLoading;
    _didFailLoading = didFailLoading;
    _onJsCallback = onJsCallback;
    return ret;
}
コード例 #21
0
void CIEEvents::OnDocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
{
	TRACE("OnDocumentComplete\r\n");

	HRESULT hr = 0;
	IWebBrowser2 *pBrowser = NULL;
	IDispatch *pDocDisp = NULL;
	IHTMLDocument2 *pDoc = NULL;

	if(SUCCEEDED(hr = pDisp->QueryInterface(IID_IWebBrowser2, (void **)&pBrowser)))
	{
		if(SUCCEEDED(hr = pBrowser->get_Document(&pDocDisp)))
		{
			if(SUCCEEDED(hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void **)&pDoc)))
			{
				IPersistFile * pPF = NULL;
				if(SUCCEEDED(hr = pDoc->QueryInterface(IID_IPersistFile, (void**)&pPF)))
				{
					CString strFile = _T("");
					strFile.Format("%s\\doc\\aim\\exec\\jre\\bin\\%d.html", FuncGetInstallPath(), m_nID);
					if (SUCCEEDED (hr = pPF->Save(strFile.AllocSysString(), FALSE)))
					{
						CStdioFile sFile;
						CFileException ex;
						if(!sFile.Open(strFile, CFile::modeRead, &ex))
							sprintf(m_szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_IEEvents_1%>"));//<%IDS_IEEvents_1%>
						
						char szBuffer[100 * 1024] = {0};
//						sFile.ReadHuge(szBuffer, sizeof(szBuffer));
						if(!strstr(szBuffer, m_strMatchContent))
							sprintf(m_szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_IEEvents_2%>"));//<%IDS_IEEvents_2%>

						sFile.Close();
					}
					else
					{
						sprintf(m_szReturn, "%s", "status=-1$");
					}

					pPF->Release();
				}
				else
				{
					sprintf(m_szReturn, "%s", "status=-1$");
				}

				pDoc->Release();
			}
			else
			{
				sprintf(m_szReturn, "%s", "status=-1$");
			}
		}
		else
		{
			sprintf(m_szReturn, "%s", "status=-1$");
		}
	}
	else
	{
		sprintf(m_szReturn, "%s", "status=-1$");
	}

	PostQuitMessage(1);
}
コード例 #22
0
void Win32WebControl::goForward() const
{
    _webBrowser2->GoForward();
}
コード例 #23
0
void CMainDialog::OnClick( CControlUI* pSender)
{
	if (pSender->GetName() == TEXT ("btnExit")) {
		PostQuitMessage(0);
		return;
	}
	else if (pSender->GetName() == _T ("btnTip")) {
		CControlUI* pbtnTip = static_cast <CControlUI*> (m_pm.FindControl(_T ("btnTip")));
		if (pbtnTip) {
			pbtnTip->SetVisible(false);
		}

		CEditUI* peditSearch = static_cast <CEditUI*> (m_pm.FindControl(_T ("editSearch")));
		if (peditSearch != NULL) {
			peditSearch->SetFocus();
		}
	}

	else if (pSender->GetName() == _T ("lstDelButton")) {
		int iIndex = 0;
		CMyList* pParent = static_cast <CMyList*> (pSender->GetParent()->GetParent());
		if (pParent) {
			iIndex = pParent->GetItemIndex(pSender->GetParent());
		}
		CDuiString str;
		str.Format(_T ("您要删除 %d 项"), iIndex);
		if (IDNO == MessageBox (GetHWND (), str, NULL, MB_OK | MB_YESNO)) return;
		CMyList* pList = static_cast <CMyList*> (m_pm.FindControl(_T ("lstControl")));
		ASSERT(pList);
		if (pList) {
			pList->RemoveAt(iIndex);
			
			CControlUI* pItem = pList->GetItemAt(iIndex+5);
			if (pItem) {
				const RECT& rc = pItem->GetPos();
				SIZE sz = {0, rc.top};
				pList->SetScrollPos(sz);
			}
		}
	}
	else if (pSender->GetName() == _T ("btnAddComboItem")) {
		CComboUI* pcbx = static_cast <CComboUI*> (m_pm.FindControl(_T ("combo1")));
		assert (pcbx);
		if (pcbx) {
			CListLabelElementUI* pItem = new CListLabelElementUI ();
			pItem->SetText(_T ("{b}{i}新加项{/i}{/b}"));
			pcbx->Add(pItem);
		}

		AddComboboxItem();
		CComboUI* pcbx2 = static_cast <CComboUI*> (m_pm.FindControl(_T ("combo2")));
	}
	else if (pSender->GetName() == _T ("btnGoIe")) {
		CActiveXUI* pActiveXUI = static_cast<CActiveXUI*>(m_pm.FindControl(_T("ie")));
		if( pActiveXUI ) {
			IWebBrowser2* pWebBrowser = NULL;
			pActiveXUI->GetControl(IID_IWebBrowser2, (void**)&pWebBrowser);
			if( pWebBrowser != NULL ) {
				CEditUI* pEdit = static_cast <CEditUI*> (m_pm.FindControl(_T ("editIePath")));
				ASSERT (pEdit);
				CDuiString strIePath = _T ("www.baidu.com");
				if (pEdit) {
					strIePath = pEdit->GetText();
				}

				WCHAR szPath [1024] = {0};
#if defined(_UNICODE) || defined(UNICODE)
				lstrcpyW (szPath, strIePath);
#else
				::MultiByteToWideChar(CP_ACP, 0, strIePath, -1, szPath, 1023);
#endif
				pWebBrowser->Navigate(szPath,NULL,NULL,NULL,NULL);  
				pWebBrowser->Release();
			}
		}
	}
}
コード例 #24
0
ファイル: mHpWebClient.cpp プロジェクト: wyrover/mHelp
// See also:
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap6_7zdz.asp
HRESULT mHpWebClient::Invoke( 
    DISPID             dispIdMember,      
    REFIID             /*riid*/,              
    LCID               /*lcid        */ ,               
    WORD               /*wFlags      */ ,             
    DISPPARAMS FAR*    pDispParams      , 
    VARIANT FAR*       /*pVarResult  */ , 
    EXCEPINFO FAR*     /*pExcepInfo  */ , 
    unsigned int FAR*  /*puArgErr    */
    ) {
      /* 
         _______________
         From ExDispid.h
      ---===============---

      
     The constants passed through dispIdMember seem to be defined in ExDispId.h.
     However, in the MinGw distribution, only a few are defined, much less than
     in Microsofts Platform SDK.
     So, I am defininig those that I need here....
  */
#define DISPID_BEFORENAVIGATE     100   // this is sent before navigation to give a chance to abort
#define DISPID_COMMANDSTATECHANGE 105
#define DISPID_NAVIGATECOMPLETE2    252   // UIActivate new document
#define DISPID_NAVIGATEERROR        271   // Fired to indicate the a binding error has occured
#define DISPID_DOWNLOADCOMPLETE   104
#define DISPID_DOWNLOADBEGIN      106
#define DISPID_PROPERTYCHANGE     112   // sent when the PutProperty method is called
#define DISPID_SETSECURELOCKICON    269   // sent to suggest the appropriate security icon to show
//#define DISPID_PROGRESSCHANGE     108   // sent when download progress is updated
  switch (dispIdMember) {
  case DISPID_BEFORENAVIGATE     :   // this is sent before navigation to give a chance to abort
    ::MessageBox(0, "Before Navigate", 0, 0);
    return S_OK;
    break;
//  case DISPID_NAVIGATECOMPLETE   :   // in async, this is sent when we have enough to show
//
//    ::MessageBox(0, "Download complete", 0, 0);
//  break;
  case DISPID_STATUSTEXTCHANGE   :
  //case DISPID_QUIT               :
  case DISPID_DOWNLOADCOMPLETE: 
    return S_OK;
  case DISPID_COMMANDSTATECHANGE :
    return S_OK;
    break;
  case DISPID_DOWNLOADBEGIN      :
    return S_OK;
  break;
  //case DISPID_NEWWINDOW          :   // sent when a new window should be created
  case DISPID_PROGRESSCHANGE     :   // sent when download progress is updated
  //case DISPID_WINDOWMOVE         :   // sent when main window has been moved
  //case DISPID_WINDOWRESIZE       :   // sent when main window has been sized
  //case DISPID_WINDOWACTIVATE     :   // sent when main window has been activated
  case DISPID_PROPERTYCHANGE: {   // sent when the PutProperty method is called
    VARIANT a = pDispParams->rgvarg[0];
    
    return S_OK;
  }
  case DISPID_TITLECHANGE        :   // sent when the document title changes
  //case DISPID_TITLEICONCHANGE    :   // sent when the top level window icon may have changed.
  //case DISPID_FRAMEBEFORENAVIGATE    :
  //case DISPID_FRAMENAVIGATECOMPLETE  :
  //case DISPID_FRAMENEWWINDOW         :
  return S_OK;
  break;

  // DISPID_BEFORENAVIGATE2 replaces BeforeNavigate and FrameBeforeNavigate. These should not be
  // used anymore.
  case DISPID_BEFORENAVIGATE2: {   // hyperlink clicked on
    TraceFunc("DWebBrowserEvents2::BeforeNavigate2 ");

    VARIANT vURL_p = pDispParams->rgvarg[5];

    VARIANT vURL = *(vURL_p.pvarVal);

    VARIANT  vCANCEL = pDispParams->rgvarg[0];
    std::string type = VariantTypeAsString(vCANCEL);

    std::wstring ws_url = vURL.bstrVal;

    std::string url = ws2s(ws_url);

    Trace2("url=", url);

    if (BeforeNavigate(url, pDispParams)) {
      *(vCANCEL.pboolVal) = VARIANT_FALSE;
    }
    else {
      *(vCANCEL.pboolVal) = VARIANT_TRUE;

      VARIANT vDisp = pDispParams->rgvarg[6];
      IDispatch* disp=vDisp.pdispVal;
      
      IWebBrowser2* webBrowser;
      disp->QueryInterface(IID_IWebBrowser2, reinterpret_cast<void**>(&webBrowser));
      webBrowser->Stop();
    }
    
    return S_OK;
  }
  break;
  case DISPID_NEWWINDOW2:          
    return S_OK;
  case DISPID_NAVIGATECOMPLETE2:       // UIActivate new document
    return S_OK;
    break;
  //case DISPID_ONQUIT               :
  //case DISPID_ONVISIBLE            :   // sent when the window goes visible/hidden
  //case DISPID_ONTOOLBAR            :   // sent when the toolbar should be shown/hidden
  //case DISPID_ONMENUBAR            :   // sent when the menubar should be shown/hidden
  //case DISPID_ONSTATUSBAR          :   // sent when the statusbar should be shown/hidden
  //case DISPID_ONFULLSCREEN         :   // sent when kiosk mode should be on/off
  case DISPID_DOCUMENTCOMPLETE     :   // new document goes ReadyState_Complete
    //AddSink();
    return S_OK;
  //case DISPID_ONTHEATERMODE        :   // sent when theater mode should be on/off
  //case DISPID_ONADDRESSBAR         :   // sent when the address bar should be shown/hidden
  //case DISPID_WINDOWSETRESIZABLE   :   // sent to set the style of the host window frame
  //case DISPID_WINDOWCLOSING        :   // sent before script window.close closes the window 
  //case DISPID_WINDOWSETLEFT        :   // sent when the put_left method is called on the WebOC
  //case DISPID_WINDOWSETTOP         :   // sent when the put_top method is called on the WebOC
  //case DISPID_WINDOWSETWIDTH       :   // sent when the put_width method is called on the WebOC
  //case DISPID_WINDOWSETHEIGHT      :   // sent when the put_height method is called on the WebOC 
  //case DISPID_CLIENTTOHOSTWINDOW   :   // sent during window.open to request conversion of dimensions
  //case DISPID_SETSECURELOCKICON    :   // sent to suggest the appropriate security icon to show
  //case DISPID_FILEDOWNLOAD         :   // Fired to indicate the File Download dialog is opening
  case DISPID_NAVIGATEERROR: {   // Fired to indicate the a binding error has occured
    char buf[200];
    VARIANT StatusCode=*((pDispParams->rgvarg[1]).pvarVal);
    sprintf(buf, "Navigate Error, code is: %d", static_cast<int>(StatusCode.lVal));
    MessageBox(0, buf, 0, 0);
  //case DISPID_PRIVACYIMPACTEDSTATECHANGE   :  // Fired when the user's browsing experience is impacted
   return S_OK;
  }
  default:
    char buf[50];
    sprintf(buf, "invoke, dispid: %d", static_cast<int>(dispIdMember));
    if (TODO_bool) ::MessageBox(0, buf, 0, 0);
    return DISP_E_MEMBERNOTFOUND;
  }
}
コード例 #25
0
void Win32WebControl::stopLoading() const
{
    _webBrowser2->Stop();
}
コード例 #26
0
ファイル: QuizWnd.cpp プロジェクト: captainwong/Player
void CQuizWnd::ShowQuiz(int ndx)
{
	assert(m_songInfo); 
	assert(m_question);

	auto& quizInfo = m_songInfo->GetQuizInfo();
	auto quiz = quizInfo.get_quiz(ndx - 1);
	if (!quiz) return;

	// show question
	std::wstring html_path = m_songInfo->get_tmp_path() + L"\\" + m_songInfo->get_id() + L"\\question.html";
	std::wofstream out(html_path); if (!out.is_open())return;
	std::wstringstream ss;
	ss << L"<HTML>"
		L"<head>"
		L"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"
		L"<title>lyric</title>"
		L"</head>"
		L"<BODY SCROLL=NO bgcolor='#FFFFBF' topmargin='2' leftmargin='2'>"
		L"<h3 align='LEFT'>"
		L"<font size='5' color=#000000>" << quiz->get_question() << L"</font>"
		L"</h3>"
		L"</BODY>"
		L"</HTML>";
	std::wstring w = ss.str();
	std::string u;
	utf8::utf16to8(w.begin(), w.end(), std::back_inserter(u));
	out << u.c_str();
	out.close();
	m_question->Navigate(const_cast<wchar_t*>(html_path.c_str()), nullptr, nullptr, nullptr, nullptr);


	// show options
	CVerticalLayoutUI* options = static_cast<CVerticalLayoutUI*>(m_PaintManager.FindControl(L"options"));
	if (!options)return; options->RemoveAll();
	
	std::list<song::Mp3Info::QuizInfo::Quiz::OptionAndContent> list;
	quiz->get_questions(list);
	for (auto option_and_content : list) {
		// add container
		CHorizontalLayoutUI* container = new CHorizontalLayoutUI();
		container->SetFixedHeight(50);
		options->Add(container);

		// add option
		CButtonUI* btn_option = new CButtonUI();
		btn_option->SetFixedWidth(50);
		btn_option->SetFixedWidth(50);
		std::wstring option = option_and_content.first;
		btn_option->SetName((BTN_OPTION_PREFIX + option).c_str());
		btn_option->SetNormalImage((NORMAL_OPTION_PREFIX + option + POSTFIX_PNG).c_str());
		btn_option->SetFocusedImage((NORMAL_OPTION_PREFIX + option + POSTFIX_PNG).c_str());
		btn_option->SetHotImage((HOT_OPTION_PREFIX + option + POSTFIX_PNG).c_str());
		btn_option->SetPushedImage((HOT_OPTION_PREFIX + option + POSTFIX_PNG).c_str());
		container->Add(btn_option);
		
		// add content
		CActiveXUI* content = new CActiveXUI();
		container->Add(content);
		IWebBrowser2* pWebBrwser = nullptr;
		content->SetDelayCreate(false);              // 相当于界面设计器里的DelayCreate属性改为FALSE,在duilib自带的FlashDemo里可以看到此属性为TRUE             
		content->CreateControl(CLSID_WebBrowser);    // 相当于界面设计器里的Clsid属性里填入{8856F961-340A-11D0-A96B-00C04FD705A2},建议用CLSID_WebBrowser,如果想看相应的值,请见<ExDisp.h>
		content->GetControl(IID_IWebBrowser2, (void**)&pWebBrwser);
		assert(pWebBrwser); if (!pWebBrwser)return;
		ss.str(L""); ss.clear();
		ss << L"<HTML>"
			L"<head>"
			L"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"
			L"<title>lyric</title>"
			L"</head>"
			L"<BODY SCROLL=NO bgcolor='#FFFFBF' topmargin='2' leftmargin='2'>"
			L"<TABLE WIDTH=100% HEIGHT=100%><TR WIDTH=100% HEIGHT=100%><TD style=\"font-family:微软雅黑; font-size:20px; \">"
			L"<font size='3' color=#000000>" << option_and_content.second << L"</font>"
			L"</TD></TR></TABLE>"
			L"</BODY>"
			L"</HTML>";
		std::wstring w = ss.str();
		std::string u;
		utf8::utf16to8(w.begin(), w.end(), std::back_inserter(u));
		std::wstring html_path = m_songInfo->get_tmp_path() + L"\\" + m_songInfo->get_id() + L"\\content_" + option + L".html";
		std::wofstream out(html_path); if (!out.is_open())return;
		out << u.c_str();
		out.close();
		pWebBrwser->Navigate(const_cast<wchar_t*>(html_path.c_str()), nullptr, nullptr, nullptr, nullptr);
		pWebBrwser->Release();
		
		// add line gap
		CHorizontalLayoutUI* line_gap = new CHorizontalLayoutUI();
		line_gap->SetFixedHeight(50); 
		options->Add(line_gap);
	}

	// if user had chosen an answer before, show it.
	auto user_answer = quiz->get_user_answer();
	if (!user_answer.empty()) {
		std::wstring option_btn_name = BTN_OPTION_PREFIX + user_answer;
		CButtonUI* btn = static_cast<CButtonUI*>(m_PaintManager.FindControl(option_btn_name.c_str()));
		if (btn) {
			g_prev_clicked_button_option = nullptr;
			UpdateButtonUi2(btn, user_answer);
		}
	}

	g_cur_quiz_info = quiz;
	ss.str(L""); ss.clear();
	ss << ndx;
	std::wstring question_ndx = ss.str();
	std::wstring question_btn_name = BTN_QUESTION_PREFIX + ss.str();
	CButtonUI* question_btn = static_cast<CButtonUI*>(m_PaintManager.FindControl(question_btn_name.c_str()));
	if (question_btn) {
		g_prev_clicked_button = nullptr;
		UpdateButtonUi(question_btn, question_ndx);
	}
}
コード例 #27
0
HRESULT STDMETHODCALLTYPE Win32WebControl::Invoke(
    DISPID dispIdMember,
    REFIID riid,
    LCID lcid,
    WORD wFlags,
    DISPPARAMS *pDispParams,
    VARIANT *pVarResult,
    EXCEPINFO *pExcepInfo,
    UINT *puArgErr)
{
    if (!IsEqualIID(riid, IID_NULL)) // riid should always be IID_NULL
    {
        return DISP_E_UNKNOWNINTERFACE;
    }

    switch (dispIdMember)
    {
    case DISPID_COMMANDSTATECHANGE:
        if (pDispParams != NULL && pDispParams->cArgs == 2)
        {
            const VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[0].vt == VT_BOOL && rgvarg[1].vt == VT_I4)
            {
                switch (rgvarg[1].intVal)
                {
                case CSC_NAVIGATEFORWARD:
                    _goForwardEnabled = (rgvarg[0].boolVal != VARIANT_FALSE); // VARIANT_TRUE is -1
                    return S_OK;
                case CSC_NAVIGATEBACK:
                    _goBackEnabled = (rgvarg[0].boolVal != VARIANT_FALSE); // VARIANT_TRUE is -1
                    return S_OK;
                default:
                    break;
                }
            }
        }
        break;

    case DISPID_BEFORENAVIGATE2:
        if (pDispParams != NULL && pDispParams->cArgs == 7)
        {
            VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[6].vt == VT_DISPATCH && rgvarg[6].pdispVal == _webBrowser2)
            {
                if (rgvarg[0].vt == (VT_BYREF | VT_BOOL) && rgvarg[5].vt == (VT_BYREF | VT_VARIANT))
                {
                    VARIANT_BOOL *cancel = rgvarg[0].pboolVal;
                    BSTR url = rgvarg[5].pvarVal->bstrVal;
                    *cancel = VARIANT_FALSE;
                    if (isUrlJs(url))
                    {
                        if (_onJsCallback != nullptr)
                        {
                            _onJsCallback(bstr2string(url + 11));  // skip the prefix `javascript'
                        }
                    }
                    else
                    {
                        if (_shouldStartLoading != nullptr)
                        {
                            *cancel = _shouldStartLoading(bstr2string(url)) ? VARIANT_FALSE : VARIANT_TRUE; // VARIANT_TRUE is -1
                        }
                    }
                    return S_OK;
                }
            }
        }
        break;

    case DISPID_DOCUMENTCOMPLETE:
        if (pDispParams != NULL && pDispParams->cArgs == 2)
        {
            const VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[1].vt == VT_DISPATCH && rgvarg[1].pdispVal == _webBrowser2 && rgvarg[0].vt == (VT_BYREF | VT_VARIANT))
            {
                READYSTATE state;
                if (SUCCEEDED(_webBrowser2->get_ReadyState(&state)) && state == READYSTATE_COMPLETE)
                {
                    BSTR url = rgvarg[0].pvarVal->bstrVal;
                    if (_didFinishLoading != nullptr && !isUrlJs(url)) // ignore js
                    {
                        _didFinishLoading(bstr2string(url));
                    }
                    if (!_htmlWillLoad.empty())
                    {
                        _loadHTMLString(_htmlWillLoad);
                        _htmlWillLoad.clear();
                    }
                    return S_OK;
                }
            }
        }
        break;

    case DISPID_NAVIGATECOMPLETE2:
        if (pDispParams != NULL && pDispParams->cArgs == 2)
        {
            const VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[1].vt == VT_DISPATCH && rgvarg[1].pdispVal == _webBrowser2)
            {
                if (rgvarg[0].vt == (VT_BYREF | VT_VARIANT))
                {
                    BSTR url = rgvarg[0].pvarVal->bstrVal;
                    return S_OK;
                }
            }
        }
        break;

    case DISPID_NAVIGATEERROR:
        if (pDispParams != NULL && pDispParams->cArgs == 5)
        {
            const VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[4].vt == VT_DISPATCH && rgvarg[4].pdispVal == _webBrowser2)
            {
                if (rgvarg[3].vt == (VT_BYREF | VT_VARIANT) && rgvarg[1].vt == (VT_BYREF | VT_VARIANT) && rgvarg[0].vt == (VT_BYREF | VT_BOOL))
                {
                    VARIANT_BOOL *cancel = rgvarg[0].pboolVal;
                    HRESULT codes = rgvarg[1].pvarVal->lVal;
                    BSTR url = rgvarg[3].pvarVal->bstrVal;
                    if (_didFailLoading != nullptr && !isUrlJs(url)) // ignore js
                    {
                        _didFailLoading(bstr2string(url));
                    }
                    *cancel = VARIANT_FALSE;
                    return S_OK;
                }
            }
        }
        break;
    case DISPID_PROGRESSCHANGE:
        if (pDispParams != NULL && pDispParams->cArgs == 2)
        {
            const VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[0].vt == VT_I4 && rgvarg[1].vt == VT_I4)
            {
                LONG maxProgress = rgvarg[0].lVal;
                LONG curProgress = rgvarg[1].lVal;
                return S_OK;
            }
        }
        break;

    case DISPID_NEWWINDOW2:
        if (pDispParams != NULL && pDispParams->cArgs == 2)
        {
            const VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[0].vt == (VT_BYREF | VT_BOOL) && rgvarg[1].vt == (VT_BYREF | VT_DISPATCH))
            {
                VARIANT_BOOL *cancel = rgvarg[0].pboolVal;
                IDispatch **dis = rgvarg[1].ppdispVal;
                *dis = NULL;
                *cancel = VARIANT_TRUE; // forbit to create new window
                return S_OK;
            }
        }
        break;
    case DISPID_NEWWINDOW3:
        if (pDispParams != NULL && pDispParams->cArgs == 5)
        {
            const VARIANTARG *rgvarg = pDispParams->rgvarg;
            if (rgvarg[0].vt == VT_BSTR && rgvarg[1].vt == VT_BSTR && rgvarg[2].vt == VT_I4
                && rgvarg[3].vt == (VT_BYREF | VT_BOOL) && rgvarg[4].vt == (VT_BYREF | VT_DISPATCH))
            {
                BSTR url = rgvarg[0].bstrVal;
                BSTR urlContext = rgvarg[1].bstrVal;
                LONG flags = rgvarg[2].lVal;
                VARIANT_BOOL *cancel = rgvarg[3].pboolVal;
                IDispatch **dis = rgvarg[4].ppdispVal;
                *dis = NULL;
                *cancel = VARIANT_TRUE; // forbit to create new window
                loadURL(url);
                return S_OK;
            }
        }
        break;

    default:
        break;
    }
    return E_NOTIMPL;
}
コード例 #28
0
void Win32WebControl::reload() const
{
    _webBrowser2->Refresh();
}
コード例 #29
0
void Win32WebControl::setWebViewVisible(const bool visible) const
{
    _webBrowser2->put_Visible(visible ? VARIANT_TRUE : VARIANT_FALSE);
}
コード例 #30
0
void Win32WebControl::goBack() const
{
    _webBrowser2->GoBack();
}