炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2360|回复: 0

浏览器控件JS调用C++函数之一

[复制链接]

该用户从未签到

发表于 2013-8-17 14:55:20 | 显示全部楼层 |阅读模式
本帖最后由 荒原上的打柴人 于 2013-8-17 15:09 编辑

一直不知道酷狗之类的东东是怎么做的,谷歌百度问大神 得之是浏览器控件、直接内嵌浏览器。
这就带来了一个问题   浏览器上的HTML代码怎么才能调用vc的函数呢?经过谷歌百度 得到两种方法,
现在介绍其中一种 ,另一种要实现IDISPACH接口  在炫彩里面得改源代码吧?各种不懂

下面上代码:



  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url=http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
  2. <html xmlns="[url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  5. <title>无标题文档</title>
  6. </head>
  7. <script language="javascript">
  8. function Test(params1){
  9. var url="#app:command&arg1="+params1+"&argc2=222";
  10. <!--这里简单说明一下:#开头是因为#在网址里面代表终止符,不然会刷新一次,引起执行两次的效果-->
  11. <!--app:是识别符号 可以任意更改 用在VC里面识别的 后面command代表函数名 argc1 argc2代表参数1 参数2-->
  12. window.navigate(url);
  13. }
  14. </script>
  15. <body>
  16. <span id="test1">调用c++测试</span>
  17. </body>
  18. </html>
复制代码

  1. //IE控件测试
  2. HXCGUI hWeb=NULL;
  3. BOOL CALLBACK OnButtonClick_OpenURL(HELE hEle,HELE hEventEle)
  4. {
  5.     XWeb_OpenURL(hWeb,L"C:\\test.html"); //打开本地文件
  6.     return false;
  7. }
  8. BOOL CALLBACK OnButtonClick_Destroy(HELE hEle,HELE hEventEle)
  9. {
  10.     XWeb_Destroy(hWeb); //销毁浏览器控件
  11.     return false;
  12. }
  13. //执行js脚本函数
  14. BOOL CALLBACK OnButtonClick_ExeScript(HELE hEle,HELE hEventEle)
  15. {
  16.     wchar_t  params1[10]=L"a";
  17.     wchar_t  params2[10]=L"b";
  18.     wchar_t  params3[10]=L"c";
  19.     wchar_t  *params[3];
  20.     params[0]=params1;
  21.     params[1]=params2;
  22.     params[2]=params3;
  23.     XWeb_ExeJavascript(hWeb,L"exeTest",params,3);
  24.     return false;
  25. }
  26. //导航
  27. BOOL CALLBACK OnBeforeNavigate2_My(HXCGUI hWebBrowser,IDispatch *pDisp,wchar_t *pUrl,int Flags,wchar_t *TargetFrameName,wchar_t *PostData,wchar_t *Headers,VARIANT_BOOL *bCancel)
  28. {
  29. //响应JS函数调用 先判断是否以#app开头 然后根据 command argc1 argc2 进行调用   
  30. return true;
  31. }
  32. //JS外部函数,JS调用C/C++函数
  33. BOOL CALLBACK OnIE_External1(HXCGUI hWebBrowser,HSTRING hResultVal,wchar_t *pParam1)
  34. {
  35.     wchar_t *result=XStr_GetBuffer(hResultVal);
  36.     XStr_SetString(hResultVal,L"568"); //设置返回值
  37.     return true;
  38. }
  39. //JS外部函数,JS调用C/C++函数
  40. BOOL CALLBACK OnIE_External2(HXCGUI hWebBrowser,HSTRING hResultVal,wchar_t *pParam1,wchar_t *pParam2)
  41. {
  42.     wchar_t *result=XStr_GetBuffer(hResultVal);
  43.     XStr_SetString(hResultVal,L"777"); //设置返回值
  44.     return true;
  45. }

  46. int APIENTRY _tWinMain(HINSTANCE hInstance,  HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  47. {
  48.     XInitXCGUI(); //初始化界面库
  49.     HWINDOW hWindow=XWnd_CreateWindow(0,0,420,310,L"炫彩界面库-IE控件测试");
  50.     HELE hButtonOpenURL=XBtn_Create(320,10,70,22,L"打开HTML",hWindow);
  51.     HELE hButtonDestroy=XBtn_Create(320,50,70,22,L"销毁",hWindow);
  52.     HELE hExeScript=XBtn_Create(320,90,70,22,L"执行js函数",hWindow);
  53.     hWeb=XWeb_Create(hWindow,10,10,300,230); //浏览器控件
  54.     XWeb_RegEvent(hWeb,IE_BEFORENAVIGATE2,OnBeforeNavigate2_My); //注册导航事件
  55.     XWeb_RegExternalFunction1(hWeb,L"Test",OnIE_External1); //注册外部函数
  56.     XWeb_RegExternalFunction2(hWeb,L"Test2",OnIE_External2); //注册外部函数
  57.     XEle_RegisterEvent(hButtonOpenURL,XE_BNCLICK,OnButtonClick_OpenURL);
  58.     XEle_RegisterEvent(hButtonDestroy,XE_BNCLICK,OnButtonClick_Destroy);
  59.     XEle_RegisterEvent(hExeScript,XE_BNCLICK,OnButtonClick_ExeScript);
  60.     XWnd_ShowWindow(hWindow,SW_SHOW); //显示窗口
  61.     XRunXCGUI(); //运行
  62.     return 0;
  63. }

复制代码


您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-5-5 23:19 , Processed in 0.063710 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表