private void CheckUpdateElementText(TaskDialogUpdateElements updateFlags, TaskDialogUpdateElements flagToCheck, TaskDialogElements element, string text) { if ((updateFlags & flagToCheck) == flagToCheck) { IntPtr strPtr = Marshal.StringToHGlobalUni(text); try { // Note: SetElementText will resize the dialog while UpdateElementText will not (which would // lead to clipped controls), so we use the former. SendTaskDialogMessage(TaskDialogMessages.SetElementText, (int)element, strPtr); } finally { // We can now free the memory because SendMessage does not return until the // message has been processed. Marshal.FreeHGlobal(strPtr); } } }
private void CheckUpdateIcon(TaskDialogUpdateElements updateFlags, TaskDialogUpdateElements flagToCheck, TaskDialogIconElement element, IntPtr icon) { if ((updateFlags & flagToCheck) == flagToCheck) { SendTaskDialogMessage(TaskDialogMessages.UpdateIcon, (int)element, icon); } }
/// <summary> /// Updates the specified dialog elements with the values from the current properties. /// Note that when updating the main icon, the bar color will not change. /// </summary> /// <param name="updateFlags"></param> public void UpdateElements(TaskDialogUpdateElements updateFlags) { CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.Content, TaskDialogElements.Content, Content); CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.ExpandedInformation, TaskDialogElements.ExpandedInformation, ExpandedInformation); CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.Footer, TaskDialogElements.Footer, Footer); CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.MainInstruction, TaskDialogElements.MainInstruction, MainInstruction); CheckUpdateIcon(updateFlags, TaskDialogUpdateElements.MainIcon, TaskDialogIconElement.Main, (IntPtr)MainIcon); CheckUpdateIcon(updateFlags, TaskDialogUpdateElements.FooterIcon, TaskDialogIconElement.Footer, (IntPtr)FooterIcon); }