事件冻结

容器可以通过调用值为 TRUEIOleControl::FreezeEvents 来通知控件无法响应事件。 可以通过调用值为 FALSEFreezeEvents 来取消冻结事件。 当容器冻结事件时,它会冻结事件处理,而不是事件接收;也就是说,容器仍可接收冻结的事件。 如果容器在事件冻结时收到事件通知,应忽略该事件。 不能执行其他操作。

如果不错过事件对控件很重要,控件应注意容器对值为 TRUEFreezeEvents 的调用。 当容器的事件处理被冻结时,控件应实现以下技术之一:

  • 在完全知道容器不会采取任何操作的情况下触发事件。
  • 放弃控件将触发的所有事件。
  • 对所有挂起的事件排队,并在容器调用值为 FALSEFreezeEvents 后触发这些事件。
  • 仅对相关事件或重要事件排队,并在容器调用值为 FALSEFreezeEvents 后触发这些事件。

每种技术都可以接受,视不同的情况而定。 控件开发人员负责确定和采用相应的技术来实现控件功能。