cef 实现js 调用C++( cef EasyCKL)

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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值