/* * Copyright (C) 2010 Patrick Gansterer * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" #include "WebView.h" #include #include static const LPCWSTR kMainWindowTitle = L"WebKit for WinCE"; static const LPCWSTR kMainWindowClassName = L"MainWindowClass"; static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); CoInitializeEx(0, COINIT_MULTITHREADED); WebView::initialize(hInstance); LPCWSTR homeUrl = lpCmdLine; bool enableDoubleBuffer = true; bool fullscreen = false; if (homeUrl[0] == '-') { for (; *homeUrl && *homeUrl != ' '; ++homeUrl) { switch (*homeUrl) { case 'd': enableDoubleBuffer = false; break; case 'f': fullscreen = true; break; default: break; } } if (*homeUrl) ++homeUrl; } DWORD styles = WS_VISIBLE; if (!fullscreen) { styles |= WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME; } WNDCLASSW wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = 0; wc.hCursor = 0; wc.hbrBackground = static_cast(GetStockObject(WHITE_BRUSH)); wc.lpszMenuName = 0; wc.lpszClassName = kMainWindowClassName; RegisterClass(&wc); HWND hMainWindow = CreateWindowW(kMainWindowClassName, kMainWindowTitle, styles, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInstance, 0); if (fullscreen) { SetWindowPos(hMainWindow, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW); } ShowWindow(hMainWindow, nCmdShow); UpdateWindow(hMainWindow); WTF::OwnPtr webView = WTF::adoptPtr(new WebView(hMainWindow, enableDoubleBuffer ? WebView::EnableDoubleBuffering : WebView::NoFeature)); webView->load(homeUrl); // Main message loop: MSG msg; BOOL bRet; while (bRet = GetMessage(&msg, 0, 0, 0)) { if (bRet == -1) { // FIXME: Handle the error and possibly exit. } else { TranslateMessage(&msg); DispatchMessage(&msg); } } webView.clear(); DestroyWindow(hMainWindow); WebView::cleanup(); CoUninitialize(); return msg.wParam; }