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

 

上一篇:C++ POST请求调用百度AI OCR
下一篇:cef C++ 与js交互

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月20日 00时03分59秒