簡體   English   中英

無法獲取IViewObject :: Draw上班

[英]Can't get IViewObject::Draw To Work

我需要實現一個屏幕捕獲服務(C ++),該服務會啟動,即導航到某個站點,然后獲取該站點。

我加載了該網站並收到了DISPID_FRAMENAVIGATECOMPLETE事件,並且我正處於調用IViewObject :: Draw這樣的階段:

SHANDLE_PTR hwnd = 0;
browser->get_HWND(&hwnd);

RECT rc ={0,0,100, 100};
BOOL tst = GetClientRect((HWND)hwnd, &rc);

HDC hDC = GetDC((HWND)hwnd);
HDC hDCMem = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rc.right - rc.left, 
                                         rc.bottom - rc.top);
SelectObject(hDCMem, hBitmap);

//hr = OleDraw(ivo, DVASPECT_DOCPRINT, hdc, &rc);
hr = ivo->Draw(DVASPECT_CONTENT, -1, NULL, NULL, hDC, 
               hDCMem, (LPCRECTL)&rc, NULL, NULL, 0);

//copy to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();

一切都返回正確的返回值,S_OK等;

但是我在剪貼板上得到的只是一個黑色矩形-復制到繪畫中時,可以推測是通過CreatCompatibleBitmap創建的普通位圖數據。

如果我使用PrintWindow而不是IViewObject :: Draw,那么它將起作用,但是我不能使用它,因為它不適用於不可見的窗口(盡管目前在我的測試中所有可見)。

任何人有想法代碼有什么問題嗎?

非常感謝。

愚蠢的是,我忘記了一些COM基礎知識。 該調用跨越了流程邊界。 一旦我托管了該控件(只是對使用CHTMLView的MFC應用程序進行了黑客攻擊),它便可以正常工作。

但是,我認為我應該對此有一些錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM