2014-05-04 50 views
1

我想在我的应用程序的任务栏中实现DeskBand,我已经检查了documentation但它非常稀疏。它没有解释如何实现IDeskBand2接口。无法完成实现IDeskBand2接口

我发现网上很少有关于这方面的信息,我发现的东西不起作用。我发现在CodeProject上看起来很有希望的一段代码只不过是编译时错误的源泉,直到今天,我偶然发现了this网站。

到目前为止,我所得到的是:

class COMInterop 
{ 
    [ComImport] 
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] 
    [Guid("79D16DE4-ABEE-4021-8D9D-9169B261D657")] 

    public interface IDeskBand2 
    { 
     void GetWindow(out System.IntPtr phwnd); 
     void ContextSensitiveHelp([In] bool fEnterMode); 
     void ShowDW([In] bool fShow); 
     void CloseDW([In] UInt32 dwReserved); 
     void ResizeBorderDW(IntPtr prcBorder, [In, MarshalAs(UnmanagedType.IUnknown)] Object punkToolbarSite, bool fReserved); 

     void GetBandInfo(UInt32 dwBandID, UInt32 dwViewMode, ref DESKBANDINFO pdbi); 
     bool CanRenderComposited(); 
     bool GetCompositionState(); 
     void SetCompositionState(bool fCompositionEnabled); 
    } 
} 

被称为COMInterop.cs一个类文件中。

我现在的问题是在第24行。它说The type or namespace 'DESKBANDINFO无法找到。 (是否缺少using指令或程序集引用?)

如何实现这一点 - 你有一个DeskBand任何文档(见下图)用于Windows 7+?

enter image description here

+0

也许这[P/Invoke信息](http://pinvoke.net/default.aspx/Structures/DESKBANDINFO.html)可以帮到你吗? – pasty

+0

感谢@pasty,但现在它说无法找到DBIM。我正在尝试在线搜索以查看原因。 –

+0

您可以在P/Invoke网站搜索您需要的结构... – pasty

回答

4

DESKBAND信息是一个结构文档here。您可以在pinvoke.net上找到C#翻译。

[StructLayout(LayoutKind.Sequential)] 
public struct POINT 
{ 
    public int X; 
    public int Y; 

    public POINT(int x, int y) 
    { 
     this.X = x; 
     this.Y = y; 
    } 

    public POINT(System.Drawing.Point pt) : this(pt.X, pt.Y) { } 

    public static implicit operator System.Drawing.Point(POINT p) 
    { 
     return new System.Drawing.Point(p.X, p.Y); 
    } 

    public static implicit operator POINT(System.Drawing.Point p) 
    { 
     return new POINT(p.X, p.Y); 
    } 
} 

[StructLayout (LayoutKind.Sequential, CharSet=CharSet.Unicode)] 
struct DESKBANDINFO { 
    public uint dwMask; 
    public Point ptMinSize; 
    public Point ptMaxSize; 
    public Point ptIntegral; 
    public Point ptActual; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] 
    public String wszTitle; 
    public uint dwModeFlags; 
    public Int32 crBkgnd; 
} 

桌面带API documentation明确指出它是一个弃用的API。它说:

重要你应该在地方台带,这是不支持作为Windows 7中的

换言之使用缩略图工具栏在新的发展,你应该几乎肯定不会用deskband API解决你的问题。

也就是说,如果您想了解如何使用deskband API,请在C++中查找示例代码。不要将搜索限制在C#中。期望在C++中找到好的例子,但不在C#中。

+0

我正在使用Windows 8.1并且在任务栏上,Microsoft已在任务栏上实施了名为触摸键盘的DeskBand - 您可以点击它并打开触摸键盘。如果它被弃用,那么我假设他们不打算在短期内摆脱它。另外,我不喜欢缩略图工具栏,它们与我正在尝试做的完全相反。 –

+0

我只是告诉你官方的线路是什么。显然,你可以随心所欲。 ;-) –

+0

感谢您的回答@David,这只是一个我一直试图找出很长时间的个人项目。我真的需要完成它。即使它未来可能不工作:)所有这些错误都消失了!我仍然不确定要调用哪些方法来实际让DeskBand出现在任务栏上,以及在何处调用这些方法。 –