C# 在C中使用TaskDialogIndirect#

C# 在C中使用TaskDialogIndirect#,c#,.net,windows,winapi,interop,C#,.net,Windows,Winapi,Interop,我使用常规的WindowsVista/7任务对话框已经有一段时间了,我想添加一些附加功能(如自定义按钮和页脚),所以我需要使用 根据TaskDialogIndirect的MSDN文档,我得到了以下签名: [DllImport("comctl32.dll",CharSet = CharSet.Unicode,EntryPoint="TaskDialogIndirect")] static extern int TaskDialogIndirect (TASKDIALOGCONFIG pTaskCo

我使用常规的WindowsVista/7任务对话框已经有一段时间了,我想添加一些附加功能(如自定义按钮和页脚),所以我需要使用

根据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);
课程如下所示:

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_按钮的实现:

public class TASKDIALOG_BUTTON
{
    public int nButtonID;
    public String pszButtonText;
}
我不能完全确定我是否走在正确的轨道上。是否有人通过WinAPI直接使用托管代码中的TaskDialogIndirect(没有VistaBridge或Windows API代码包)?我很好奇可能的实现,以及回调声明(我不完全确定如何实现)


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

是PInvoke技术的一个很好的资源。不幸的是,到目前为止,他们只有一个TODO存根。

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


值得仔细阅读Windows API代码包源代码,因为它包含使用WinAPI的TaskDialogIndirect的合理完整的实现(包括回调),这将是您自己实现的一个良好起点。

请看。具体来说,vistaunsafentivemethods.cs文件具有相关的
DllImport
位,包括
VistaTaskDialogCallback
,我认为这是您感兴趣的回调。

我正在寻找直接的WinAPI实现。包装器很好,但是我正在尝试“深入研究”,从头开始构建调用。@Dennis很公平,不过如果你下载上面的库,你会看到它是如何完成的,所有的源代码都在那里。没错。这就是我开始这项研究的原因。回调应该是一个委托。因为它都在params中,所以应该相当简单。请看EnumFontFamilyExProc的PInvoke.NET声明以进行比较:今年早些时候,PInvoke.NET上的页面填写了完整的详细信息。我确实仔细查看了它,但作为一个包装器,它包含了许多我不需要的附加代码。此时,我要做的是创建一个简单的任务对话框,其中包含一些自定义操作。