
cef 实现js 调用C++( cef EasyCKL)
发布日期:2021-05-10 14:03:00
浏览次数:17
分类:精选文章
本文共 5192 字,大约阅读时间需要 17 分钟。
cef EasyCKL:
// WindowsProject1.cpp : 定义应用程序的入口点。//#include "framework.h"#include "WindowsProject1.h"#include "Resource.h"#include "EasyCKL.h"#pragma comment(lib, "easyckl.lib")#include#include #include // 不能通过断点方式调试,采用日志方式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 100LRESULT 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;}
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月20日 00时03分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
创建一个简单的SpingBoot项目,并且部署到linux上运行
2021-05-10
mysql8.0及以上在my.cnf设置sql_mode之后mysql无法启动
2021-05-10
C语言编译错误列表
2021-05-10
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2021-05-10
6大亮点抢先看!Facebook加密货币项目Libra白皮书解读
2021-05-10
数字印钞界迎来重磅精英机构,普通人还有翻身机会吗? | 加密货币与阶层穿越...
2021-05-10
张一鸣:创业7年,我经历的5件事
2021-05-10
SQL基础语法
2021-05-10
Python3 日期和时间
2021-05-10
JavaScript实现表格排序
2021-05-10
vue散碎知识点学习
2021-05-10
git拉取远程指定分支代码
2021-05-10
C语言--C语言总结大纲
2021-05-10
轻松理解前后端分离(通俗易懂)
2021-05-10
JavaFX官方文档
2021-05-10
ORA-12154: TNS: 无法解析指定的连接标识符
2021-05-10
In App Purchase Verification using PHP
2021-05-10
shell编程===》进程锁
2021-05-10
Split返回数组元素含有空字符串移除
2021-05-10