Launching a Form Server
The series of interactions that occurs when a form is loaded from persistant storage — that is, from a form library — to display a message is as follows:
-
The messaging client gets the message's message class, message flags and message status. This step is optional; if these pieces of data are not provided in step 2, the form manager will retrieve them.
-
The messaging client calls IMAPIFormMgr::LoadForm with the target message.
-
The form manager loads the form server from the appropriate form library. If the form server for the target message is not installed, the form manager installs the form's executable files as well.
-
The form manager calls IUnknown::QueryInterface on the form object to obtain the form object's IMAPIForm and IPersistMessage interfaces.
-
The form manager calls IPersistMessage::Load with the message site and message interfaces from the viewer object.
-
The form object calls back to the messaging client's IMAPIMessageSite::GetSiteStatus method.
-
The form manager calls the form object's IMAPIForm::SetViewContext with the view context interface from the messaging client.
-
The form object calls back to the messaging client's IMAPIViewContext::SetAdviseSink method.
-
The form object calls back to the messaging client's IMAPIViewContext::GetViewStatus method.
-
The messaging client calls the form object's IMAPIForm::Advise method with the view context interfaces from the viewer object and the message site object.
-
The messaging client calls the form object's IMAPIForm::DoVerb method.
-
The form object creates its user interface, if necessary, and interacts with the user.