日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接)

發布時間:2025/3/15 HTML 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用MSHTML 對 Html 進行DOM 操作(放縮,顏色...),HTML抓圖(放縮,滾動,拼接)

以前的代碼,使用ATL會更整潔

?

//? 放縮抓圖

void CPageCaptureView::GetZoomPageDC()
{
??? LONG lWidth = WINDOW_WIDTH;
??? LONG lHeight = WINDOW_HEIGHT;
??? BOOL bMargin = TRUE;
??? IOleWindow *InterfacePtr = NULL;
??? IHTMLDocument2* pDoc = NULL;
??? IHTMLElement* pBodyElem = NULL;
??? IHTMLBodyElement* pBody = NULL;
??? IHTMLElement2* pBodyElement2=NULL;
??? IHTMLStyle* pStyle = NULL;
??? IHTMLStyle3 *pStyle3=NULL;
??? LPDISPATCH pDisp = NULL;
??? IOleObject * pObj = NULL;
??? HRESULT hr = S_OK;


??? pDisp = GetHtmlDocument();
??? ASSERT(pDisp);
??? if (pDisp)
??? {
??? ??? hr = pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
??? ??? if (SUCCEEDED(hr)&&pDoc)
??? ??? {
??? ??? ??? hr = pDoc->get_body(&pBodyElem);
??? ??? ??? if (SUCCEEDED(hr)&&pBodyElem)
??? ??? ??? {
??? ??? ??? ??? // hide 3D border
??? ??? ??? ??? hr =pBodyElem->get_style(&pStyle);
??? ??? ??? ??? if (SUCCEEDED(hr)&&pStyle)
??? ??? ??? ??? {
??? ??? ??? ??? ??? pStyle->put_borderStyle(CComBSTR("none"));
??? ??? ??? ??? ??? hr = pStyle->QueryInterface(IID_IHTMLStyle3,(void**)&pStyle3);
??? ??? ??? ??? ??? if (SUCCEEDED(hr&&pStyle3))
??? ??? ??? ??? ??? {
??? ??? ??? ??? ??? ??? CString str(ZOOM);
??? ??? ??? ??? ??? ??? BSTR bStr = str.AllocSysString();
??? ??? ??? ??? ??? ??? VARIANT var;
??? ??? ??? ??? ??? ??? var.vt = VT_BSTR;
??? ??? ??? ??? ??? ??? var.bstrVal= bStr;
??? ??? ??? ??? ??? ??? pStyle3->put_zoom(var);???
??? ??? ??? ??? ??? ??? if (bStr)
??? ??? ??? ??? ??? ??? {
??? ??? ??? ??? ??? ??? ??? SysFreeString(bStr);
??? ??? ??? ??? ??? ??? }
??? ??? ??? ??? ??? ??? pStyle3->Release();
??? ??? ??? ??? ??? }
??? ??? ??? ??? ??? pStyle->Release();
??? ??? ??? ??? }???
??? ??? ??? ??? // hide scroll bars
??? ??? ??? ??? hr = pBodyElem->QueryInterface(IID_IHTMLBodyElement, (void**)&pBody);
??? ??? ??? ??? if (SUCCEEDED(hr)&&pBody)
??? ??? ??? ??? {
??? ??? ??? ??? ??? pBody->put_scroll(CComBSTR("no"));
??? ??? ??? ??? ??? pBody->Release();
??? ??? ??? ??? }
??? ??? ??? ??? // get dimension and resize
??? ??? ??? ??? hr = pBodyElem->QueryInterface(IID_IHTMLElement2, (void**)&pBodyElement2);
??? ??? ??? ??? if (SUCCEEDED(hr)&&pBodyElement2)
??? ??? ??? ??? {
??? ??? ??? ??? ??? long iScrollWidth = 0,iScrollHeight = 0,
??? ??? ??? ??? ??? ??? iClientWidth = 0,iClientHeight = 0;
??? ??? ??? ??? ??? pBodyElement2->get_scrollWidth(&iScrollWidth);
??? ??? ??? ??? ??? pBodyElement2->get_scrollHeight(&iScrollHeight);
??? ??? ??? ??? ??? pBodyElement2->get_clientWidth(&iClientWidth);
??? ??? ??? ??? ??? pBodyElement2->get_clientHeight(&iClientHeight);
??? ??? ??? ??? ??? CString strZoom(ZOOM);
??? ??? ??? ??? ??? strZoom.Replace("%","");
??? ??? ??? ??? ??? float fZoom = atof(strZoom)/100.0;
??? ??? ??? ??? ??? if (iScrollWidth>iClientWidth)
??? ??? ??? ??? ??? {
??? ??? ??? ??? ??? ??? lWidth =? fZoom * iScrollWidth;??? ???
??? ??? ??? ??? ??? ??? bMargin = FALSE;
??? ??? ??? ??? ??? }
??? ??? ??? ??? ??? if (iScrollHeight>iClientHeight)
??? ??? ??? ??? ??? {
??? ??? ??? ??? ??? ??? lHeight = fZoom * iScrollHeight;
??? ??? ??? ??? ??? }
??? ??? ??? ??? ??? SetWindowPos(NULL,0,0,lWidth,lHeight,SWP_HIDEWINDOW);?
??? ??? ??? ??? ??? pBodyElement2->Release();
??? ??? ??? ??? }

??? ??? ??? ??? LONG lBmpWidth = lWidth;
??? ??? ??? ??? LONG lBmpHeight = lHeight;
??? ??? ??? ??? LONG lMarginLeft = 50, lMarginRight = 50, lMarginTop? = 35, lMarginBottom? = 35;

??? ??? ??? ??? if (lBmpWidth > lBmpHeight*ASPECT_RADIO)
??? ??? ??? ??? {
??? ??? ??? ??? ??? lBmpHeight = lBmpWidth/ASPECT_RADIO;
??? ??? ??? ??? }
??? ??? ??? ??? else
??? ??? ??? ??? {
??? ??? ??? ??? ??? lBmpWidth = lBmpHeight*ASPECT_RADIO;
??? ??? ??? ??? }
??? ??? ??? ??? if (!bMargin)
??? ??? ??? ??? {
??? ??? ??? ??? ??? lMarginLeft = lMarginRight = lMarginTop = lMarginBottom = 0;
??? ??? ??? ??? ??? lBmpWidth = lWidth;
??? ??? ??? ??? ??? lBmpHeight = lHeight;
??? ??? ??? ??? }
??? ??? ??? ??? LONG lPageWidth = lBmpWidth + lMarginLeft + lMarginRight;
??? ??? ??? ??? LONG lPageHeight = lBmpHeight + lMarginTop + lMarginBottom;

??? ??? ??? ??? // resize ole
??? ??? ??? ??? hr = m_pBrowserApp->QueryInterface(IID_IOleObject,(void**)&pObj);
??? ??? ??? ??? if (SUCCEEDED(hr)&&pObj)
??? ??? ??? ??? {
??? ??? ??? ??? ??? SIZEL size ={lWidth,lHeight};
??? ??? ??? ??? ??? pObj->SetExtent(DVASPECT_CONTENT,&size);
??? ??? ??? ??? ??? pObj->Release();
??? ??? ??? ??? }

??? ??? ??? ??? //Draw
??? ??? ??? ??? HDC hScreenDC = ::GetDC(NULL);
??? ??? ??? ??? HDC hDrawDC = CreateCompatibleDC(NULL);
// ??? ??? ??? ??? SIZE PrevExt1, PrevExt2;
// ??? ??? ??? ??? SetMapMode(hImageDC, MM_HIENGLISH);
// ??? ??? ??? ??? GetWindowExtEx(hImageDC, &PrevExt1);
// ??? ??? ??? ??? GetViewportExtEx(hImageDC, &PrevExt2);
// ??? ??? ??? ???
// ??? ??? ??? ??? PrevExt1.cx *= 0.6;
// ??? ??? ??? ??? PrevExt1.cy *= 0.6;
// ??? ??? ??? ??? SetMapMode(hImageDC, MM_ISOTROPIC);
// ??? ??? ??? ??? SetWindowExtEx(hImageDC, PrevExt1.cx, PrevExt1.cy, NULL);??? //600DPI
// ??? ??? ??? ??? SetViewportOrgEx(hImageDC, 0, 0, NULL);
// ??? ??? ??? ??? SetViewportExtEx(hImageDC, PrevExt2.cx, -PrevExt2.cy, NULL);

??? ??? ??? ??? HBITMAP hDrawBmp = NULL;
??? ??? ??? ??? hDrawBmp = CreateCompatibleBitmap(hScreenDC, lWidth,
??? ??? ??? ??? ??? lHeight);
??? ??? ??? ??? if(!hDrawBmp)
???????????????????? return;
??? ??? ??? ??? HGDIOBJ hOld = SelectObject(hDrawDC, hDrawBmp);
??? ??? ??? ??? RECT rt = {0,0,lWidth,lHeight};
??? ??? ??? ??? HBRUSH hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
??? ??? ??? ??? FillRect(hDrawDC,&rt,hBrush);
??? ??? ??? ??? RECT rcSource={0,0,lWidth,lHeight};??? ??? ???
??? ??? ??? ??? OleDraw(m_pBrowserApp,DVASPECT_CONTENT,hDrawDC,&rcSource);

??? ??? ??? ??? HANDLE hDibNew = pDib->CreateDib(lPageWidth,lPageHeight,NULL, 24);
??? ??? ??? ??? if (pDib->hdib)
??? ??? ??? ??? {
??? ??? ??? ??? ??? GlobalFree(pDib->hdib);
??? ??? ??? ??? ??? pDib->hdib = NULL;
??? ??? ??? ??? }
??? ??? ??? ??? if (hDibNew)
??? ??? ??? ??? {
??? ??? ??? ??? ??? pDib->CreateDibFromHandle(hDibNew);
??? ??? ??? ??? }
??? ??? ??? ??? CDrawDib dib;
??? ??? ??? ??? HANDLE handle = NULL;
??? ??? ??? ??? handle = dib.DibFromBitmap(hDrawBmp,BI_RGB,24,NULL);

??? ??? ??? ??? if (handle&&pDib)
??? ??? ??? ??? {
??? ??? ??? ??? ??? pDib->BitBlts(lMarginLeft+(lBmpWidth-lWidth)/2.0,lMarginTop+(lBmpHeight-lHeight)/2.0,
??? ??? ??? ??? ??? ??? handle);
??? ??? ??? ??? ??? GlobalFree(handle);
??? ??? ??? ??? }? ??? ???
??? ??? ??? ??? ::DeleteObject(hBrush);
??? ??? ??? ??? ::DeleteObject(hDrawBmp);
??? ??? ??? ??? ::ReleaseDC(0, hScreenDC);
??? ??? ??? ??? ::DeleteDC(hDrawDC);
??? ??? ??? ??? pBodyElem->Release();
??? ??? ??? }
??? ??? ??? pDoc->Release();
??? ??? }
??? ??? pDisp->Release();
??? }
??? g_eventComplete->SetEvent();
}

