liaojunhua 发表于 2014-5-23 14:26:00

基于WTL 下无法创建 书签的问题与Style创建后无法使用的问题描述。希望相关技术人员能够重现一下。

我们公司使用的是自己基于WTL的轻量化的开发平台。

也就是说使用 ActiveX需要使用 CAxWindow类激活控件,同事创建COM对象。

_window.reset(new CAtlControlProxyImpl<CAxWindow>(parent));
_window->createWidget();
       
       
LPOLESTR str = new WCHAR;

ProgIDFromCLSID(__uuidof(BW_TEXT:: TXTextControl), &amp;str);
CString strID(str);
HRESULT hrs = _window->CreateControl(strID);
_window->QueryControl(__uuidof(BW_TEXT::_DTX4OLE), (void**)(&amp;_FileClass));
window->setVisible(true);

进行如上操作后创建控件成功。
        try
        {
                _FileClass->Load(GetBSTR(_strfile), 0, 13, TRUE);
        }
        catch (...)
        {
                               RasiErro("文件已经打开,或者文件不存在。");
        }

打开文件后。

BW_TEXT::IStylesPtr pStyles = _FileClass->GetStyles();
BW_TEXT::IStylePtr pStyle= _pStyles->Item("");//创建于 默认 的样式下。返回一个有效的Styles
但是这时使用 pStyle->PutFontName("宋体");后调用Apply。会引起崩溃。而且Style无法保存在样式对话框下。

关于设置 标签。使用VB是能够创建书签,同时在word中显示含有此书签的。

        _FileClass->PutSelText("nononono");//输入选择的字符集
        _FileClass->FieldInsert("------");//添加书签。
         //这个时候添加取出的FieldData 是存在的,但是无法知道是以什么形式存储的。故个人觉得原因是 fieldData的数据导致无法保存。因为C++下使用OLE链接不同于Vb与C#;

但是在调用Save后无法保存,同样使用的*.docx的文件类型

iceman 发表于 2014-5-26 12:07:00

回复 1楼liaojunhua的帖子

liaojunhua 您好,

很抱歉,由于我们没有 WTL 相应测试环境,所以无法重现您当前提出的问题。
TX for ActiveX 控件并没有在 WTL 平台进行过严格测试,我们需要咨询厂商控件是否支持该平台。

目前只能给出一些建议供您参考,新建测试工程抛开其他环境影响,仅测试 Style.Apply。保存问题如果不从数据库中取值填充,直接输入文本是否可以正常保存?

另外有一个疑问:FieldData 问题如果连接到了 OLE 数据库是不是就可以确定其数据类型了呢?或者“存储形式”具体指的是什么?

liaojunhua 发表于 2014-6-11 16:42:00

该问题已经通过其他方式处理。但是书签导出还是无法处理。目前使用MFC创建控件是可以使用书签导出的。VB例子也行。但是我们仍没有找到如何导出书签。
1. 如果直接输入文本是可以正常保存的。Style是通过其他方式处理的。
2.FieldData应该是以二进制 存储的,目前无法对其进行解析而已。目前书签相关的问题已经通过其他方式解决。

iceman 发表于 2014-6-11 18:11:00

回复 3楼liaojunhua的帖子

好的,感谢您反馈问题结果。
目前还有什么问题没有解决吗?
页: [1]
查看完整版本: 基于WTL 下无法创建 书签的问题与Style创建后无法使用的问题描述。希望相关技术人员能够重现一下。