1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | /** * libcef test application. * @author Hoverlees me[at]hoverlees.com */ #include <iostream> #include <Windows.h> #include "HoverWindow.h" #include <include/cef_browser.h> #include <include/cef_app.h> #include <include/cef_client.h> class MyChromeClient: public CefClient{ private : int refCount; public : MyChromeClient(){ refCount=1; } virtual int AddRef(){ refCount++; return refCount; } virtual int Release(){ refCount--; return refCount; } virtual int GetRefCt(){ return refCount; } }; class MyChromeApplication: public CefApp{ private : int refCount; public : MyChromeApplication(){ refCount=1; } virtual int AddRef(){ refCount++; return refCount; } virtual int Release(){ refCount--; return refCount; } virtual int GetRefCt(){ return refCount; } }; class ChromeWindow: public HoverWindow{ private : CefWindowInfo windowInfo; MyChromeClient client; CefRefPtr<CefBrowser> browser; public : ChromeWindow( HINSTANCE hInstance, const char * className, const char * title, int x, int y, int w, int h, DWORD exStyle=NULL, DWORD windowStyle=WS_OVERLAPPEDWINDOW); virtual bool onWindowMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); }; ChromeWindow::ChromeWindow( HINSTANCE hInstance, const char * className, const char * title, int x, int y, int w, int h, DWORD exStyle, DWORD windowStyle) :HoverWindow(hInstance,className,title,x,y,w,h,exStyle,windowStyle){ } bool ChromeWindow::onWindowMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ RECT rt; switch (uMsg){ case WM_CREATE: GetClientRect(hWnd,&rt); windowInfo.SetAsChild(hWnd,rt); this ->browser=CefBrowserHost::CreateBrowserSync(windowInfo,&client,CefString( "http://www.hoverlees.com" ),CefBrowserSettings()); CefRunMessageLoop(); break ; case WM_SIZE: GetClientRect(hWnd,&rt); SetWindowPos( this ->browser->GetHost()->GetWindowHandle(),0,rt.left,rt.top,rt.right,rt.bottom,0); break ; case WM_CLOSE: CefQuitMessageLoop(); PostQuitMessage(0); break ; default : return false ; } return true ; } int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ MyChromeApplication app; CefMainArgs main_args(hInst); CefSettings settings; settings.multi_threaded_message_loop = false ; int exit_code = CefExecuteProcess(main_args,&app); if (exit_code >= 0) return exit_code; CefInitialize(main_args,settings,&app); ChromeWindow* window= new ChromeWindow(hInst, "hover" , "Chrome Embedding - http://www.hoverlees.com" ,0,0,400,400); window->startMessageLoop(); CefShutdown(); return 0; } |