cef EasyCKL:https://gitee.com/daemon_process/EasyCKL
// WindowsProject1.cpp : 定义应用程序的入口点。
//
#include "framework.h"
#include "WindowsProject1.h"
#include "Resource.h"
#include "EasyCKL.h"
#pragma comment(lib, "easyckl.lib")
#include <iostream>
#include <io.h>
#include <atlimage.h>
// 不能通过断点方式调试,采用日志方式
void WriteLog(TCHAR * szLog_)
{
SYSTEMTIME st;
GetLocalTime(&st);
FILE *fp;
_tfopen_s(&fp, _T("c:\\log.txt"), _T("at"));
_ftprintf_s(fp, _T("%d:%d:%d:%d,"), st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
_ftprintf_s(fp, szLog_);
_ftprintf_s(fp, _T("\n"));
fclose(fp);
OutputDebugString(szLog_);
}
void WriteLog(const TCHAR * szLog_)
{
SYSTEMTIME st;
GetLocalTime(&st);
FILE *fp;
_tfopen_s(&fp, _T("c:\\log.txt"), _T("at"));
_ftprintf_s(fp, _T("%d:%d:%d:%d,"), st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
_ftprintf_s(fp, szLog_);
_ftprintf_s(fp, _T("\n"));
fclose(fp);
OutputDebugString(szLog_);
}
#define MAX_LOADSTRING 100
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
static TCHAR szWindowClass[MAX_LOADSTRING] =_T("标题") ;
HWND hWnd;
void* browser;
//void WINAPI CallBack_ChTitle(LONG_PTR dwId, const wchar_t* szTitle) {
// SetWindowTextW(hWnd, szTitle);
//}
/* 回调函数的定义 */
void WINAPI CallBack_BrowserCreated(LONG_PTR id, void* browser)
{
}
void WINAPI CallBack_Error(LONG_PTR id, UINT_PTR uMsg, LPERROR_INFOMATION info, UINT_PTR not_used)
{
}
void WINAPI CallBack_ChUrl(LONG_PTR id, const wchar_t* url)
{
}
void WINAPI CallBack_Download(LONG_PTR id, const wchar_t* url)
{
}
BOOL WINAPI CallBack_NewWindow(LONG_PTR id, UINT_PTR uMsg, LPNEW_WINDOW_INFOMATION info, UINT_PTR not_used)
{ return false; }
BOOL WINAPI CallBack_ChState(LONG_PTR id, BOOL isLoading, BOOL canGoBack, BOOL canGoForward)
{ return false; }
void WINAPI CallBack_JSDialog(LONG_PTR id, const wchar_t* msg)
{}
void WINAPI CallBack_RButtonDown(LONG_PTR id, UINT_PTR uMsg, LPRBUTTON_DOWN_INFOMATION info, UINT_PTR not_used)
{}
void WINAPI CallBack_ChTitle(LONG_PTR id, const wchar_t* text)
{
SetWindowTextW(hWnd, text);
}
bool WINAPI CallBack_CanLoadUrl(LONG_PTR id, const wchar_t* url)
{ return false; }
bool WINAPI CallBack_CanClose(LONG_PTR id, UINT_PTR uMsg, void* not_used, UINT_PTR not_used_)
{ return false; }
BOOL WINAPI V8Handler_Call(const wchar_t* name, const void* argu, void* retval)
{
WriteLog(_T("V8Handler_Call"));
WriteLog(name);
return false;
}
void WINAPI CallBack_V8(void *context)
{
WriteLog(_T("CallBack_V8"));
wchar_t _szName[255] = _T("js_call_soft");
Chrome_AddJSFunction(context, _szName);
}
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
Chrome_SetV8ContextCallback(CallBack_V8, V8Handler_Call);
WCHAR szlocal[MAX_LOADSTRING] = _T("zh-CN");
Chrome_InitializeEx(hInstance, INITFLAG_CACHESTORAGE | INITFLAG_ENABLEHIGHDPISUPPORT, 0, szlocal, 0);
Chrome_EnableCookieStorage();
if (!Chrome_IsUIThread()) return 0;
WNDCLASSEXW wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT1));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = 0;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
RegisterClassEx(&wcex);
hWnd = CreateWindow(szWindowClass, _T("ECKL web控件测试"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, 700, 480, NULL, NULL, hInstance, NULL);
if (!hWnd)
return FALSE;
BROWSER_CALLBACKS BrowserCallbacks = { 0 };
BrowserCallbacks.cbSize = sizeof(BROWSER_CALLBACKS);
//BrowserCallbacks.chtitle_callback = CallBack_ChTitle;
//BrowserCallbacks.created_callback= CallBack_BrowserCreated;
//BrowserCallbacks.churl_callback = CallBack_ChUrl;
//BrowserCallbacks.newwindow_callback = CallBack_NewWindow;
//BrowserCallbacks.download_callback = CallBack_Download;
//BrowserCallbacks.chstate_callback = CallBack_ChState;
//BrowserCallbacks.jsdialog_callback = CallBack_JSDialog;
//BrowserCallbacks.error_callback = CallBack_Error;
//BrowserCallbacks.rbuttondown_callback = CallBack_RButtonDown;
BrowserCallbacks.chtitle_callback = CallBack_ChTitle;
//BrowserCallbacks.canloadurl_callback = CallBack_CanLoadUrl;
//BrowserCallbacks.canclose_callback = CallBack_CanClose;
RECT rcWindowClient, rcWebControl;
GetClientRect(hWnd, &rcWindowClient); //得到窗口的客户区矩形
rcWebControl.top = rcWebControl.left = 0;
rcWebControl.bottom = rcWindowClient.bottom;
rcWebControl.right = rcWindowClient.right;
WCHAR szURL[MAX_LOADSTRING] = _T("http://换成你能调用的网站.cn");//换成你能调用的网站
browser = Chrome_CreateChildBrowser(BROWSERFLAG_SYNC, &BrowserCallbacks, 0, 0, szURL, hWnd, &rcWebControl, 0);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
Chrome_MessageLoop();
Chrome_Shutdown();
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_SIZE:
MoveWindow(Chrome_GetWindowHandle(browser), 0, 0, LOWORD(lParam), HIWORD(lParam), FALSE);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}