C# 在C中使用TaskDialogIndirect#
我使用常规的WindowsVista/7任务对话框已经有一段时间了,我想添加一些附加功能(如自定义按钮和页脚),所以我需要使用 根据TaskDialogIndirect的MSDN文档,我得到了以下签名: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
[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上的页面填写了完整的详细信息。我确实仔细查看了它,但作为一个包装器,它包含了许多我不需要的附加代码。此时,我要做的是创建一个简单的任务对话框,其中包含一些自定义操作。