HTML 컨트롤을 선택하여 기본적으로 제공되는 소스를 수정한 DHTML컨트롤.
기존의 IDHTCtrlUI을 삭제(이때, 컴파일 에러는 전부 주석처리)하고 외부로 노출될 UIObj Object를 추가했다.(ATL Object Wizard)
IDHTCtrl 인터페이스 생성부분에서 아래와 같이 수정 및 멤버변수를 추가했다.
// 웹 브라우저 생성, 인터페이스 교환
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CAxWindow wnd(m_hWnd);
// 1. Web Browser 컨트롤 생성
HRESULT hr = wnd.CreateControl(IDH_DHTCTRL);
if(SUCCEEDED(hr)) {
hr = CComObject<CUIObj>::CreateInstance(&m_pUI);
if(SUCCEEDED(hr)) {
// 2. Web Browser에게 연동되는 UIDisp 전달
CComQIPtr<IDispatch> pDisp(m_pUI);
hr = wnd.SetExternalDispatch(pDisp);
}
if(SUCCEEDED(hr)) {
// 3. Web Browser가 노출하고 있는 Interface 포인터 획득
hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_spBrowser);
// 4. Web Browser와 실제 연동할 m_pUI인터페이스에게 Web Interface 전달
m_pUI->put_Web(m_spBrowser);
}
}
return SUCCEEDED(hr)?0:-1;
}
CComObject<CUIObj> *m_pUI;
//////////////////////////////////////////////////////////////////////////////
IUIObj 인터페이스에 Web property를 추가.
STDMETHODIMP CUIObj::get_Web(IUnknown **pVal)
{
m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL);
return S_OK;
}
STDMETHODIMP CUIObj::put_Web(IUnknown *newVal)
{
m_spBrowser = (IWebBrowser2*)newVal;
return S_OK;
}
GoToURL()이란 메소드도 추가하여 메소드 안에서 m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL)을 호출.
멤버변수
CComPtr<IWebBrowser2> m_spBrowser; //IDHCtrl 에서 전달되는 인터페이스 저장
CComBSTR m_urlPath; //URL 저장공간
OnClick()메소드도 옮겨오기....소스복사, IDL수정....뭐 대충 이정도밖에 기억안나네ㅡ.,ㅡ
기존의 IDHTCtrlUI을 삭제(이때, 컴파일 에러는 전부 주석처리)하고 외부로 노출될 UIObj Object를 추가했다.(ATL Object Wizard)
IDHTCtrl 인터페이스 생성부분에서 아래와 같이 수정 및 멤버변수를 추가했다.
// 웹 브라우저 생성, 인터페이스 교환
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CAxWindow wnd(m_hWnd);
// 1. Web Browser 컨트롤 생성
HRESULT hr = wnd.CreateControl(IDH_DHTCTRL);
if(SUCCEEDED(hr)) {
hr = CComObject<CUIObj>::CreateInstance(&m_pUI);
if(SUCCEEDED(hr)) {
// 2. Web Browser에게 연동되는 UIDisp 전달
CComQIPtr<IDispatch> pDisp(m_pUI);
hr = wnd.SetExternalDispatch(pDisp);
}
if(SUCCEEDED(hr)) {
// 3. Web Browser가 노출하고 있는 Interface 포인터 획득
hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_spBrowser);
// 4. Web Browser와 실제 연동할 m_pUI인터페이스에게 Web Interface 전달
m_pUI->put_Web(m_spBrowser);
}
}
return SUCCEEDED(hr)?0:-1;
}
CComObject<CUIObj> *m_pUI;
//////////////////////////////////////////////////////////////////////////////
IUIObj 인터페이스에 Web property를 추가.
STDMETHODIMP CUIObj::get_Web(IUnknown **pVal)
{
m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL);
return S_OK;
}
STDMETHODIMP CUIObj::put_Web(IUnknown *newVal)
{
m_spBrowser = (IWebBrowser2*)newVal;
return S_OK;
}
GoToURL()이란 메소드도 추가하여 메소드 안에서 m_spBrowser->Navigate(m_urlPath,NULL,NULL,NULL,NULL)을 호출.
멤버변수
CComPtr<IWebBrowser2> m_spBrowser; //IDHCtrl 에서 전달되는 인터페이스 저장
CComBSTR m_urlPath; //URL 저장공간
OnClick()메소드도 옮겨오기....소스복사, IDL수정....뭐 대충 이정도밖에 기억안나네ㅡ.,ㅡ