控件有两种基本状态:活动状态和非活动状态。 传统上,这些状态通过控件是否具有窗口来区分。 活动控件有一个窗口;未使用非活动控件。 随着无窗口激活的引入,这种区别不再是通用的,但仍适用于许多控件。
与 ActiveX 控件通常执行的初始化的其余部分相比,创建窗口是极其昂贵的作。 理想情况下,控件会延迟创建其窗口,直到绝对必要。
许多控件不需要在容器中可见时保持活动状态。 通常,控件可以保持非活动状态,直到用户执行一个作,要求它变为活动状态(例如,单击鼠标或按 TAB 键)。 若要使控件在容器需要激活它之前保持非活动状态,请从控件的杂项标志中删除 OLEMISC_ACTIVATEWHENVISIBLE 标志:
static const DWORD BASED_CODE _dwNVC_MFC_AxOptOleMisc =
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;
如果在创建控件时关闭 MFC ActiveX 控件向导的“控件设置”页中的“激活时可见”选项,则会自动省略OLEMISC_ACTIVATEWHENVISIBLE标志。