HRESULT PrintWebUIDelegate::webViewPrintingMarginRect(IWebView* view, RECT* rect) { if (!view || !rect) return E_POINTER; IWebFrame* mainFrame = 0; if (FAILED(view->mainFrame(&mainFrame))) return E_FAIL; IWebFramePrivate* privateFrame = 0; if (FAILED(mainFrame->QueryInterface(&privateFrame))) { mainFrame->Release(); return E_FAIL; } privateFrame->frameBounds(rect); rect->left += MARGIN; rect->top += MARGIN; HDC dc = ::GetDC(0); rect->right = (::GetDeviceCaps(dc, LOGPIXELSX) * 6.5) - MARGIN; rect->bottom = (::GetDeviceCaps(dc, LOGPIXELSY) * 11) - MARGIN; ::ReleaseDC(0, dc); privateFrame->Release(); mainFrame->Release(); return S_OK; }
HRESULT STDMETHODCALLTYPE WebKitUIDelegate::webViewPrintingMarginRect( /* [in] */ IWebView *webView, /* [retval][out] */ RECT *rect) { if (!webView || !rect) return E_POINTER; IWebFrame* mainFrame = 0; if (FAILED(webView->mainFrame(&mainFrame))) return E_FAIL; IWebFramePrivate* framePrivate = 0; if (FAILED(mainFrame->QueryInterface(&framePrivate))) { mainFrame->Release(); return E_FAIL; } framePrivate->frameBounds(rect); rect->left += MARGIN; rect->top += MARGIN; rect->right -= MARGIN; rect->bottom -= MARGIN; framePrivate->Release(); mainFrame->Release(); return S_OK; }
void PrintView(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC printDC = getPrinterDC(); if (!printDC) { ::MessageBox(0, _T("Error creating printing DC"), _T("Error"), MB_APPLMODAL | MB_OK); return; } if (::SetAbortProc(printDC, AbortProc) == SP_ERROR) { ::MessageBox(0, _T("Error setting up AbortProc"), _T("Error"), MB_APPLMODAL | MB_OK); return; } IWebFrame* frame = 0; if (FAILED(gWebView->mainFrame(&frame))) goto exit; IWebFramePrivate* framePrivate = 0; if (FAILED(frame->QueryInterface(&framePrivate))) goto exit; framePrivate->setInPrintingMode(TRUE, printDC); UINT pageCount = 0; framePrivate->getPrintedPageCount(printDC, &pageCount); DOCINFO di; initDocStruct(&di, _T("WebKit Doc")); ::StartDoc(printDC, &di); // FIXME: Need CoreGraphics implementation void* graphicsContext = 0; for (size_t page = 1; page <= pageCount; ++page) { ::StartPage(printDC); framePrivate->spoolPages(printDC, page, page, graphicsContext); ::EndPage(printDC); } framePrivate->setInPrintingMode(FALSE, printDC); ::EndDoc(printDC); ::DeleteDC(printDC); exit: if (frame) frame->Release(); if (framePrivate) framePrivate->Release(); }
static void loadURL(BSTR urlBStr) { IWebFrame* frame = 0; IWebMutableURLRequest* request = 0; static BSTR methodBStr = 0; if (!methodBStr) methodBStr = SysAllocString(TEXT("GET")); if (urlBStr && urlBStr[0] && (PathFileExists(urlBStr) || PathIsUNC(urlBStr))) { TCHAR fileURL[INTERNET_MAX_URL_LENGTH]; DWORD fileURLLength = sizeof(fileURL)/sizeof(fileURL[0]); if (SUCCEEDED(UrlCreateFromPath(urlBStr, fileURL, &fileURLLength, 0))) urlBStr = fileURL; } HRESULT hr = gWebView->mainFrame(&frame); if (FAILED(hr)) goto exit; hr = CoCreateInstance(CLSID_WebMutableURLRequest, 0, CLSCTX_ALL, IID_IWebMutableURLRequest, (void**)&request); if (FAILED(hr)) goto exit; hr = request->initWithURL(urlBStr, WebURLRequestUseProtocolCachePolicy, 0); if (FAILED(hr)) goto exit; hr = request->setHTTPMethod(methodBStr); if (FAILED(hr)) goto exit; hr = frame->loadRequest(request); if (FAILED(hr)) goto exit; SetFocus(gViewWindow); exit: if (frame) frame->Release(); if (request) request->Release(); }
HRESULT WinLauncherWebHost::updateAddressBar(IWebView* webView) { IWebFrame* mainFrame = 0; IWebDataSource* dataSource = 0; IWebMutableURLRequest* request = 0; BSTR frameURL = 0; HRESULT hr = S_OK; hr = webView->mainFrame(&mainFrame); if (FAILED(hr)) goto exit; hr = mainFrame->dataSource(&dataSource); if (FAILED(hr) || !dataSource) hr = mainFrame->provisionalDataSource(&dataSource); if (FAILED(hr) || !dataSource) goto exit; hr = dataSource->request(&request); if (FAILED(hr) || !request) goto exit; hr = request->mainDocumentURL(&frameURL); if (FAILED(hr)) goto exit; SendMessage(hURLBarWnd, (UINT)WM_SETTEXT, 0, (LPARAM)frameURL); exit: if (mainFrame) mainFrame->Release(); if (dataSource) dataSource->Release(); if (request) request->Release(); SysFreeString(frameURL); return 0; }
void PageLoadTestClient::didStartProvisionalLoad(IWebFrame& frame) { _com_ptr_t<_com_IIID<IWebFrame2, &__uuidof(IWebFrame2)>> frame2; if (FAILED(frame.QueryInterface(&frame2.GetInterfacePtr()))) return; BOOL mainFrame = FALSE; if (frame2 && FAILED(frame2->isMainFrame(&mainFrame))) return; if (mainFrame) { clearPageLoadState(); pageLoadStartedAtTime(CFAbsoluteTimeGetCurrent()); } }
HRESULT STDMETHODCALLTYPE WebKitUIDelegate::printFrame( /* [in] */ IWebView *webView, /* [in] */ IWebFrame *frame) { // This code is originally based on the PrintView function in // the WinLauncher code of WebKit. We should periodically check // there to ensure that this doesn't become obsolete. // Open a printing dialog to fetch the HDC of the desired printer. PRINTDLG dialog; ZeroMemory(&dialog, sizeof(PRINTDLG)); dialog.lStructSize = sizeof(PRINTDLG); dialog.Flags = PD_PRINTSETUP | PD_RETURNDC; BOOL dialogResult = ::PrintDlg(&dialog); if (!dialogResult) // Error or cancel. { DWORD reason = CommDlgExtendedError(); if (!reason) // User cancelled. return S_OK; logger->Error("Could not print page, dialog error code: %i", reason); return E_FAIL; } HDC hdc = dialog.hDC; if (!hdc) { logger->Error("Could not fetch printer HDC."); return E_FAIL; } if (::SetAbortProc(hdc, AbortProc) == SP_ERROR) { logger->Error("Could not set printer AbortProc."); return E_FAIL; } IWebFrame* mainFrame = 0; if (FAILED(webView->mainFrame(&mainFrame))) { return E_POINTER; } IWebFramePrivate* framePrivate = 0; if (FAILED(mainFrame->QueryInterface(&framePrivate))) { mainFrame->Release(); return E_POINTER; } framePrivate->setInPrintingMode(TRUE, hdc); UINT pageCount = 0; framePrivate->getPrintedPageCount(hdc, &pageCount); DOCINFO docInfo; ZeroMemory(&docInfo, sizeof(DOCINFO)); docInfo.cbSize = sizeof(DOCINFO); docInfo.lpszDocName = _T("Titanium Document"); ::StartDoc(hdc, &docInfo); void* graphicsContext = 0; for (size_t page = 1; page <= pageCount; page++) { ::StartPage(hdc); framePrivate->spoolPages(hdc, page, page, graphicsContext); ::EndPage(hdc); } framePrivate->setInPrintingMode(FALSE, hdc); ::EndDoc(hdc); ::DeleteDC(hdc); if (mainFrame) mainFrame->Release(); if (framePrivate) framePrivate->Release(); return S_OK; }
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { #ifdef _CRTDBG_MAP_ALLOC _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); #endif UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: Place code here. MSG msg; HACCEL hAccelTable; INITCOMMONCONTROLSEX InitCtrlEx; InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX); InitCtrlEx.dwICC = 0x00004000; //ICC_STANDARD_CLASSES; InitCommonControlsEx(&InitCtrlEx); // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_WINLAUNCHER, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) return FALSE; // Init COM OleInitialize(NULL); hURLBarWnd = CreateWindow(L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, 0, 0, 0, 0, hMainWnd, 0, hInstance, 0); DefEditProc = GetWindowLong(hURLBarWnd, GWL_WNDPROC); SetWindowLong(hURLBarWnd, GWL_WNDPROC,(long)MyEditProc); SetFocus(hURLBarWnd); HRESULT hr = CoCreateInstance(CLSID_WebView, 0, CLSCTX_ALL, IID_IWebView, (void**)&gWebView); if (FAILED(hr)) goto exit; gWebHost = new WinLauncherWebHost(); gWebHost->AddRef(); hr = gWebView->setFrameLoadDelegate(gWebHost); if (FAILED(hr)) goto exit; hr = gWebView->setHostWindow((OLE_HANDLE) hMainWnd); if (FAILED(hr)) goto exit; RECT clientRect; GetClientRect(hMainWnd, &clientRect); hr = gWebView->initWithFrame(clientRect, 0, 0); if (FAILED(hr)) goto exit; IWebFrame* frame; hr = gWebView->mainFrame(&frame); if (FAILED(hr)) goto exit; static BSTR defaultHTML = 0; if (!defaultHTML) defaultHTML = SysAllocString(TEXT("<p style=\"background-color: #00FF00\">Testing</p><img src=\"http://webkit.org/images/icon-gold.png\" alt=\"Face\"><div style=\"border: solid blue\" contenteditable=\"true\">div with blue border</div><ul><li>foo<li>bar<li>baz</ul>")); frame->loadHTMLString(defaultHTML, 0); frame->Release(); IWebViewPrivate* viewExt; hr = gWebView->QueryInterface(IID_IWebViewPrivate, (void**)&viewExt); if (FAILED(hr)) goto exit; hr = viewExt->viewWindow((OLE_HANDLE*) &gViewWindow); viewExt->Release(); if (FAILED(hr) || !gViewWindow) goto exit; resizeSubViews(); ShowWindow(gViewWindow, nCmdShow); UpdateWindow(gViewWindow); hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINLAUNCHER)); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } exit: delete gWebView; #ifdef _CRTDBG_MAP_ALLOC _CrtDumpMemoryLeaks(); #endif // Shut down COM. OleUninitialize(); return (int) msg.wParam; }