想用mshtml解析html字符串并生成图片,并且程序不要有窗口。
代码如下:
IHTMLDocument2 *pDoc = NULL;
CoInitialize(NULL);
CoCreateInstance(CLSID_HTMLDocument,
NULL,
CLSCTX_INPROC_SERVER,
IID_IHTMLDocument2,
(LPVOID *) &pDoc);
if (pDoc)
{
IHTMLElement *pElement = (IHTMLElement *) NULL;
IHTMLElementRender *pRender = (IHTMLElementRender *) NULL;
BSTR bstr = SysAllocString(OLESTR("<HTML><body style='width:200px;height:300px;'>fffffffffffffffffffffffffffff</body></HTML>"));
SAFEARRAY *psaStrings = SafeArrayCreateVector(VT_VARIANT, 0, 1);
VARIANT *param;
HRESULT hr = SafeArrayAccessData(psaStrings, (LPVOID*)¶m);
param->vt = VT_BSTR;
param->bstrVal = bstr;
hr = SafeArrayUnaccessData(psaStrings);
hr = pDoc->write(psaStrings);
pDoc->close();
pDoc->get_body(&pElement);
// Let's be paranoid...
if (pElement == (IHTMLElement *) NULL)
return FALSE;
pElement->QueryInterface(IID_IHTMLElementRender, (void **) &pRender);
if (pRender == (IHTMLElementRender *) NULL)
return FALSE;
long width = 200;
long height = 150;
HDC src = GetDC(NULL);
//HDC src = ::GetDC(hwnd);
HDC dc = CreateCompatibleDC(src);
HBITMAP hbitmap = CreateCompatibleBitmap(src, width, height);
HBITMAP hOriginal = (HBITMAP)SelectObject(dc, hbitmap);
pRender->DrawToDC(dc);
SelectObject(dc, hOriginal);
DeleteDC(dc);
DeleteDC(src);
pRender->Release();
//ScreenSnap(hbitmap,L"d:\\a.bmp",src);
//pDoc->Release();
//return hbitmap;
}
CoUninitialize();
生成图片代码:
void ScreenSnap(HBITMAP hBitmap,LPCWSTR bmpPath,HDC dc)
{
BITMAP bmInfo;
DWORD bmDataSize;
char *bmData;//位图数据
GetObject(hBitmap,sizeof(BITMAP),&bmInfo);//根据位图句柄,获取位图信息
bmDataSize=bmInfo.bmWidthBytes*bmInfo.bmHeight;//计算位图数据大小
bmData=new char[bmDataSize];//分配数据
BITMAPFILEHEADER bfh;//位图文件头
bfh.bfType=0x4d42;
bfh.bfSize=bmDataSize+54;
bfh.bfReserved1=0;
bfh.bfReserved2=0;
bfh.bfOffBits=54;
BITMAPINFOHEADER bih;//位图信息头
bih.biSize=40;
bih.biWidth=bmInfo.bmWidth;
bih.biHeight=bmInfo.bmHeight;
bih.biPlanes=1;
bih.biBitCount=24;
bih.biCompression=BI_RGB;
bih.biSizeImage=bmDataSize;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
bih.biClrUsed=0;
bih.biClrImportant=0;
::GetDIBits(dc,hBitmap,0,bmInfo.bmHeight,bmData,(BITMAPINFO *)&bih,DIB_RGB_COLORS);//获取位图数据部分
HANDLE hFile=CreateFile(bmpPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,0);//创建文件
DWORD dwSize;
WriteFile(hFile,(void *)&bfh,sizeof(BITMAPFILEHEADER),&dwSize,0);//写入位图文件头
WriteFile(hFile,(void *)&bih,sizeof(BITMAPINFOHEADER),&dwSize,0);//写入位图信息头
WriteFile(hFile,(void *)bmData,bmDataSize,&dwSize,0);//写入位图数据
::CloseHandle(hFile);//关闭文件句柄
}
生成的是一张黑色的图片,没有任何内容。
http://blog.csdn.net/lanuage/article/details/72825878?locationNum=14&fps=1