{"id":248,"date":"2014-07-23T06:46:07","date_gmt":"2014-07-23T15:46:07","guid":{"rendered":"http:\/\/blog.box.kr\/?p=248"},"modified":"2014-07-23T06:46:07","modified_gmt":"2014-07-23T15:46:07","slug":"%ea%b0%9c%eb%b0%9cvc-webbrowser-control-%ec%9d%b4%eb%b2%a4%ed%8a%b8-%ec%97%b0%ea%b2%b0-c","status":"publish","type":"post","link":"https:\/\/blog.box.kr\/?p=248","title":{"rendered":"[\uac1c\ubc1c\/VC++] WebBrowser Control \uc774\ubca4\ud2b8 \uc5f0\uacb0 &#8211; C++"},"content":{"rendered":"<div style=\"color: #333333;\">\n<div class=\"article_info\" style=\"color: #8b8b8b;\">\n<div class=\"article_info_content\">\n<h2 class=\"article_title\" style=\"color: #0b0c5e;\"><\/h2>\n<p><a style=\"color: #333333;\" href=\"http:\/\/sbrich.tistory.com\/category\/IT\/%EA%B0%9C%EB%B0%9C\">IT\/\uac1c\ubc1c<\/a>\u00a02011\/02\/10 12:12\n<\/div>\n<\/div>\n<\/div>\n<div class=\"article_post\" style=\"color: #333333;\">\n<p>[\uac1c\ubc1c\/VC++] WebBrowser Control \uc774\ubca4\ud2b8 \uc5f0\uacb0 &#8211; C++<br \/>\nWebBrowser Control<br \/>\nIDispatch<br \/>\nIWebBrowser2<br \/>\n.ReadyState<br \/>\nREADYSTATE_COMPLETE<\/p>\n<p>.Navigate2()<br \/>\n.get_Document() \/\/ IDispatch -&gt; IHTMLDocument2<br \/>\n.get_StatusText()<\/p>\n<p>on DownloadBegin<br \/>\non DocumentComplete<br \/>\non DownloadComplete<\/p>\n<p>IOleObject<\/p>\n<p>&nbsp;<\/p>\n<p>IHTMLWindow2<\/p>\n<p>IHTMLDocument2<br \/>\n.get_all()<br \/>\n.get_parentWindow() \/\/ IHTMLWindow2<\/p>\n<p>IHTMLElementCollection<br \/>\n.item()<br \/>\n.tags \/\/ IHTMLElementCollection<\/p>\n<p>IHTMLElement<\/p>\n<p>a connectable object<br \/>\nIConnectionPointContainer<br \/>\n.FindConnectionPoint() \/\/ DHTMLElementEvents2<\/p>\n<p>DHTMLElementEvents2<br \/>\n.Advise()<\/p>\n<p>outgoing HTMLElementEvents2 interface \/\/ event sink object \/\/ the client event sink<br \/>\nIDispatch<br \/>\n.Invoke()<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\nclass CTryDlg : public CDialog<br \/>\n{<br \/>\n\/\/ Construction<br \/>\npublic:<br \/>\nCTryDlg(CWnd* pParent = NULL);\u00a0\u00a0\u00a0 \/\/ standard constructor<\/p>\n<p>\/\/ Dialog Data<br \/>\n\/\/{{AFX_DATA(CTryDlg)<br \/>\nenum { IDD = IDD_TRY_081209_DIALOG };<br \/>\nCWebBrowser2\u00a0\u00a0\u00a0 m_webBrowser;<br \/>\n\/\/}}AFX_DATA<br \/>\n&#8230;<br \/>\n\/\/ Generated message map functions<br \/>\n\/\/{{AFX_MSG(CTryDlg)<br \/>\n&#8230;<br \/>\nafx_msg void OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL);<br \/>\nDECLARE_EVENTSINK_MAP()<br \/>\n\/\/}}AFX_MSG<br \/>\nDECLARE_MESSAGE_MAP()<br \/>\n};<\/p>\n<p>BOOL CTryDlg::OnInitDialog()<br \/>\n{<br \/>\n&#8230;<br \/>\nSetIcon(m_hIcon, FALSE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set small icon<\/p>\n<p>\/\/ TODO: Add extra initialization here<br \/>\n\/\/ {<br \/>\nCOleVariant\u00a0\u00a0\u00a0\u00a0 szURL\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = &#8220;<a style=\"color: #757575;\" href=\"http:\/\/www.google.com\/\">http:\/\/www.google.com<\/a>&#8220;;<br \/>\nm_webBrowser.Navigate2(szURL, NULL, NULL, NULL, NULL);<br \/>\n\/\/ }<br \/>\nreturn TRUE;\u00a0 \/\/ return TRUE\u00a0 unless you set the focus to a control<br \/>\n}<br \/>\n&#8230;<br \/>\nBEGIN_EVENTSINK_MAP(CTryDlg, CDialog)<br \/>\n\/\/{{AFX_EVENTSINK_MAP(CTryDlg)<br \/>\nON_EVENT(CTryDlg, IDC_EXPLORER1, 259 \/* DocumentComplete *\/, OnDocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)<br \/>\n\/\/}}AFX_EVENTSINK_MAP<br \/>\nEND_EVENTSINK_MAP()<\/p>\n<p>void CTryDlg::OnDocumentCompleteExplorer1(LPDISPATCH lpDisp, VARIANT FAR* URL)<br \/>\n{<br \/>\n\/\/ TODO: Add your control notification handler code here<br \/>\nIUnknown*\u00a0 pUnk;<br \/>\nLPDISPATCH lpWBDisp;<br \/>\nHRESULT\u00a0\u00a0\u00a0 hr;<\/p>\n<p>pUnk = m_webBrowser.GetControlUnknown();<br \/>\nASSERT(pUnk);<\/p>\n<p>hr = pUnk-&gt;QueryInterface(IID_IDispatch, (void**)&amp;lpWBDisp);<br \/>\nASSERT(SUCCEEDED(hr));<\/p>\n<p>if (lpDisp == lpWBDisp )<br \/>\n{<br \/>\n\/\/ Top-level Window object, so document has been loaded<br \/>\nTRACE(&#8220;Web document is finished downloadingn&#8221;);<br \/>\n}<\/p>\n<p>lpWBDisp-&gt;Release();<br \/>\n}<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\nm_pBrowser \/\/ IWebBrowser2<\/p>\n<p>\/\/ DWebBrowserEvents2::DocumentComplete<br \/>\nvoid CMyClass::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)<br \/>\n{<br \/>\nHRESULT hr;<br \/>\nIUnknown* pUnkBrowser = NULL;<br \/>\nIUnknown* pUnkDisp = NULL;<br \/>\nIDispatch* pDocDisp = NULL;<br \/>\nIHTMLDocument2* pDoc = NULL;<\/p>\n<p>\/\/ Is this the DocumentComplete event for the top frame window?<br \/>\n\/\/ Check COM identity: compare IUnknown interface pointers.<br \/>\nhr = m_pBrowser-&gt;QueryInterface(IID_IUnknown, (void**)&amp;pUnkBrowser);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n<span id=\"callbacknestsbrichtistorycom8365842\"><\/span>\u00a0\u00a0\u00a0 {<br \/>\nhr = pDisp-&gt;QueryInterface(IID_IUnknown, (void**)&amp;pUnkDisp);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n{<br \/>\nif (pUnkBrowser == pUnkDisp)<br \/>\n{<br \/>\n\/\/ This is the DocumentComplete event for the top frame.<br \/>\n\/\/ This page is loaded, so we can access the DHTML Object Model.<br \/>\nhr = m_pBrowser-&gt;get_Document(&amp;pDocDisp);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n{<br \/>\n\/\/ Obtained the document object.<br \/>\npDocDisp-&gt;QueryInterface(IID_IHTMLDocument2, (void**)&amp;pDoc);<br \/>\nif (SUCCEEDED(hr))<br \/>\n{<br \/>\n\/\/ Obtained the IHTMLDocument2 interface for the document object<br \/>\nProcessDocument(pDoc);<br \/>\n}<\/p>\n<p>pDocDisp-&gt;Release();<br \/>\n}<br \/>\n}<\/p>\n<p>pUnkDisp-&gt;Release();<br \/>\n}<\/p>\n<p>pUnkBrowser-&gt;Release();<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/ IHTMLDocument2<br \/>\nvoid CMyClass::ProcessDocument(IHTMLDocument2* pDoc)<br \/>\n{<br \/>\nIHTMLElementCollection* pElemColl = NULL;<\/p>\n<p>hr = pDoc-&gt;get_all(&amp;pElemColl);<br \/>\nif (SUCCEEDED(hr))<br \/>\n{<br \/>\n\/\/ Obtained element collection.<br \/>\nProcessElementCollection(pElemColl);<br \/>\npElemColl-&gt;Release();<br \/>\n}<br \/>\n}<\/p>\n<p>void CMyClass::ProcessElementCollection(IHTMLElementCollection* pElemColl)<br \/>\n{<br \/>\nIDispatch* pElemDisp = NULL;<br \/>\nIHTMLElement* pElem = NULL;<br \/>\n_variant_t varID(&#8220;myID&#8221;, VT_BSTR);<br \/>\n_variant_t varIdx(0, VT_I4);<\/p>\n<p>hr = pElemColl-&gt;item(varID, varIdx, &amp;pElemDisp);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n{<br \/>\nhr = pElemDisp-&gt;QueryInterface(IID_IHTMLElement, (void**)&amp;pElem);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n{<br \/>\n\/\/ Obtained element with ID of &#8220;myID&#8221;.<br \/>\nConnectEvents(pElem);<br \/>\npElem-&gt;Release();<br \/>\n}<\/p>\n<p>pElemDisp-&gt;Release();<br \/>\n}<br \/>\n}<br \/>\nvoid CMyClass::ConnectEvents(IHTMLElement* pElem)<br \/>\n{<br \/>\nHRESULT hr;<br \/>\nIConnectionPointContainer* pCPC = NULL;<br \/>\nIConnectionPoint* pCP = NULL;<br \/>\nDWORD dwCookie;<\/p>\n<p>\/\/ Check that this is a connectable object.<br \/>\nhr = pElem-&gt;QueryInterface(IID_IConnectionPointContainer, (void**)&amp;pCPC);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n{<br \/>\n\/\/ Find the connection point.<br \/>\nhr = pCPC-&gt;FindConnectionPoint(DIID_HTMLElementEvents2, &amp;pCP);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n{<br \/>\n\/\/ Advise the connection point.<br \/>\n\/\/ pUnk is the IUnknown interface pointer for your event sink<br \/>\nhr = pCP-&gt;Advise(pUnk, &amp;dwCookie);<\/p>\n<p>if (SUCCEEDED(hr))<br \/>\n{<br \/>\n\/\/ Successfully advised<br \/>\n}<\/p>\n<p>pCP-&gt;Release();<br \/>\n}<\/p>\n<p>pCPC-&gt;Release();<br \/>\n}<br \/>\n}<br \/>\nSTDMETHODIMP CEventSink::Invoke(DISPID dispidMember,<br \/>\nREFIID riid,<br \/>\nLCID lcid,<br \/>\nWORD wFlags,<br \/>\nDISPPARAMS* pdispparams,<br \/>\nVARIANT* pvarResult,<br \/>\nEXCEPINFO* pexcepinfo,<br \/>\nUINT* puArgErr)<br \/>\n{<br \/>\nswitch (dispidMember)<br \/>\n{<br \/>\ncase DISPID_HTMLELEMENTEVENTS2_ONCLICK:<br \/>\nOnClick();<br \/>\nbreak;<\/p>\n<p>default:<br \/>\nbreak;<br \/>\n}<\/p>\n<p>return S_OK;<br \/>\n}<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/p>\n<p>IOleInPlaceFrame<br \/>\nIOleClientSite<br \/>\nIOleInPlaceSite<\/p>\n<p>EmbedBrowserObject()<br \/>\nwindow handle<br \/>\n_IOleClientSiteEx\u00a0\u00a0\u00a0 \/\/ USERDATA<br \/>\nIOleInPlaceFrame<br \/>\nIOleClientSite<br \/>\nIOleInPlaceSite<br \/>\nIDocHostUIHandler<\/p>\n<p>CoCreateInstance()<br \/>\nCLSID_WebBrowser<br \/>\nIWebBrowser2<br \/>\n.put_Left()<br \/>\n.put_Top()<br \/>\n.put_Width()<br \/>\n.put_Height()<br \/>\n.Navigate2()<\/p>\n<p>IOleObject<br \/>\n.Close()<br \/>\n.SetClientSite() \/\/ IOleClientSite<br \/>\n.SetHostNames()<br \/>\n.DoVerb()<\/p>\n<p>UnEmbedBrowserObject()<\/p>\n<p>ResizeBrowser()<\/p>\n<p>DisplayHTMLPage()<\/p>\n<p>DoPageAction()<\/p>\n<p>GetWebPtrs()<br \/>\nIHTMLDocument2<\/p>\n<p>IHTMLElementCollection<\/p>\n<p>GetWebElement()<br \/>\nIHTMLElement<\/p>\n<p>CreateWebEvtHandler()<\/p>\n<p>FreeWebEvtHandler()<\/p>\n<p>WaitOnReadyState()<\/p>\n<p>\ub354\ubcf4\uae30<br \/>\nextern &#8220;C&#8221; {<\/p>\n<p>HINSTANCE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cwebdll;<\/p>\n<p>long WINAPI EmbedBrowserObject(HWND hwnd);<br \/>\nvoid WINAPI UnEmbedBrowserObject(HWND hwnd);<br \/>\nlong WINAPI DisplayHTMLPage(HWND hWnd, const char *url);<br \/>\nvoid WINAPI ResizeBrowser(HWND hWnd, DWORD x, DWORD y);<\/p>\n<p>}<\/p>\n<p>int APIENTRY WinMain(HINSTANCE hInstance,<br \/>\nHINSTANCE hPrevInstance,<br \/>\nLPSTR\u00a0\u00a0\u00a0\u00a0 lpCmdLine,<br \/>\nint\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 nCmdShow)<br \/>\n{<br \/>\n\/\/ TODO: Place code here.<br \/>\n\/\/ {<br \/>\n\/\/ Load our DLL containing the OLE\/COM code. We do this once-only. It&#8217;s named &#8220;cwebpage.dll&#8221;<br \/>\nif (!(cwebdll = LoadLibrary(&#8220;cwebpage.dll&#8221;)))<br \/>\n{<br \/>\nMessageBox(0, &#8220;Can&#8217;t open cwebpage.dll!&#8221;, &#8220;ERROR&#8221;, MB_OK);<br \/>\nreturn(-1);<br \/>\n}<br \/>\n\/\/ }<br \/>\nMSG msg;<br \/>\nHACCEL hAccelTable;<\/p>\n<p>\/\/ Initialize global strings<br \/>\nLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);<br \/>\n&#8230;<br \/>\n}<br \/>\n&#8230;<br \/>\nLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)<br \/>\n{<br \/>\nswitch (message)<br \/>\n{<br \/>\n\/\/ {<br \/>\ncase WM_CREATE:<br \/>\n\/\/ Embed the browser object into our host window. We need do this only<br \/>\n\/\/ once. Note that the browser object will start calling some of our<br \/>\n\/\/ IOleInPlaceFrame and IOleClientSite functions as soon as we start<br \/>\n\/\/ calling browser object functions in EmbedBrowserObject().<br \/>\nif (EmbedBrowserObject(hWnd)) return(-1);<br \/>\nDisplayHTMLPage(hWnd, &#8220;<a style=\"color: #757575;\" href=\"http:\/\/www.microsoft.com\/\">http:\/\/www.microsoft.com<\/a>&#8220;);<br \/>\nbreak;<br \/>\n\/\/ }<br \/>\ncase WM_DESTROY:<br \/>\n\/\/ {<br \/>\n\/\/ Detach the browser object from this window, and free resources.<br \/>\nUnEmbedBrowserObject(hWnd);<br \/>\n\/\/ }<br \/>\nPostQuitMessage(0);<br \/>\nbreak;<br \/>\ncase WM_COMMAND:<br \/>\n&#8230;<br \/>\nbreak;<br \/>\ncase WM_SIZE:<br \/>\n\/\/ Resize the browser object to fit the window<br \/>\nResizeBrowser(hWnd, LOWORD(lParam), HIWORD(lParam));<br \/>\nbreak;<br \/>\n&#8230;<br \/>\ndefault:<br \/>\nreturn DefWindowProc(hWnd, message, wParam, lParam);<br \/>\n}<br \/>\nreturn 0;<br \/>\n}<br \/>\n\ucc38\uc870 \uc0ac\uc774\ud2b8:<\/p>\n<p><a style=\"color: #757575;\" href=\"http:\/\/support.microsoft.com\/kb\/315617\/en-us\/\">http:\/\/support.microsoft.com\/kb\/315617\/en-us\/<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/bb508508(VS.85).aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/bb508508(VS.85).aspx<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/support.microsoft.com\/kb\/194179\/en-us\/\">http:\/\/support.microsoft.com\/kb\/194179\/en-us\/<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/www.codeproject.com\/KB\/shell\/dlgdhtmlevents.aspx?display=Print\">http:\/\/www.codeproject.com\/KB\/shell\/dlgdhtmlevents.aspx?display=Print<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa293017(VS.71).aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/aa293017(VS.71).aspx<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/urassa.tistory.com\/entry\/Web-Browser-Control-FAQ\">http:\/\/urassa.tistory.com\/entry\/Web-Browser-Control-FAQ<\/a><\/p>\n<p><a style=\"color: #757575;\" href=\"http:\/\/www.codeproject.com\/KB\/COM\/cwebpage.aspx?display=Print\">http:\/\/www.codeproject.com\/KB\/COM\/cwebpage.aspx?display=Print<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/jjjryu.tistory.com\/entry\/IE-1\">http:\/\/jjjryu.tistory.com\/entry\/IE-1<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/support.microsoft.com\/kb\/196339\/en-us\/\">http:\/\/support.microsoft.com\/kb\/196339\/en-us\/<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/jjjryu.tistory.com\/entry\/ActiveX-%EC%BB%A8%ED%8A%B8%EB%A1%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8\">http:\/\/jjjryu.tistory.com\/entry\/ActiveX-\ucee8\ud2b8\ub864-\ud074\ub77c\uc774\uc5b8\ud2b8<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/www.codeproject.com\/KB\/shell\/AutomateShellWindow.aspx?display=Print\">http:\/\/www.codeproject.com\/KB\/shell\/AutomateShellWindow.aspx?display=Print<\/a><br \/>\n<a style=\"color: #757575;\" href=\"http:\/\/www.codeproject.com\/KB\/shell\/iehelper.aspx?display=Print\">http:\/\/www.codeproject.com\/KB\/shell\/iehelper.aspx?display=Print<\/a><\/p>\n<p>\ucd9c\ucc98 :\u00a0<a style=\"color: #757575;\" href=\"http:\/\/jjjryu.tistory.com\/333\">http:\/\/jjjryu.tistory.com\/333<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>IT\/\uac1c\ubc1c\u00a02011\/02\/10 12:12 [\uac1c\ubc1c\/VC++] WebBrowser Control \uc774\ubca4\ud2b8 \uc5f0\uacb0 &#8211; C++ WebBrowser Control IDispatch IWebBrowser2 .ReadyState READYSTATE_COMPLETE .Navigate2() .get_Document() \/\/ IDispatch -&gt; IHTMLDocument2 .get_StatusText() on DownloadBegin on DocumentComplete on DownloadComplete IOleObject &nbsp; IHTMLWindow2 IHTMLDocument2 .get_all() .get_parentWindow() \/\/ IHTMLWindow2 IHTMLElementCollection .item() .tags \/\/ IHTMLElementCollection IHTMLElement a connectable object IConnectionPointContainer .FindConnectionPoint() \/\/ DHTMLElementEvents2 DHTMLElementEvents2 .Advise() outgoing HTMLElementEvents2 interface \/\/ event sink object \/\/ the client event sink IDispatch .Invoke() &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- class CTryDlg : public CDialog { \/\/ Construction public: CTryDlg(CWnd* pParent = NULL);\u00a0\u00a0\u00a0 \/\/ standard constructor \/\/ Dialog Data \/\/{{AFX_DATA(CTryDlg) enum { IDD = IDD_TRY_081209_DIALOG }; CWebBrowser2\u00a0\u00a0\u00a0 m_webBrowser; \/\/}}AFX_DATA &#8230; \/\/ Generated message map functions \/\/{{AFX_MSG(CTryDlg) &#8230; afx_msg void OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL); DECLARE_EVENTSINK_MAP() \/\/}}AFX_MSG DECLARE_MESSAGE_MAP() }; BOOL CTryDlg::OnInitDialog() { &#8230; SetIcon(m_hIcon, FALSE);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Set small icon \/\/ TODO: Add extra initialization here \/\/ { COleVariant\u00a0\u00a0\u00a0\u00a0 szURL\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = &#8220;http:\/\/www.google.com&#8220;; m_webBrowser.Navigate2(szURL, NULL, NULL, NULL, NULL); \/\/ } return TRUE;\u00a0 \/\/ return TRUE\u00a0 unless you set the focus to a control } &#8230; BEGIN_EVENTSINK_MAP(CTryDlg, CDialog) \/\/{{AFX_EVENTSINK_MAP(CTryDlg) ON_EVENT(CTryDlg, IDC_EXPLORER1, 259 \/* DocumentComplete *\/, OnDocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT) \/\/}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() void CTryDlg::OnDocumentCompleteExplorer1(LPDISPATCH lpDisp, VARIANT FAR* URL) { \/\/ TODO: Add your control notification handler code here IUnknown*\u00a0 pUnk; LPDISPATCH lpWBDisp; HRESULT\u00a0\u00a0\u00a0 hr; pUnk = m_webBrowser.GetControlUnknown(); ASSERT(pUnk); hr = [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"ngg_post_thumbnail":0,"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[9,19,7],"tags":[],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5q9Zn-40","jetpack-related-posts":[{"id":224,"url":"https:\/\/blog.box.kr\/?p=224","url_meta":{"origin":248,"position":0},"title":"Handling HTML Element Events","date":"2014-07-23","format":false,"excerpt":"http:\/\/msdn.microsoft.com\/en-us\/library\/bb508508(v=vs.85).aspx Handling HTML Element Events 9 out of 10 rated this helpful\u00a0-\u00a0Rate this topic The\u00a0HTMLElementEvents2\u00a0interface is an event sink interface that enables an application to receive events for HTML elements. Your custom application can receive these events, which are fired in response to user actions on HTML elements, when hosting\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":234,"url":"https:\/\/blog.box.kr\/?p=234","url_meta":{"origin":248,"position":1},"title":"Using the WebBrowser Control from C\/C++","date":"2014-07-23","format":false,"excerpt":"Using the WebBrowser Control from C\/C++ \u00a0 This section describes some of the common implementations of the WebBrowser control, including: Adding Internet browsing functionality to your application Printing Web pages with the WebBrowser control Changing fonts with the WebBrowser control Working with WebBrowser events Adding Internet Browsing Functionality to Your\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":206,"url":"https:\/\/blog.box.kr\/?p=206","url_meta":{"origin":248,"position":2},"title":"Web Browser \ucee8\ud2b8\ub864","date":"2014-07-16","format":false,"excerpt":"Web Browser Control FAQ \u00a0 \ub2e4\uc74c\uc758\u00a0FAQ(FAQ\ub77c\uace0 \ud558\uae30\ub3c4 \ubb50 \ud569\ub2c8\ub2e4\ub9cc.. )\ub294 \uc81c\uac00\u00a0VC++ Q&A\u00a0\uc5d0\uc11c \uadf8 \ub3d9\uc548 \ubd10\uc654\ub358\u00a0Web Browser\u00a0\ucee8\ud2b8\ub864\uacfc \uad00\ub828 \uc9c8\ubb38\ub4e4\uc5d0 \ub300\ud55c \ub2f5 \uae00\uacfc\u00a0KB, MSDN\u00a0\ub9c1\ud06c \ubaa8\uc74c \ub4e4 \uc785\ub2c8\ub2e4.\u00a0 \uadf8 \ub3d9\uc548 \uc9d1 \ucef4\ud4e8\ud130\uc5d0 \uc815\ub9ac\ub9cc \ud574 \ub193\uace0 \ud544\uc694\ud560 \ub54c \uc885\uc885 \ucc38\uace0 \ud588\uc5c8\ub294\ub370 \uc5bc\ub9c8 \uc804 \ub178\ud2b8\ubd81 \ud558\ub4dc\uac00 \uc0ac\ub9dd \ud558\uc2e0 \ud6c4\uc5d0 \ubcf5\uad6c\ud55c \ub0b4\uc6a9\uc744 \ud301 \uac8c\uc2dc\ud310\uc5d0 \uc62c\ub9ac\ub294\uac8c \ub0ab\uaca0\ub2e4\uace0\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":200,"url":"https:\/\/blog.box.kr\/?p=200","url_meta":{"origin":248,"position":3},"title":"\uc774\ubc88 \ud3ec\uc2a4\ud305\uc740 \ud2b9\uc815\uc0ac\uc774\ud2b8\uc758 HTML \ud0dc\uadf8\ub97c\u2026","date":"2014-07-16","format":false,"excerpt":"\uc774\ubc88 \ud3ec\uc2a4\ud305\uc740 \ud2b9\uc815\uc0ac\uc774\ud2b8\uc758 HTML \ud0dc\uadf8\ub97c \uac00\uc838\uc640\uc11c \ucd9c\ub825\ud558\ub294 \uac83\uae4c\uc9c0 \ub2e4\ub8f9\ub2c8\ub2e4. \uac1c\ubc1c \ud234\uc740 Visual Studio 2012\ub97c \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. # \ud654\uba74 \uad6c\uc131 - url \uc601\uc5ed - url \uc774\ub3d9 \ubc84\ud2bc - html \uac00\uc838\uc624\uae30 \ubc84\ud2bc - webBrowser \uc601\uc5ed - \ub514\ubc84\uae451 \uc601\uc5ed - \ub514\ubc84\uae452 \uc601\uc5ed \uacb0\uacfc\ubb3c\ub294 \uac04\ub2e8\ud569\ub2c8\ub2e4. \ud574\ub2f9 URL\uc5d0 \uc774\ub3d9\ud558\uc5ec webBrowser\uc758 \ud6c4\ud0b9(?) \ucf5c\ubc31(?)\u00a0\uc815\ubcf4\ub97c \ucd9c\ub825(\ub514\ubc84\uae451)\ud558\uace0 scan\ubc84\ud2bc\uc744 \ud1b5\ud574 html\ub0b4\uc6a9\uc744\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"http:\/\/cfile23.uf.tistory.com\/image\/236391385315B70E32D9B7","width":350,"height":200},"classes":[]},{"id":252,"url":"https:\/\/blog.box.kr\/?p=252","url_meta":{"origin":248,"position":4},"title":"[\uac1c\ubc1c\/VC++] URLEncode, URLDecode, UTF8 \ubcc0\ud658 \uc18c\uc2a4","date":"2014-07-23","format":false,"excerpt":"[\uac1c\ubc1c\/VC++] URLEncode, URLDecode, UTF8 \ubcc0\ud658 \uc18c\uc2a4 IT\/\uac1c\ubc1c\u00a02011\/02\/10 12:05 [\uac1c\ubc1c\/VC++] URLEncode, URLDecode, UTF8 \ubcc0\ud658 \uc18c\uc2a4 \uc544\ub798 \uc18c\uc2a4\ub294 \uba40\ud2f0\ubc14\uc774\ud2b8 \ubb38\uc790\uc9d1\ud569 \ud504\ub85c\uc81d\ud2b8 \uc124\uc815\uc73c\ub85c \uc791\uc5c5\ud574\uc57c \uc791\ub3d9\ub41c\ub2e4. inline BYTE toHex(const BYTE &x) { return x > 9 ? x + 55: x + 48; } CString URLEncode(CString sIn) { CString sOut; const int nLen =\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":250,"url":"https:\/\/blog.box.kr\/?p=250","url_meta":{"origin":248,"position":5},"title":"[\uac1c\ubc1c\/VC++] URLEncode, URLDecode, \uc720\ub2c8\ucf54\ub4dc \ubcc0\ud658 \uc18c\uc2a4","date":"2014-07-23","format":false,"excerpt":"[\uac1c\ubc1c\/VC++] URLEncode, URLDecode, \uc720\ub2c8\ucf54\ub4dc \ubcc0\ud658 \uc18c\uc2a4 IT\/\uac1c\ubc1c\u00a02011\/02\/10 12:08 [\uac1c\ubc1c\/VC++] URLEncode, URLDecode, UTF8 \ubcc0\ud658 \uc18c\uc2a4 [\uc720\ub2c8\ucf54\ub4dc \ubb38\uc790\uc9d1\ud569\uc6a9] CString Unicode_URLDecode( CString strEncodedText ) { CString strResult; wchar_t ch0, ch1, ch2; wchar_t wch; TCHAR tch; int i = 0; while( i<strEncodedText.GetLength() ) { tch = strEncodedText.GetAt(i); if( tch != _T('%') ) { \/\/\u2026","rel":"","context":"In &quot;C\/C++&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/posts\/248"}],"collection":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=248"}],"version-history":[{"count":0,"href":"https:\/\/blog.box.kr\/index.php?rest_route=\/wp\/v2\/posts\/248\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.box.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}