Microsoft MVP성태의 닷넷 이야기
COM 개체 관련: 6. WebBrowser 콘트롤에서 프레임을 구하는 소스 [링크 복사], [링크+제목 복사],
조회: 21741
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

아래의 소스는 "Programming Microsoft Internet Explorer 5"라는 책의 6장에 나와 있는 조각 소스입니다. 그 책의 예제 CD에는 아래의 소스가 나와 있지 않은데요. 아래의 부분에 대해서 "질문과 답변"란에 글이 올라왔는데, 매번 답변해 주기 위해서 그 소스를 직접 타이핑하기도 그래서 아예 이곳에 영구 보관을 해둡니다. (질문 답변란은 주기적으로 삭제를 합니다.)

아래의 m_webBrowser 변수는, 여러분이 VC++에서 "웹브라우저 컨트롤"을 삽입한 경우, 그 컨트롤을 가리키는 변수명입니다.
HtmlView를 사용하는 경우에는 그냥 HtmlView 클래스의 함수 안에서 GetDocument()를 통해서 lpDisp에 대입하시면 됩니다.

최상단의 웹브라우저 콘트롤에서, 그 웹브라우저 컨트롤이 소유하고 있는 "자식 웹브라우저 컨트롤", 즉 Frame을 열람해 오는 소스입니다.

물론, 프레임 안의 HTML 페이지가 또 프레임으로 나뉘어져 있는 경우를 위해서 아래의 구해 오는 부분을 그에 따른 "재귀 호출"로 구성해야 합니다. 하지만, 실무에서는 거의 3단계 이상의 프레임 사용이 없기 때문에 아예 그렇게 3번까지만 구해오는 방식을 취하는 분들도 계십니다.


LPDISPATCH lpDisp = NULL;
lpDisp = m_webBrowser.GetDocument();

if ( lpDisp ) {
IOleContainer *pContainer;

HRESULT hr = lpDisp->QueryInterface( IID_IOleContainer, (void **)&pContainer );
lpDisp->Release();

if ( FAILED( hr ) ) return hr;

IEnumUnknown *pEnumerator;

hr = pContainer->EnumObjects( OLECONTF_EMBEDDINGS, &pEnumerator );
pContainer->Release();

if ( FAILED( hr ) ) return hr;

IUnknown *pUnk;
ULONG uFetched;

for ( UINT i = 0; S_OK == pEnumerator->Next( 1, &pUnk, &uFetched; i ++ ) {
IWebBrowser2 *pWebBrowser;
hr = pUnk->QueryInterface( IID_IWebBrowser2, (void **)&pWebBrowser );
pUnk->Release();

if ( SUCCEEDED( hr ) ) {
// 구해진 내부 프레임을 소유한 IWebBrowser2 인터페이스를 사용한 후, Release 합니다.

pWebBrowser->Release();
}
}

pEnumerator->Release();
}








[최초 등록일: ]
[최종 수정일: 3/20/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1132정성태9/24/201174543Java: 9. 자바의 keytool.exe 사용법과 Tomcat의 SSL 통신 설정
1131정성태9/23/201130584Java: 8. 닷넷 개발자가 구현해 본 자바 웹 서비스 (2)
1130정성태9/23/201138792Java: 7. 닷넷 개발자가 구현해 본 자바 웹 서비스 (1)파일 다운로드2
1129정성태9/22/201130340개발 환경 구성: 130. Hyper-V에 MS-DOS VM 만드는 방법 - MSDN 구독자 대상 [3]
1128정성태9/20/201130577오류 유형: 137. KB2449742 보안 업데이트로 인한 충돌 문제 해결 - 두 번째 이야기
1127정성태9/19/201134512Java: 6. Java에서 MySQL 사용 [2]
1126정성태9/18/201129644Math: 3. "유클리드 호제법"과 "Bezout's identity" 구현 코드(C#)파일 다운로드1
1125정성태9/17/201127351Windows: 54. Windows 8 개발자 Preview를 사용해 보고... [2]
1124정성태9/17/201127756.NET Framework: 240. System.Collections.ArrayList가 .NET 4.5에서 지원이 안된다??? [2]
1123정성태9/17/201166610Windows: 53. 2가지 모드의 Internet Explorer 10과 ActiveX [6]
1122정성태9/16/201134243Windows: 52. 새롭게 지원되는 WinRT 응용 프로그램 [7]
1121정성태9/12/201129020Java: 5. WTP 내에서 서블릿을 실행하는 환경
1120정성태9/11/201129010.NET Framework: 239. IHttpHandler.IsReusable 속성 이야기파일 다운로드1
1119정성태9/11/201127997Java: 4. 이클립스에 WTP SDK가 설치되지 않는다면? [2]
1118정성태9/11/201139888Java: 3. 이클립스에서 서블릿 디버깅하는 방법 [4]
1117정성태9/9/201126984제니퍼 .NET: 17. 제니퍼 닷넷 적용 사례 (2) - 웹 애플리케이션 hang의 원인을 알려주다.
1116정성태9/8/201158561Java: 2. 자바에서 "Microsoft SQL Server JDBC Driver" 사용하는 방법
1115정성태9/4/201131647Java: 1. 닷넷 개발자가 처음 실습해 본 서블릿
1114정성태9/4/201136213Math: 2. "Zhang Suen 알고리즘(세선화, Thinning/Skeletonization)"의 C# 버전 [4]파일 다운로드1
1113정성태9/2/201135810개발 환경 구성: 129. Hyper-V에 CentOS 설치하기
1112정성태9/2/201152403Linux: 1. 리눅스 <-> 윈도우 원격 접속 프로그램 사용 [3]
1111정성태8/29/201126620제니퍼 .NET: 16. 적용 사례 (1) - DB Connection Pooling을 사용하지 않았을 때의 성능 저하를 알려주다. [1]
1110정성태8/26/201128197오류 유형: 136. RDP 접속이 불연속적으로 끊기는 문제
1109정성태8/26/201131031오류 유형: 135. 어느 순간 Active Directory 접속이 안되는 문제
1108정성태8/22/201132052오류 유형: 134. OLE/COM Object Viewer - DllRegisterServer in IVIEWERS.DLL failed. [1]
1107정성태8/21/201130539디버깅 기술: 43. Windows Form의 Load 이벤트에서 발생하는 예외가 Visual Studio에서 잡히지 않는 문제
... 151  152  153  154  155  156  157  [158]  159  160  161  162  163  164  165  ...