?

// 改變Font

HRESULT CPageCaptureView::ChangeFontSize(float nZoom)
{
??? CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> pDoc2;
??? CComQIPtr<IHTMLElementCollection,&IID_IHTMLElementCollection>? pCollection;
??? //CComQIPtr<IHTMLDocument3,&IID_IHTMLDocument2> pDoc3;
??? CComQIPtr<IHTMLElement,&IID_IHTMLElement> pBody;
??? CComQIPtr<IHTMLElement2,&IID_IHTMLElement2> pBody2;
??? LPDISPATCH pDisp = NULL;
??? HRESULT? hr = S_OK;
??? pDisp = GetHtmlDocument();
??? if(!pDisp)
??? {
??? ??? return E_FAIL;
??? }
???
??? //??? hr = pDoc->QueryInterface(IID_IHTMLDocument3,(void**)&pDoc3);
??? hr = pDisp->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc2);
???
??? if (hr || (!pDoc2))
??? {
??????? return E_FAIL;
??? }
??? hr = pDoc2->get_body(&pBody);//getElementsByTagName(L"SPAN",&pCollection);
??? if (hr || (!pBody))
??? {
??????? return E_FAIL;
??? }
??? pBody->QueryInterface(IID_IHTMLElement2,(void**)&pBody2);
??? if (hr || (!pBody2))
??? {
??????? return E_FAIL;
??? }
??? pBody2->getElementsByTagName(L"SPAN",&pCollection);;
??? if (hr || (!pCollection))
??? {
??????? return E_FAIL;
??? }
???
??? long len;
??? VARIANT varIndex;
??? VARIANT var2;
??? varIndex.vt=VT_I4;
??? VariantInit( &var2 );
??? pCollection->get_length(&len);
??? CComVariant var;
??? for(long i=0; i<len; i++)
??? {
??? ??? CComQIPtr<IHTMLStyle,&IID_IHTMLStyle> pStyle;
??? ??? varIndex.lVal=i;
??? ??? CComPtr<IDispatch> pDisp;
??? ??? pCollection->item(varIndex,var2, &pDisp);
??? ??? if (hr || (!pDisp))
??? ??? {
??? ??? ??? return E_FAIL;
??? ??? }
??? ??? CComQIPtr<IHTMLElement,&IID_IHTMLElement>? pElement(pDisp);
??? ???
??? ??? if ((!pElement))
??? ??? {
??? ??? ??? return E_FAIL;
??? ??? }
??? ??? hr = pElement->get_style(&pStyle);
??? ??? if (hr || (!pStyle))
??? ??? {
??? ??? ??? continue;
??? ??? }
??? ??? hr = pStyle->get_fontSize(&var);
??? ??? if(var.bstrVal != NULL && var.vt == VT_BSTR)
??? ??? {
??? ??? ??? CString strSize(var.bstrVal);
??? ??? ??? strSize.TrimLeft();
??? ??? ??? strSize.TrimRight();
??? ??? ??? if (strSize.Find("pt")!=-1)
??? ??? ??? {
??? ??? ??? ??? CString str =strSize.Left(strSize.GetLength()-2);
??? ??? ??? ??? int n = atoi(str);
??? ??? ??? ??? str.Format("%dpt",(int)(n*nZoom));
??? ??? ??? ??? var.bstrVal = str.AllocSysString();
??? ??? ??? ??? pStyle->put_fontSize(var);
??? ??? ??? }
??? ??? ???
??? ??? }
??? }
??? return hr;
}

總結

以上是生活随笔為你收集整理的Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产日韩在线观看 | 国产高清不卡av | 青青草97国产精品免费观看 | 国产男女猛烈无遮挡免费视频 | 国产精品久久久久久人妻精品动漫 | 综合av一区| 国产精品厕所 | 78日本xxxxxxxxx59 亚洲图片小说视频 | 国产破处在线 | 亚洲一区在线观看视频 | 中文字幕视频 | 国产性生活片 | 成人毛片在线观看 | 视频一区国产精品 | 亚洲欧美日韩网站 | 日本久热 | 久久婷婷国产麻豆91 | 成人影片在线免费观看 | 久久青青草原亚洲av无码麻豆 | 国产精品日韩无码 | 日本不卡一区在线观看 | 曰批又黄又爽免费视频 | 国产剧情精品在线 | 亚洲色图27p| 亚洲综合在线一区二区 | 午夜小视频在线观看 | 亚洲国产成人精品一区二区三区 | 在线日韩成人 | 国产真实老熟女无套内射 | 第一页在线视频 | av天堂永久资源网 | 青少年xxxxx性开放hg | 涩涩屋视频在线观看 | 免费av手机在线观看 | 狠狠干狠狠操 | 特大黑人娇小亚洲女mp4 | 白白色免费视频 | 日本黄色a视频 | 国产成人在线观看网站 | 亚洲 激情| 久久久国产免费 | 高清不卡毛片 | 欧美成人午夜77777 | 激情文学久久 | julia一区二区三区中文字幕 | 亚洲无码精品一区二区三区 | 夜夜se| 欧美男女性生活视频 | 国产91高清| 欧美成人aaa片一区国产精品 | 爱草视频| 婷婷欧美 | 人人爽人人草 | 国产对白羞辱绿帽vk | 日本国产在线观看 | 日韩精品成人在线 | 欧美老女人xx | 91ts人妖另类精品系列 | 香蕉在线观看视频 | 色哟哟无码精品一区二区三区 | 亚洲欧美中文字幕 | 久久久无码精品亚洲国产 | 少妇精品无码一区二区三区 | 一区二区免费视频 | 91精品国产手机 | www.九九九| 精品久久亚洲 | 午夜精品一区二区三区在线视频 | 影音先锋亚洲资源 | 99视屏| 国产女人精品视频 | 国产精品一品二区三区的使用体验 | 三级三级久久三级久久18 | 影音先锋在线看 | av片在线免费看 | 小俊大肉大捧一进一出好爽 | 亚洲影视精品 | 天天艹av| 九九九在线 | 国产精品久久综合 | 日韩一区二区免费视频 | 李宗瑞91在线正在播放 | 国产精品久久免费 | 日韩网站在线播放 | 黑名单上的人全集免费观看 | 永久av免费 | 国产精品久久久久999 | 一区二区自拍偷拍 | 国产小视频91 | 欧美aaa级片 | 亚洲第一视频在线播放 | 亚洲天堂av女优 | 国产女人被狂躁到高潮小说 | 亚洲经典一区二区三区 | 亚洲乱乱 | 午夜精品一区二区三区在线观看 | 99视频久 | 亚洲视频黄色 | 顶级毛片 |