QT GUI界面中集成VISIO绘图区详细说明

1.背景

项目需要在界面中集成VISIO的工作区,就开始研究这个问题,本以为是一个非常简单的问题,找到工作区窗口,调用SetParent接口就好了。但是实际操作中发现这个思路是行不通的。

这种方法,在WIN7操作系统中,32为VISIO可以集成,正常操作也没有问题。但是在其他配置的情况下就不行了,比如WIN10。

用QT的QWidget的接口函数也是同样的情况。

昨天,偶然间在微软官网发现VISIO的工作区实际是一个ActiveX控件,那就简单了。需要Qt中的axcontainer模块就能搞定。

2.过程

首先用Creator新建一个GUI的工程。

修改pro文件,添加

QT += axcontainer,引入这个模块。

在UI文件中添加一个QAxWidget控件。

在控件中右键点击,选择【设置控件】会出现如下界面

在这个界面中能找到 VISIO绘图控件。

再在这个控件中添加槽函数,右键单击控件,选择【转到槽】。就出现下面的界面。Creator会自动生成槽函数的。

 3、控件的接口函数调用方法。

这个是我想说的最重要的部分,照我的理解大致是有三种方法。

第一种方法,也是QT帮助文件中的方法。

QAxWidget::dynamicCall("SetSrc (QString Src)",params)//接口函数调用
QAxWidget::setProperty("Src",params)//设置属性的值
QAxWidget::property("Src")//得到属性的值

这种方法对于一些不支持的数据类型是不支持的。也就是可能某一些方法会调用失败。

第二种方法,也是QT帮助中的办法,利用bumpcpp生成.h和.cpp文件。直接在工程中引用。但是我在试验的时候发现,生成的类型是QAxObject,我理解应该是QAxWidget所以这种办法没有试成功。

第三种办法,应该是最理想的办法,但是过程稍微有点麻烦。

首先,用VS生成一个空的win32控制台程序,然后添加一个cpp文件,在文件中加上如下代码。

#import "C:\\visio\\Office14\\VISLIB.DLL"

#import "C:\\visio\\Office14\\VISOCX.DLL"

void main()
{

}

然后直接编译就可以了。

编译完成后,在debug文件夹中会出现如下4个文件

这4个文件中tlh实际是头文件,tli应该就是cpp文件。

把这4个文件加入到我们的工程中,我们就可以使用全部的接口了。

ui->axWidget->setControl("{E4615FA3-23B0-4976-BD3E-D611DDBE330E}");

VisOcx::IDrawingControl* drawing;

QUuid id = QUuid::fromString(QLatin1String("{9BF6FD73-F05B-406E-B938-09E2B413528E}"));

ui->axWidget->queryInterface(id,(void**)&drawing);//得到控件提供的接口

_bstr_t host = drawing->GetHostID();

drawing->put_Src(_bstr_t("d:\\draw.vsd"));

Visio::IVWindowPtr window = drawing->Window;

COLORREF color = RGB(255, 0, 0);

window->PutBackgroundColor((OLE_COLOR)color);

window->PutViewFit(2);

上面是我做的测试的代码。

connect(ui->axWidget, SIGNAL(DocumentChanged(Visio::IVDocument *)), this, SLOT(onDocumentChanged(Visio::IVDocument *)));

	QObject::connect(ui->axWidget, SIGNAL(MouseMove(int, int, double, double, bool &)), this, SLOT(onMouseMove(int, int, double, double, bool &)));

	connect(ui->axWidget, SIGNAL(ShapeAdded(struct Visio::IVShape *)), this, SLOT(onShapeAdded(struct Visio::IVShape *)));

这是连接槽函数的代码。

第一次调用ActiveX,第一次做QTGUI程序,成就感满满,希望对后来的诸位能有帮助,也希望我将来还能用到。

4、源码

链接:https://pan.baidu.com/s/1h0BfqxWNS44antOz0e4ujw?pwd=kkkk 
提取码:kkkk 
 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值