我正在使用以下代码来调用TaskDialog.
[DllImport("ComCtl32", CharSet = CharSet.Unicode, PreserveSig = false)]
internal static extern void TaskDialogIndirect(
[In] ref TASKDIALOGCONFIG pTaskConfig,
[Out] out int pnButton,
[Out] out int pnRadioButton,
[Out] out bool pfVerificationFlagChecked);
Run Code Online (Sandbox Code Playgroud)
但是,我得到异常"无法在DLL'ComCtl32'中找到名为'TaskDialogIndirect'的入口点."
我拿了这个代码.我使用的是Windows 7 x64(RC).
我究竟做错了什么?
我正在使用WindowsAPICodePack for TaskDialog.当我尝试显示对话框时,它说它需要加载comctl32.dll的版本6.所以我在app.manifest中添加了第6版并尝试运行它.仍然没有运气.我去了Debug文件夹并运行没有Visual Studio的程序,它工作正常.我猜测Visual Studio没有使用清单文件......我想知道是否有办法让它做到这一点.
Windows7中的TaskDialog顶部有一个蓝色的主要指令文本.有没有办法在WPF中将该颜色作为画笔值?
我正在开发现代WPF应用程序。我想使用TaskDialog,但总是会遇到常见错误:
TaskDialog功能需要加载comctl32.dll的版本6,但是当前正在内存中加载了其他版本。
我试图添加一个清单(已经包含正确的comctl32.dll所需的依赖项),并将其设置为项目属性中的默认清单。
它仍然抛出此异常:-/
我的应用程序是这样构建的:它是一个启动应用程序(正常的Windows应用程序,非wpf)。它仅具有“ Program.cs”,这是入口点。它在那里动态地加载实际的应用程序(它是一个库,而不是WPF应用程序项目)。它调用启动方法来启动应用程序。
效果很好,但是我总是会遇到这个异常。我猜这是因为有这个启动系统...但是解决该问题的可能解决方法是什么?
非常感谢 :)
[R
有没有办法让 TaskDialog 始终位于顶部(即系统模式)?
我检查了 TaskDialogConfig 结构(http://msdn.microsoft.com/en-us/library/bb787473(VS.85).aspx),但我没有任何运气。
任何人都知道如何做到这一点或是否可能?
我注意到我的任务对话框中有一个大的垂直空间(命令链接标题和指令文本之间的空间)看起来非常糟糕.它在我将WindowsAPICodePack升级到1.1版之后就开始出现了.
这是代码:
TaskDialog td = new TaskDialog();
var b1 = new TaskDialogCommandLink("b1", "foo", "bar");
var b2 = new TaskDialogCommandLink("b2", "one", "two");
td.Controls.Add(b1);
td.Controls.Add(b2);
td.Caption = "Caption";
td.InstructionText = "InstructionText";
td.Text = "Text";
td.Show();
Run Code Online (Sandbox Code Playgroud)
这是结果:
之前,"bar"会出现在"foo"的正下方,但现在看起来好像两者之间有一条空行.这是我的问题(并且有人会知道它可能是什么)或者你们也经历过这个问题吗?
编辑:
我修复了Code Pack的源代码并上传了更新的NuGet包:
https://www.nuget.org/packages/WindowsAPICodePack-Shell/
感谢dmex修复错误:http: //archive.msdn.microsoft.com/WindowsAPICodePack/WorkItem/View.aspx?WorkingItemId = 108
如您所见,问题已修复,无需使用繁琐的Opened
事件语法:
指定图标时,对话框高度不正确; 最后一个命令链接不完全可见:
您对如何解决此问题有所了解吗?
用于显示此对话框的代码:
var dialog = new TaskDialog
{
Caption = Title,
InstructionText = "Some files added are already in the collection.",
Text = "They have been skipped."
};
dialog.Opened += (s1, e1) => { dialog.Icon = TaskDialogStandardIcon.Warning; };
var linkContinue = new TaskDialogCommandLink("Continue", "Continue", string.Empty);
linkContinue.Click += (s2, e2) =>
{
var s = (TaskDialogCommandLink)s2;
var taskDialog = (TaskDialog)(s.HostingDialog);
taskDialog.Close();
};
dialog.Controls.Add(linkContinue); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 TaskDialog 消息框中显示安全成功图标(蓝色背景)。这不是 TaskDialogStandardIcon 的枚举值之一。参考:http : //dotnet.dzone.com/articles/using-new-taskdialog-winapi。
如何将这些非标准值分配给 ((TaskDialog)sender).Icon ?在 C# 中甚至可能吗?C#
任何指针都会非常有帮助。
问候, 阿什温
在我维护的软件中,我计划根据 Microsoft UI 指导方针的建议替换旧MessageBox
的TaskDialog
。
我需要解决的主要问题如下:
MessageBox(... ,MB_OK)
可以通过按 Esc 键取消通过(因此仅包含一个 OK 按钮)调用的旧消息框。
但是TaskDialog
只包含 OK 按钮的 a 不能通过按 Esc 键解除。这可能会对用户体验产生负面影响。
我尝试TaskDialogIndirect
使用该pfCallback
字段,但如果任务对话框中没有取消按钮,则回调函数甚至不会被调用。
有什么想法可以做什么使 Esc 关闭这样的任务对话框?
CTaskDialog
我正在研究这个:
代码如下:
CTaskDialog dlg(_T("How would you like to download the data?"),
_T("Download Schedule Information"),
_T("Meeting Schedule Assistant"), TDCBF_OK_BUTTON | TDCBF_CANCEL_BUTTON);
dlg.SetMainIcon(TD_INFORMATION_ICON);
dlg.SetFooterIcon(TD_INFORMATION_ICON);
dlg.SetFooterText(_T("All assignments for the selected weeks will be reset."));
dlg.AddRadioButton(44444, _T("Download data for all weeks"));
dlg.AddRadioButton(44445, _T("Download data for selected week"));
dlg.AddRadioButton(44446, _T("Download data for selected week and all additional weeks"));
// Set Width in dialog units (40% screen width)
int iPixelWidth = (::GetSystemMetrics(SM_CXSCREEN) / 100) * 40;
int iDialogUnitsWidth = MulDiv(iPixelWidth, 4, LOWORD(GetDialogBaseUnits()));
dlg.SetDialogWidth(iDialogUnitsWidth);
if(dlg.DoModal() == …
Run Code Online (Sandbox Code Playgroud) taskdialog ×10
c# ×5
visual-c++ ×2
winapi ×2
wpf ×2
.net ×1
colors ×1
comctl32 ×1
mfc ×1
modal-dialog ×1
pinvoke ×1
windows-7 ×1