我对我正在开发的ActiveX控件有疑问。我已经解决了大多数问题,但我陷入了一个真正的障碍。这个ActiveX被归入其他软件,所以我必须有一个很好的Property Pages实现。我设法让一些持久性属性处理一个问题。当我在属性页面中进行更改时,只要正在使用它的开发应用程序的应用程序打开但是在我重新加载应用程序时它会恢复,它就会更新并持续存在。我已经缩小了这个事实,即开发应用程序没有意识到ActiveX已经改变,因此无法保存。如果我做了一个不相关的更改并保存程序一切都很好,值仍然按预期持续。我已经尝试了一切,似乎无法获得导入我的ActiveX的应用程序,以通过属性页面进行更改时实现。我想知道是否有人为这类问题做了一些工作。在我看来,如果我可以强制DoPropExchange()它会工作,但我不知道如何明确地调用它。
提前致谢 马特
感谢您的投入。我确实有SetModifiedFlag()但它没有工作。在戳了之后我解决了这个问题,但现在我正在重定向我的问题。我已经从idl文件dispinterface中删除了上述属性,以防止加载activex的应用程序在其连接列表"(特定于第三方应用程序")中显示该属性。看来该应用程序将所有接口加载到此列表中,但这并不好,因为某些属性应该是持久的,并且只能通过该支持进行修改。我尝试了所有标志,如隐藏和本地,但仍然显示在列表中。当我从调度接口中删除它时,我就是这样想的,但不会发出IsModified信号。我的新问题是另一种方法来定义像这样的实例的属性,或者是否可以有一个辅助接口(我没有测试应用程序是否会看到这个接口,因为我不知道如何定义这个接口)或仅在proppage和控件之间拥有属性。还是有另一种方式来发出信号。控件的OnMemberVariable正在执行我知道从测试它看起来似乎SetModifiedFlag()没有做任何事情,如果该属性不在dispinterface
再次感谢
答案 0 :(得分:0)
您需要将控件标记为"已修改",以便其主机可以检测到它并重新保存持久属性。在这种情况下,您的控件实现的IPersistXxx::IsDirty
将指示脏状态。
基于MFC的控件具有COleControl::SetModifiedFlag
用于此目的:
每当发生会影响您控件的持久状态的更改时,请调用此函数。例如,如果持久属性的值发生更改,请使用bModified TRUE调用此函数。
更新:要从属性浏览器隐藏属性,您可以使用nonbrowsable
属性。
使用[nonbrowsable]属性标记不应在属性浏览器中显示的接口或dispinterface成员。