事件冻结
容器可以通过调用值为 TRUE 的 IOleControl::FreezeEvents 来通知控件无法响应事件。 可以通过调用值为 FALSE 的 FreezeEvents 来取消冻结事件。 当容器冻结事件时,它会冻结事件处理,而不是事件接收;也就是说,容器仍可接收冻结的事件。 如果容器在事件冻结时收到事件通知,应忽略该事件。 不能执行其他操作。
如果不错过事件对控件很重要,控件应注意容器对值为 TRUE 的 FreezeEvents 的调用。 当容器的事件处理被冻结时,控件应实现以下技术之一:
- 在完全知道容器不会采取任何操作的情况下触发事件。
- 放弃控件将触发的所有事件。
- 对所有挂起的事件排队,并在容器调用值为 FALSE 的 FreezeEvents 后触发这些事件。
- 仅对相关事件或重要事件排队,并在容器调用值为 FALSE 的 FreezeEvents 后触发这些事件。
每种技术都可以接受,视不同的情况而定。 控件开发人员负责确定和采用相应的技术来实现控件功能。