|
本帖最后由 荒原上的打柴人 于 2013-8-17 15:09 编辑
一直不知道酷狗之类的东东是怎么做的,谷歌百度问大神 得之是浏览器控件、直接内嵌浏览器。
这就带来了一个问题 浏览器上的HTML代码怎么才能调用vc的函数呢?经过谷歌百度 得到两种方法,
现在介绍其中一种 ,另一种要实现IDISPACH接口 在炫彩里面得改源代码吧?各种不懂
下面上代码:
- <!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]">
- <html xmlns="[url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>无标题文档</title>
- </head>
- <script language="javascript">
- function Test(params1){
- var url="#app:command&arg1="+params1+"&argc2=222";
- <!--这里简单说明一下:#开头是因为#在网址里面代表终止符,不然会刷新一次,引起执行两次的效果-->
- <!--app:是识别符号 可以任意更改 用在VC里面识别的 后面command代表函数名 argc1 argc2代表参数1 参数2-->
- window.navigate(url);
- }
- </script>
- <body>
- <span id="test1">调用c++测试</span>
- </body>
- </html>
复制代码
- //IE控件测试
- HXCGUI hWeb=NULL;
- BOOL CALLBACK OnButtonClick_OpenURL(HELE hEle,HELE hEventEle)
- {
- XWeb_OpenURL(hWeb,L"C:\\test.html"); //打开本地文件
- return false;
- }
- BOOL CALLBACK OnButtonClick_Destroy(HELE hEle,HELE hEventEle)
- {
- XWeb_Destroy(hWeb); //销毁浏览器控件
- return false;
- }
- //执行js脚本函数
- BOOL CALLBACK OnButtonClick_ExeScript(HELE hEle,HELE hEventEle)
- {
- wchar_t params1[10]=L"a";
- wchar_t params2[10]=L"b";
- wchar_t params3[10]=L"c";
- wchar_t *params[3];
- params[0]=params1;
- params[1]=params2;
- params[2]=params3;
- XWeb_ExeJavascript(hWeb,L"exeTest",params,3);
- return false;
- }
- //导航
- 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)
- {
- //响应JS函数调用 先判断是否以#app开头 然后根据 command argc1 argc2 进行调用
- return true;
- }
- //JS外部函数,JS调用C/C++函数
- BOOL CALLBACK OnIE_External1(HXCGUI hWebBrowser,HSTRING hResultVal,wchar_t *pParam1)
- {
- wchar_t *result=XStr_GetBuffer(hResultVal);
- XStr_SetString(hResultVal,L"568"); //设置返回值
- return true;
- }
- //JS外部函数,JS调用C/C++函数
- BOOL CALLBACK OnIE_External2(HXCGUI hWebBrowser,HSTRING hResultVal,wchar_t *pParam1,wchar_t *pParam2)
- {
- wchar_t *result=XStr_GetBuffer(hResultVal);
- XStr_SetString(hResultVal,L"777"); //设置返回值
- return true;
- }
- int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
- {
- XInitXCGUI(); //初始化界面库
- HWINDOW hWindow=XWnd_CreateWindow(0,0,420,310,L"炫彩界面库-IE控件测试");
- HELE hButtonOpenURL=XBtn_Create(320,10,70,22,L"打开HTML",hWindow);
- HELE hButtonDestroy=XBtn_Create(320,50,70,22,L"销毁",hWindow);
- HELE hExeScript=XBtn_Create(320,90,70,22,L"执行js函数",hWindow);
- hWeb=XWeb_Create(hWindow,10,10,300,230); //浏览器控件
- XWeb_RegEvent(hWeb,IE_BEFORENAVIGATE2,OnBeforeNavigate2_My); //注册导航事件
- XWeb_RegExternalFunction1(hWeb,L"Test",OnIE_External1); //注册外部函数
- XWeb_RegExternalFunction2(hWeb,L"Test2",OnIE_External2); //注册外部函数
- XEle_RegisterEvent(hButtonOpenURL,XE_BNCLICK,OnButtonClick_OpenURL);
- XEle_RegisterEvent(hButtonDestroy,XE_BNCLICK,OnButtonClick_Destroy);
- XEle_RegisterEvent(hExeScript,XE_BNCLICK,OnButtonClick_ExeScript);
- XWnd_ShowWindow(hWindow,SW_SHOW); //显示窗口
- XRunXCGUI(); //运行
- return 0;
- }
复制代码
|
|