CDHtmlDialog是一个好的选择吗(cef3/qtwebengine/react native/electron)

举报
Amrf 发表于 2019/01/31 14:15:07 2019/01/31
【摘要】 CDHtmlDialog个人学习项目:https://github.com/Amrf000/CDHtmlDlgCDHtmlDialog总结:适用于运行于windows环境下的工具;比较适合于对旧的mfc工具进行轻量级的升级,因为使用ie内核,所以最终程序比其他方案要小;此外还可以利用原有的大部分其他c、c++代码;缺点运行环境比较特定,对用户本地ie有要求,如果用户ie版本不通会导致不同的显...

CDHtmlDialog总结:

  1. 适用于运行于windows环境下的工具;

  2. 比较适合于对旧的mfc工具进行轻量级的升级,

    因为使用ie内核,所以最终程序比其他方案要小;此外还可以利用原有的大部分其他c、c++代码;

  3. 缺点运行环境比较特定,对用户本地ie有要求,如果用户ie版本不同会导致不同的显示效果和其他兼容性问题;

问题记录:

 1.在CDHtmlDialog中使用mxGraph时发现,ie内核设置的ie11时,鼠标事件居然没反应,但是在ie中打开是正常的,对比了一下发现

msPointerEnabled,pointerEnabled 这两个值不同,

后来通过修改mxclient中的

IS_POINTER: false,//window.PointerEvent != null && !(navigator.appVersion.indexOf('Mac') > 0),

CDHtmlDialog中window.PointerEvent不为空但是msPointerEnabled和pointerEnabled却有问题,查了一些资料说是ie11废弃了pointerEnabled标识什么的,

直接设为false后,事件可以正常 响应了,不求甚解了;

2.由于需要加装本地文件,mxclient中相关修改如下:

image.png

mxXmlRequest.prototype.getStatus = function()

{

return 250;//this.request.status;

};

3.这段代码是对grapheditor添加stencils的测试修改:

this.addStencilPalette('ntest', 'ntest', dir + '/ntest.xml',

';whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=2');

4.navTrustedForActiveX是打开页面是允许activex控件:

    //Navigate(L"jgraph.github.io/mxgraph/javascript/examples/grapheditor/www/index.html", navNoReadFromCache | navTrustedForActiveX);//www.baidu.com   

Navigate(L"file://D:/dev/CDHtmlDlg-master/CDHtmlDlg-master/DHtml/2.html", navNoReadFromCache | navTrustedForActiveX);// 

5.还遇到个问题访问外部链接报代理无响应问题,后来发现被软件阻断了,可以通过修改工程输出名通过,

   后来基本都从本地加载这个问题就更不存在了;

6. 单独加载stencils的测试代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge"> 
<title>Hello, World! example for mxGraph</title>
<base href="file:
</head>
<body>
<div id="graphContainer"
style="position:relative;overflow:hidden;width:1910px;height:934px;background:url('./images/grid.gif');cursor:default;">
</div>
</body>
<!-- Sets the basepath for the library if not in same directory -->
<script type="text/javascript">
  mxBasePath = 'src';
</script>
<!-- Loads and initializes the library -->
<script type="text/javascript">
var urlParams = (function(url)
{
var result = new Object();
var idx = url.lastIndexOf('?');
if (idx > 0)
{
var params = url.substring(idx + 1).split('&');
for (var i = 0; i < params.length; i++)
{
idx = params[i].indexOf('=');
if (idx > 0)
{
result[params[i].substring(0, idx)] = params[i].substring(idx + 1);
}
}
}
return result;
})(window.location.href);
mxLoadResources = false;
</script>
<script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="./mxClient.js"></script>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <!-- 生产环境中不建议使用 -->
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
<!-- Example code -->
<script type="text/javascript">
$(document).ready(function() {
function main(container)
{
if (!mxClient.isBrowserSupported())
{
mxUtils.error('Browser is not supported!', 200, false);
}
else
{
mxEvent.disableContextMenu(container);
var req = mxUtils.load('stencils.xml');
    var root = req.getDocumentElement();
var shape = root.firstChild;
while (shape != null){
if (shape.nodeType == mxConstants.NODETYPE_ELEMENT){
mxStencilRegistry.addStencil(shape.getAttribute('name'), new mxStencil(shape));
}
shape = shape.nextSibling;
}
var graph1 = new mxGraph(container);
new mxRubberband(graph1);
var parent = graph1.getDefaultParent();
graph1.getModel().beginUpdate();
try
{
var v1 = graph1.insertVertex(parent, null, 'Hello,', 20, 20, 80, 30);
var v2 = graph1.insertVertex(parent, null, 'World!', 200, 150, 80, 30);
var v4 = graph1.insertVertex(parent, null, 'A1', 20, 20, 40, 80, 'and;flipH=1');
var v4 = graph1.insertVertex(parent, null, 'A1', 40, 80, 40, 80, 'shape=mxGraph.ntest.ArrowDown');
graph1.insertVertex(v2, null, 'c!', 70, 0, 10, 10);
var e1 = graph1.insertEdge(parent, null, '', v1, v2);
}
finally
{
graph1.getModel().endUpdate();
}
/*graph1.addMouseListener(
{
  mouseDown: function(sender, evt)
  {
    mxLog.debug('mouseDown');
  },
  mouseMove: function(sender, evt)
  {
    mxLog.debug('mouseMove');
  },
  mouseUp: function(sender, evt)
  {
    mxLog.debug('mouseUp');
  }
});*/
graph1.addListener(mxEvent.CLICK, function (sender, evt) {
     var cell = evt.getProperty("cell");
     if(cell!=null){
     var sty = graph1.getCellStyle(cell);
     if(sty.shape=='rectangle')
     {
     mxLog.debug(cell.id);
     graph1.model.setValue(cell, "abc");
     graph1.setCellStyles(mxConstants.STYLE_FILLCOLOR, "#ffffff", [cell]);
     }
     }
     /*var cell = graph1.getSelectionCell();
     if (cell != null) {
     console.log(cell.id);
     }*/
});
var enc = new mxCodec();
var str=enc.encode(graph1.getModel());
enc.encode(graph1.getModel().getCell(1));
}
};
main(document.getElementById('graphContainer'));
mxLog.show();
});
</script>
</html>

/*-------------------------------------对比cef3方案-----------------------------------------------------------------------*/

https://github.com/lmsp/SimpleCEFDLL

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。