c# - 在 C# 中使用 TaskDialogIndirect

标签 c# .net windows winapi interop

我已经使用常规 Windows Vista/7 TaskDialog 工作了一段时间,我想添加一些额外的功能(如自定义按钮和页脚),所以我需要使用 TaskDialogIndirect .

按照 TaskDialogIndirect 的 MSDN 文档,我得到了这个签名:

[DllImport("comctl32.dll",CharSet = CharSet.Unicode,EntryPoint="TaskDialogIndirect")]
static extern int TaskDialogIndirect (TASKDIALOGCONFIG pTaskConfig, out int pnButton, out int pnRadioButton, out bool pfVerificationFlagChecked);

TASKDIALOGCONFIG类如下所示:

public class TASKDIALOGCONFIG
{
    public UInt16 cbSize;
    public IntPtr hwndParent;
    public IntPtr hInstance;
    public String dwFlags;
    public String dwCommonButtons;
    public IntPtr hMainIcon;
    public String pszMainIcon;
    public String pszMainInstruction;
    public String pszContent;
    public UInt16 cButtons;
    public TASKDIALOG_BUTTON pButtons;
    public int nDefaultButton;
    public UInt16 cRadioButtons;
    public TASKDIALOG_BUTTON pRadioButtons;
    public int nDefaultRadioButton;
    public String pszVerificationText;
    public String pszExpandedInformation;
    public String pszExpandedControlText;
    public String pszCollapsedControlText;
    public IntPtr hFooterIcon;
    public IntPtr pszFooterText;
    public String pszFooter;
    // pfCallback;
    // lpCallbackData;
    public UInt16 cxWidth;
}

TASKDIALOG_BUTTON 实现:

public class TASKDIALOG_BUTTON
{
    public int nButtonID;
    public String pszButtonText;
}

我不完全确定我在这里是否走在正确的轨道上。是否有人直接通过 WinAPI(没有 VistaBridge 或 Windows API 代码包)从托管代码使用 TaskDialogIndirect?我对可能的实现以及回调声明很好奇(我不完全确定如何实现 TaskDialogCallbackProc)。

PS:我正在寻找直接的 WinAPI 实现,而不是通过包装器实现。

最佳答案

查看 VistaBridge 库。它会给你一个愉快的包装,围绕所有这些东西,包括 TaskDialogIndirect..

http://code.msdn.microsoft.com/VistaBridge

关于c# - 在 C# 中使用 TaskDialogIndirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723454/

相关文章:

c# - 请向我解释扩展方法

C# - 未处理的异常 - 路径中的非法字符

python - 使用 Python 导入模块(PyCogent)

windows - 使用 Golang 1.10 编译 Windows DLL 时遇到问题

c# - 如何使用c#中的其他参数将值从一个表插入到mysql中的另一个表

c# - 自动生成 WPF/Silverlight View (脚手架)

c# - 你如何在 WPF 中改变图像的颜色?

c# - 如何正确处置对象 : injected vs. 拥有

c# - 使用 Knockoutjs 显示点击的项目

windows - 来自环境变量的 Rocket 端口覆盖在 Windows 中不起作用