ControlEvent の概要
ControlEvent は、Win32 ベースのアプリケーションでの Microsoft Windows メッセージに似ています。 ただし、コールバック関数を作成して Windows メッセージを受信し、SendMessage 関数を使用して Windows メッセージを送信するのではなく、ユーザー インターフェイス (UI) インストーラーとコントロールによって ControlEvent が発行されます。 他のコントロールとインストーラーを指定して特定の ControlEvent をサブスクライブできます。それによって、サブスクライブしているコントロールの属性が変更されます。 作業コントロールをダイアログ ボックスに追加するために、UI の作成者は ControlEvent テーブルの ControlEvent の発行を指定し、EventMapping テーブルの ControlEvent にコントロールをサブスクライブします。
インストーラーは、EventMapping テーブルに一覧表示されたサブスクライブしているコントロールに次のイベントを発行します。 ProgressBar コントロールまたは Billboard コントロールは通常、SetProgress をサブスクライブし、残りは Text コントロールによってサブスクライブされます。
SelectionTree コントロールまたは DirectoryList コントロールで項目の選択が移動すると、コントロールによって次のイベントが発行されます。 サブスクライブしているコントロールは、同じダイアログ ボックスにあり、EventMapping テーブルに一覧表示されている必要があります。
SelectionDescription ControlEvent
次の ControlEvent は、ダイアログ ボックス上の PushButton コントロールまたは CheckBox コントロールを操作することで、ユーザーの判断で発行できます。 Checkbox コントロールは、AddLocal、AddSource、Remove、DoAction、SetProperty の各イベントのみを発行できます。 Windows Server 2003 以降に付属している Windows インストーラー バージョンでは、SelectionTree コントロールで DoAction、ControlEvent、SetProperty の ControlEvent を発行できます。 UI の作成者は、ControlEvent テーブルに ControlEvent を一覧表示する必要があります。 インストーラーの UI ハンドラーは、これらのイベントのサブスクライバーです。
CheckExistingTargetPath ControlEvent
ValidateProductID ControlEvent
PushButton コントロールは、同じダイアログ ボックスにあるサブスクライブしている SelectionTree コントロールまたは DirectoryList コントロールに次のイベントを発行できます。 PushButton コントロールは ControlEvent テーブルに一覧表示されている必要があり、サブスクライブしているコントロールは EventMapping テーブルに一覧表示されている必要があります。
DirectoryListOpen ControlEvent
コントロール イベントでは通常、UI を "フル UI" レベルで実行することが必要とされます。 ほとんどの ControlEvent は、"縮小 UI" または "基本 UI" では動作しません。これらのレベルではモードレス ダイアログ ボックスのみが表示されるためです。 ActionText、AddSource、SetProgress、TimeRemaining、ScriptInProgress の各イベントは例外であり、縮小 UI または基本 UI で動作します。 UI レベルの詳細については、「ユーザー インターフェイス レベル」を参照してください。
カスタム アクションを実行するには、PushButton コントロールまたは Checkbox コントロールから ControlEvent を発行します。 ControlEvent テーブルに、ダイアログ名と ControlEvent を発行するコントロールの名前を含むレコードを追加します。 このコントロールは、カスタム アクションを実行するようにインストーラーに通知する DoAction ControlEvent を発行する必要があります。 Windows XP またはそれ以前のシステムでは、SelectionTree コントロールから ControlEvent を発行してカスタム アクションを実行することはできません。
特定の ControlEvent の詳細については、「ユーザー インターフェイス リファレンス」の標準 ControlEvent の一覧を参照してください。