가). 브라우져캐쉬(CHCHE) 제거 - 가끔씩 HTML 이 캐쉬되면서 Refresh 가 작동하지 않을때는 아래 함수를 호출해 주면 됨
DeleteUrlCacheEntry(lpURL);
나) 브라우져컨트롤(CHtmlView)에서 스크립트 오류안나오게하기 - CHtmlView::OnAmbientProperty 오버로딩해서 구현하면 됩니다(http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=6243&ref=6243 사이트에서정보얻음)
BOOL CHtmlView::OnAmbientProperty(COleControlSite* pSite, DISPID dispid, VARIANT* pvar)
{
// TODO: Add your specialized code here and/or call the base class
if (pvar && dispid == DISPID_AMBIENT_DLCONTROL) {
V_VT(pvar) = VT_I4;
V_I4(pvar) =
DLCTL_DLIMAGES|
DLCTL_VIDEOS|
DLCTL_BGSOUNDS|
DLCTL_NO_SCRIPTS|
0;
return TRUE;
}
else
{
return CHtmlView::OnAmbientProperty(pSite, dispid, pvar);
}
//return CHtmlView::OnAmbientProperty(pSite, dispid, pvar);
}
다) CHtmlView 로부터 IHTMLDocument2, IHTMLDocument3, IHTMLElement 구하기
// IHTMLDocument2 와IHTMLDocument3 인터페이스를구한다.
CComPtr<IHTMLDocument2> pDoc = (IHTMLDocument2*)m_Html.GetHtmlDocument();
CComQIPtr<IHTMLDocument3> pHTML3 =pDoc;
CComPtr<IHTMLElement > pHTMLElmt;
pDoc->get_body(&pHTMLElmt);
// IHTMLDocument3 로부터"td" 로시작하는 모든 태그 element 들의collection 을구한다.
CComPtr<IHTMLElementCollection> pHtmlCol;
HRESULT hr = pHTML3->getElementsByTagName(CComBSTR("td"), &pHtmlCol);
long lTdCnt;
pHtmlCol->get_length(&lTdCnt);
CComVariant var;
// <td> 태그만큼 반복하면서 정보를구한다.
for( int i = 0; i < lTdCnt; i ++ )
{
CComPtr<IDispatch> pDispatch;
hr = pHtmlCol->item(CComVariant(i), CComVariant(0), &pDispatch);
if (hr != S_OK)
continue;
CComQIPtr<IHTMLElement>pElmt = pDispatch;
// TD 태그OBJECT 에 있는 모든 COLLECTION 을구하자.
CComPtr<IDispatch> pDispChild;
pElmt->get_all(&pDispChild);
CComQIPtr<IHTMLElementCollection>pCollChild = pDispChild;
long lTdCnt2;
pCollChild->get_length(&lTdCnt2);
string sName;
for (int j = 0; j < lTdCnt2; j++)
{
// do something
} // end of for (int j = 0; j < lTdCnt2; j++)
} // end of for( int i = 0; i < lTdCnt; i ++ )
STL::string 을이용팁
가) string 의생성자를 이용하면 아주 간단하게 문자열의 특정부분만 받아올수있다.
sTest = "1234567890";
// "2345" 부분만가져오고싶다면
// string(문자열, 시작 index, 복사할길이); 생성자를이용하자
string sTest2 = string(sTest, 1, 4); // 1 번째인덱스에서4바이트를가져온다.
// "12345" 를 가져오고 싶다면
// string(문자열, 복사할길이); 생성자를이용한다.
string sTest3 = string(sTest.c_str(), 5);
나) string::find_last_of 을이용예
// 모듈이름으로부터 Path 부분만가져오기
GetModuleFileName(AfxGetInstanceHandle(), szModuleName,sizeof(szModuleName));
string sModuleName = szModuleName;
string::size_type idx = sModuleName.find_last_of("\\");
string sPath = sModuleName.substr(0, idx);
다) string::replace 사용
// "바사아자" 를 찾아"abcd" 로변경한다.
string sOrg = "가나다라마바사아자차카타파하";
string sReplace = "abcd";
string sFind = "바사아자";
string::size_type findpos = sOrg.find(sFind);
// sFind 를 찾아 sFind 의 크기만큼 sReplace 로변경한다.
sOrg.replace(findpos, sFind.size(), sReplace);
라) "%" 로 둘로싸인 문자열을 찾아 리턴하는 함수예
// "가나다%abc% 마바사" 와같은 string 이 있을때"%"로시작해"%" 로끝나는
// 문자열이있는지찾는함수
// return : true -> 찾기성공
// string& s -> 원본스트링
// sReplacement -> 찾기성공했을때%--% 로끝나는문자열
bool CTest::FindReplacestring(string& s,string& sReplacement)
{
string::size_type firstidx, secondidx; // string 의 iterator 는반드시 string::size_type 를사용해야한다
firstidx = s.find_first_of("%"); // 첫번째"%" 찾기
if (string::npos == firstidx)
return false;
secondidx = s.find_first_of("%", firstidx + 1); // 두번재"%" 찾기
if (string::npos == secondidx) // string 의 end position 은 string::npos 임.
return false;
sReplacement = s.substr(firstidx, secondidx - firstidx + 1);
return true;
}
'C & C++ > MFC Network' 카테고리의 다른 글
[Web] 하이퍼 링크 (0) | 2011.12.14 |
---|---|
[Web] 웹사이트에 접속하여 원하는 HTML 문서 얻는법 (0) | 2011.12.14 |
[Web] 인터넷 연결여부 확인 (0) | 2011.05.25 |
[Web] 소켓 프로그래밍 (0) | 2011.04.25 |
[Web] 인터넷 프로그래밍 (0) | 2011.04.25 |
댓글