2010-04-27 75 views
2

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

继MSDN文档TaskDialogIndirect,我得到这个签名:

[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从托管代码中使用TaskDialogIndirect(没有VistaBridge或Windows API代码包)?我很好奇可能的实现,以及回调声明(我不完全确定如何实现TaskDialogCallbackProc)。

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

回答

2

值得期待通过,因为它包含了使用WinAPI的TaskDialogIndirect的一个合理的完整实现在Windows API代码包源代码 - 包括回调 - 这对你自己的实现来说是一个很好的起点。

+0

我看过它,但作为一个包装,它包含了很多额外的代码,在我的情况下是不需要的。我想要做的是,在这一点上,创建一个简单的任务对话框,其中包含一些自定义操作。 – 2010-04-27 17:35:22

0

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

+0

没错。这就是我开始这项研究的原因。 – 2010-04-27 17:31:23

+2

回调应该是一个代表。因为它全部都是参数,它应该相当简单。查看EnumFontFamilyExProc的PInvoke.NET声明进行比较:http://pinvoke.net/default.aspx/Delegates.EnumFontFamExProc – dthorpe 2010-04-27 18:18:34

3

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

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

+0

我正在寻找一个直接的WinAPI实现。一个包装很好,但我试图“看看引擎盖下”并从头开始构建调用。 – 2010-04-27 17:30:56

+2

@ Dennis公平的,尽管如果你下载上面的库,你会看到它是如何完成的,所有的源代码都在那里。 – 2010-04-27 17:33:46