2011-07-26 12 views
0

私はvC++の初心者です。私は画像にHTMLファイルを変換しようとしているとpngとして、VBで保存する+ +。今度はhtmlをビットマップに変換し、CImageのsave関数を使って保存しました。私はWindows 2008でこのアプリケーションを実行したいと思っています。アプリケーションを手動で実行すると正しく動作します。私はスケジュールタスクを実行する必要があります。しかし、アプリケーションがスケジュールタスクを実行するとき、イメージは作成されません。CImageを使用せずにvC++でビットマップをpngとして保存する方法

どうすればこの問題を解決できますか?

これは私のコード

BOOL CCreateHtml::CreateImage(IHTMLDocument2 *pDoc,LPCTSTR szDestFilename,CSize srcSize){ 
IHTMLDocument3* pDocument3 = NULL; 
IHTMLDocument2* pDocument = NULL; 
IHTMLElement2* pElement2 = NULL; 
IHTMLElement* pElement  = NULL; 
IViewObject2* pViewObject = NULL; 
IDispatch* pDispatch  = NULL; 
IViewObject* pViewObj = NULL; 

HRESULT hr; 

long bodyHeight; 
long bodyWidth; 
long rootHeight; 
long rootWidth; 
long height; 
long width; 
CImage img; 
    if(FAILED(m_pBrowser->get_Document(&pDispatch))) 
    return FALSE; 
if(FAILED(pDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&pDocument))) 
    return FALSE; 
if(FAILED(pDocument->get_body(&pElement))) 
    return FALSE; 
if(FAILED(pElement->QueryInterface(IID_IHTMLElement2,(void**)&pElement2))) 
    return FALSE; 
if(FAILED(pElement2->get_scrollHeight(&bodyHeight))) 
    return FALSE; 
if(FAILED(pElement2->get_scrollWidth(&bodyWidth))) 
    return FALSE; 
if(FAILED(pDispatch->QueryInterface(IID_IHTMLDocument3,(void**)&pDocument3))) 
    return FALSE; 
if(FAILED(pDocument3->get_documentElement(&pElement))) 
    return FALSE; 
if(FAILED(pElement->QueryInterface(IID_IHTMLElement2,(void**)&pElement2))) 
    return FALSE; 
if(FAILED(pElement2->get_scrollHeight(&rootHeight))) 
    return FALSE; 
if(FAILED(pElement2->get_scrollWidth(&rootWidth))) 
    return FALSE; 

HBITMAP m_hBmp; 
width = bodyWidth; 
height = rootHeight > bodyHeight ? rootHeight : bodyHeight; 

if(width > 2000) 
    width = 2000; 
if(height > 2000) 
    height = 2000; 

MoveWindow(0,0,width,height,TRUE); 
::MoveWindow(m_hwndWebBrowser,0,0,width,height,TRUE); 

if(FAILED(m_pBrowser->QueryInterface(IID_IViewObject2,(void**)&pViewObject))) 
    return FALSE; 

CDC *cdcMain = GetDC(); 
HDC hdcMain = *cdcMain; 
HDC hdcMem = CreateCompatibleDC(hdcMain); 
m_hBmp = CreateCompatibleBitmap(hdcMain,width,height); 
SelectObject(hdcMem,m_hBmp); 

RECTL rcBounds = { 0, 0, width, height }; 

hr = pViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL,hdcMain,hdcMem, &rcBounds, NULL, NULL, 0); 

img.Attach(m_hBmp); 
if(!hr ==img.Save(szDestFilename)) 
    return FALSE; 
img.Detach(); 
img.Destroy(); 

pViewObject->Release(); 
return TRUE; 

}

答えて

1

であるあなたが答えのようなつもりじゃないけどありますが、何のビルドでPNG画像のサポートされていない、あなたは次のように外部ライブラリを使用する必要がありますpnglib

幸運を祈る!

関連する問題